redis--基础以及--集群架构

Redis简介:node

 Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称做是一款数据结构服务器(data structure server)。mysql

Redis的键值能够包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你能够执行原子操做。例如:对字符串进行附加操做(append);递增哈希中的值;向列表中增长元素;计算集合的交集、并集与差集等。git

为了得到优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。同时,Redis支持数据的持久化,你能够每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操做命令(append only file,aof)。redis

Redis一样支持主从复制(master-slave replication),而且具备很是快速的非阻塞首次同步( non-blocking first synchronization)、网络断开自动重连等功能。同时Redis还具备其它一些特性,其中包括简单的事物支持、发布订阅 ( pub/sub)、管道(pipeline)和虚拟内存(vm)等 。
Redis具备丰富的客户端,支持现阶段流行的大多数编程语言。算法

1.Redis安装流程sql

wget http://download.redis.io/releases/redis-4.0.10.tar.gz
tar -xvf redis-4.0.10.tar.gz 
cd redis-4.0.10
make
make install
nohup redis-server &
注:redis-server默认启动端口是6379,没有密码
若是不使用默认配置文件,启动时能够加上配置文件
nohup redis-server  /redis-2.8.17/redis.conf &
redis-cli -p  ###进入redis##指定端口

1.2.Redis 客户端验证数据库

127.0.0.1:6379> ping
PONG
##设置键值
127.0.0.1:6379> set var "hello word"                   
OK 
##获取键值
127.0.0.1:6379> get var                               
"hello word"
##删除键值
127.0.0.1:6379> del var
##设定有效期
127.0.0.1:6379> setex var 10 "hello word"
##用EXPIRE key s 设定过时时间  毫秒用PEXPIRE 
127.0.0.1:6379> EXPIRE test11 300
###用TTL key 查看过时时间  毫秒用PTTL
127.0.0.1:6379> TTL test11
###用PERSIST key 取消过时时间
127.0.0.1:6379> PERSIST test11
序号	Redis keys命令及描述
1	DEL key
该命令用于在 key 存在是删除 key。
2	DUMP key 
序列化给定 key ,并返回被序列化的值。
3	EXISTS key 
检查给定 key 是否存在。
4	EXPIRE key seconds
为给定 key 设置过时时间。
5	EXPIREAT key timestamp 
EXPIREAT 的做用和 EXPIRE 相似,都用于为 key 设置过时时间。 不一样在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
6	PEXPIRE key milliseconds 
设置 key 的过时时间亿以毫秒计。
7	PEXPIREAT key milliseconds-timestamp 
设置 key 过时时间的时间戳(unix timestamp) 以毫秒计
8	KEYS pattern 
查找全部符合给定模式( pattern)的 key 。例如keys * 返回全部的key
9	MOVE key db 
将当前数据库的 key 移动到给定的数据库 db 当中。
10	PERSIST key 
移除 key 的过时时间,key 将持久保持。
11	PTTL key 
以毫秒为单位返回 key 的剩余的过时时间。
12	TTL key 
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13	RANDOMKEY 
从当前数据库中随机返回一个 key 。
14	RENAME key newkey 
修改 key 的名称
15	RENAMENX key newkey 
仅当 newkey 不存在时,将 key 更名为 newkey 。
16	TYPE key 
返回 key 所储存的值的类型。

  

1.3.Redis关闭程序编程

redis-cli shutdown
systemctl stop redis              ####若是yum安装的用启动程序关闭
注:若是设置上密码后,单纯的redis-cli是关不掉的,必须加上ip、port、passwd
redis-cli -h host -p port -a passwd shutdown

1.4.退出客户端api

localhost:6379> QUIT

1.5.设立密码,并访问链接
缓存

打开redis.conf找到requirepass,去掉默认,修改
requirepass test111
nohup  redis-server /data/ops/app/redis-4.0.10/redis.conf &  ##指定配置文件
redis-cli -h 127.0.0.1 -p 6379 -a test111  ##当设置密码后就得这样输入
auth test111
OK 若是想远程机子访问这个redis须要改配置文件redis.conf protected-mode no ##改成no #bind 127.0.0.1 ###注释只本地访问 ###改完重启redis后就能够访问了 # redis-cli -h 10.240.17.103 -p 6379 -a test111 ##远程访问

1.6.查看redis数据统计信息 

1.5 查看redis数据库统计信息

在cli下执行info

相关含义:

Mrds:6379> info

# Server

redis_version:2.8.19 ###redis版本号

redis_git_sha1:00000000 ###git SHA1

redis_git_dirty:0 ###git dirty flag

redis_build_id:78796c63e58b72dc

redis_mode:standalone ###redis运行模式

os:Linux 2.6.32-431.el6.x86_64 x86_64 ###os版本号

arch_bits:64 ###64位架构

multiplexing_api:epoll ###调用epoll算法

gcc_version:4.4.7 ###gcc版本号

process_id:25899 ###服务器进程PID

run_id:eae356ac1098c13b68f2b00fd7e1c9f93b1c6a2c ###Redis的随机标识符(用于sentinel和集群)

tcp_port:6379 ###Redis监听的端口号

uptime_in_seconds:6419 ###Redis运行时长(s为单位)

uptime_in_days:0 ###Redis运行时长(天为单位)

hz:10

lru_clock:10737922 ###以分钟为单位的自增时钟,用于LRU管理

config_file:/etc/redis/redis.conf ###redis配置文件

# Clients

connected_clients:1 ###已链接客户端的数量(不包括经过从属服务器链接的客户端)

client_longest_output_list:0 ###当前链接的客户端中最长的输出列表

client_biggest_input_buf:0 ###当前链接的客户端中最大的输出缓存

blocked_clients:0 ###正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量 需监控

# Memory

used_memory:2281560 ###由 Redis 分配器分配的内存总量,以字节(byte)为单位

used_memory_human:2.18M ###以更友好的格式输出redis占用的内存

used_memory_rss:2699264 ###从操做系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致

used_memory_peak:22141272 ### Redis 的内存消耗峰值(以字节为单位)

used_memory_peak_human:21.12M ###以更友好的格式输出redis峰值内存占用

used_memory_lua:35840 ###LUA引擎所使用的内存大小

mem_fragmentation_ratio:1.18 ###used_memory_rss 和 used_memory 之间的比率

mem_allocator:jemalloc-3.6.0

###在理想状况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿。当 rss > used ,且二者的值相差较大时,表示存在(内部或外部的)内存碎片。内存碎片的比率能够经过 mem_fragmentation_ratio 的值看出。

当 used > rss 时,表示 Redis 的部份内存被操做系统换出到交换空间了,在这种状况下,操做可能会产生明显的延迟。

# Persistence

loading:0 ###记录服务器是否正在载入持久化文件

rdb_changes_since_last_save:0 ###距离最近一次成功建立持久化文件以后,通过了多少秒

rdb_bgsave_in_progress:0 ###记录了服务器是否正在建立 RDB 文件

rdb_last_save_time:1420023749 ###最近一次成功建立 RDB 文件的 UNIX 时间戳

rdb_last_bgsave_status:ok ###最近一次建立 RDB 文件的结果是成功仍是失败

rdb_last_bgsave_time_sec:0 ###最近一次建立 RDB 文件耗费的秒数

rdb_current_bgsave_time_sec:-1 ###若是服务器正在建立 RDB 文件,那么这个域记录的就是当前的建立操做已经耗费的秒数

aof_enabled:1 ###AOF 是否处于打开状态

aof_rewrite_in_progress:0 ###服务器是否正在建立 AOF 文件

aof_rewrite_scheduled:0 ###RDB 文件建立完毕以后,是否须要执行预定的 AOF 重写操做

aof_last_rewrite_time_sec:-1 ###最近一次建立 AOF 文件耗费的时长

aof_current_rewrite_time_sec:-1 ###若是服务器正在建立 AOF 文件,那么这个域记录的就是当前的建立操做已经耗费的秒数

aof_last_bgrewrite_status:ok ###最近一次建立 AOF 文件的结果是成功仍是失败

aof_last_write_status:ok

aof_current_size:176265 ###AOF 文件目前的大小

aof_base_size:176265 ###服务器启动时或者 AOF 重写最近一次执行以后,AOF 文件的大小

aof_pending_rewrite:0 ###是否有 AOF 重写操做在等待 RDB 文件建立完毕以后执行

aof_buffer_length:0 ###AOF 缓冲区的大小

aof_rewrite_buffer_length:0 ###AOF 重写缓冲区的大小

aof_pending_bio_fsync:0 ###后台 I/O 队列里面,等待执行的 fsync 调用数量

aof_delayed_fsync:0 ###被延迟的 fsync 调用数量

# Stats

total_connections_received:8466 ###服务器已接受的链接请求数量

total_commands_processed:900668 ###服务器已执行的命令数量

instantaneous_ops_per_sec:1 ###服务器每秒钟执行的命令数量

total_net_input_bytes:82724170

total_net_output_bytes:39509080

instantaneous_input_kbps:0.07

instantaneous_output_kbps:0.02

rejected_connections:0 ###由于最大客户端数量限制而被拒绝的链接请求数量

sync_full:2

sync_partial_ok:0

sync_partial_err:0

expired_keys:0 ###由于过时而被自动删除的数据库键数量

evicted_keys:0 ###由于最大内存容量限制而被驱逐(evict)的键数量。

keyspace_hits:0 ###查找数据库键成功的次数。

keyspace_misses:500000 ###查找数据库键失败的次数。

pubsub_channels:0 ###目前被订阅的频道数量

pubsub_patterns:0 ###目前被订阅的模式数量

latest_fork_usec:402 ###最近一次 fork() 操做耗费的毫秒数

# Replication

role:master ###若是当前服务器没有在复制任何其余服务器,那么这个域的值就是 master ;不然的话,这个域的值就是 slave 。注意,在建立复制链的时候,一个从服务器也多是另外一个服务器的主服务器

connected_slaves:2 ###2个slaves

slave0:ip=192.168.65.130,port=6379,state=online,offset=1639,lag=1

slave1:ip=192.168.65.129,port=6379,state=online,offset=1639,lag=0

master_repl_offset:1639

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:1638

# CPU

used_cpu_sys:41.87 ###Redis 服务器耗费的系统 CPU

used_cpu_user:17.82 ###Redis 服务器耗费的用户 CPU

used_cpu_sys_children:0.01 ###后台进程耗费的系统 CPU

used_cpu_user_children:0.01 ###后台进程耗费的用户 CPU

# Keyspace

db0:keys=3101,expires=0,avg_ttl=0 ###keyspace 部分记录了数据库相关的统计信息,好比数据库的键数量、数据库已经被删除的过时键数量等。对于每一个数据库,这个部分都会添加一行如下格式的信息

1.7 其余命令

##查看记录数
127.0.0.1:6379> dbsize
##查看全部KEY
127.0.0.1:6379> KEYS *
##列出全部客户端链接
127.0.0.1:6379> CLIENT LIST
##关闭ip:port的客户端
127.0.0.1:6379> CLIENT KILL 127.0.0.1:11902
##清空全部数据库的全部key
127.0.0.1:6379> FLUSHALL
##清空当前数据库中全部key
127.0.0.1:6379> FLUSHDB
##返回最后一次成功保存数据到磁盘的时间,以UNIX时间戳格式表示
127.0.0.1:6379> LASTSAVE
##返回当前服务器时间,以UNIX时间戳格式表示
127.0.0.1:6379> TIME
##链接到其余数据库(默认数据库是0)
127.0.0.1:6379> SELECT 1
##将当前数据库的 key 移动到指定的数据库
127.0.0.1:6379> MOVE test2 1

1.8./etc/redis.conf

daemonize no      是否之后台daemon方式运行
timeout 0         请求超时时间
maxclients 10000  最大链接数
 
maxmemory <bytes>              最大内存
maxmemory-policy volatile-lru  达到最大内存时的LRU驱逐策略
maxmemory-samples 3            随机抽取n个key执行LRU
hash-max-ziplist-entries 512   Map内部不超过多少个成员时会采用线性紧凑格式存储
hash-max-ziplist-value 64      Map内成员值长度不超过多少字节会采用线性紧凑格式存储
相似的还有,list-max-ziplist-entries 512,list-max-ziplist-value 64等等
 
slowlog-log-slower-than 10000  slow log计入时间,microseconds(1000000)
slowlog-max-len 128            slow log计入条数
查看最大链接数
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"
运行过程当中调整参数
127.0.0.1:6379> config set maxclients 10001

2.数据持久化

 众所周知,redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的全部数据将会所有丢失。

为了解决这个问题,redis提供了持久化功能——RDB和AOF。通俗的讲就是将内存中的数据写入硬盘中。

     1、持久化之全量写入:RDB

more redis.conf 
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"          #持久化文件名称
dir "/data/dbs/redis/6381"    #持久化数据文件存放的路径

上面是redis配置文件里默认的RDB持久化设置,前三行都是对触发RDB的一个条件,例如第一行的意思是每900秒钟里redis数据库有一条数据被修改则触发RDB,依次类推;只要有一条知足就会调用BGSAVE进行RDB持久化。第四行dbfilename指定了把内存里的数据库写入本地文件的名称,该文件是进行压缩后的二进制文件,经过该文件能够把数据库还原到生成该文件时数据库的状态。第五行dir指定了RDB文件存放的目录。

      配置文件修改须要重启redis服务,咱们还能够在命令行里进行配置,即时生效,服务器重启后需从新配置

bin/redis-cli
127.0.0.1:6379> CONFIG GET save         #查看redis持久化配置
1) "save"
2) "900 1 300 10 60 10000"

127.0.0.1:6379> CONFIG SET save "21600 1000" #修改redis持久化配置
OK

 

      而RDB持久化也分两种:SAVE和BGSAVE

      SAVE是阻塞式的RDB持久化,当执行这个命令时redis的主进程把内存里的数据库状态写入到RDB文件(即上面的dump.rdb)中,直到该文件建立完毕的这段时间内redis将不能处理任何命令请求。

      BGSAVE属于非阻塞式的持久化,它会建立一个子进程专门去把内存中的数据库状态写入RDB文件里,同时主进程还能够处理来自客户端的命令请求。但子进程基本是复制的父进程,这等于两个相同大小的redis进程在系统上运行,会形成内存使用率的大幅增长。

(本人在生产中就碰到过这问题,redis自己内存使用率就60%,总的内存使用率在百分之七八十左右,持久化的时候立马飙到百分之一百三十多,告警邮件是天天几十封/(ㄒoㄒ)/~~ 最后根据需求选择了AOF持久化)

 

       2、持久化之增量写入:AOF

       与RDB的保存整个redis数据库状态不一样,AOF是经过保存对redis服务端的写命令(如set、sadd、rpush)来记录数据库状态的,即保存你对redis数据库的写操做,如下就是AOF文件的内容

复制代码
 1 [redis@iZ]$ more appendonly.aof 
 2 *2
 3 $6
 4 SELECT
 5 $1
 6 0
 7 *3
 8 $3
 9 SET
10 $47
11 DEV_USER_LEGAL_F9683BE0E27F1A06C0CB869CEC7E3B22
12 $11
13 ¬
14 *3
15 $3
16 SET
17 $47
复制代码

 

       先让咱们看看如何配置AOF

复制代码
1 [redis@iZ]$ more ~/redis/conf/redis.conf
2 dir "/data/dbs/redis/6381"           #AOF文件存放目录
3 appendonly yes                       #开启AOF持久化,默认关闭
4 appendfilename "appendonly.aof"      #AOF文件名称(默认)
5 appendfsync no                       #AOF持久化策略
6 auto-aof-rewrite-percentage 100      #触发AOF文件重写的条件(默认)
7 auto-aof-rewrite-min-size 64mb       #触发AOF文件重写的条件(默认)
复制代码

      要弄明白上面几个配置就得从AOF的实现去理解,AOF的持久化是经过命令追加、文件写入和文件同步三个步骤实现的。当reids开启AOF后,服务端每执行一次写操做(如set、sadd、rpush)就会把该条命令追加到一个单独的AOF缓冲区的末尾,这就是命令追加;而后把AOF缓冲区的内容写入AOF文件里。看上去第二步就已经完成AOF持久化了那第三步是干什么的呢?这就须要从系统的文件写入机制提及:通常咱们如今所使用的操做系统,为了提升文件的写入效率,都会有一个写入策略,即当你往硬盘写入数据时,操做系统不是实时的将数据写入硬盘,而是先把数据暂时的保存在一个内存缓冲区里,等到这个内存缓冲区的空间被填满或者是超过了设定的时限后才会真正的把缓冲区内的数据写入硬盘中。也就是说当redis进行到第二步文件写入的时候,从用户的角度看是已经把AOF缓冲区里的数据写入到AOF文件了,但对系统而言只不过是把AOF缓冲区的内容放到了另外一个内存缓冲区里而已,以后redis还须要进行文件同步把该内存缓冲区里的数据真正写入硬盘上才算是完成了一次持久化。而什么时候进行文件同步则是根据配置的appendfsync来进行:

      appendfsync有三个选项:always、everysec和no:

一、选择always的时候服务器会在每执行一个事件就把AOF缓冲区的内容强制性的写入硬盘上的AOF文件里,能够当作你每执行一个redis写入命令就往AOF文件里记录这条命令,这保证了数据持久化的完整性,但效率是最慢的,却也是最安全的;

二、配置成everysec的话服务端每执行一次写操做(如set、sadd、rpush)也会把该条命令追加到一个单独的AOF缓冲区的末尾,并将AOF缓冲区写入AOF文件,而后每隔一秒才会进行一次文件同步把内存缓冲区里的AOF缓存数据真正写入AOF文件里,这个模式兼顾了效率的同时也保证了数据的完整性,即便在服务器宕机也只会丢失一秒内对redis数据库作的修改;

三、将appendfsync配置成no则意味redis数据库里的数据就算丢失你也能够接受,它也会把每条写命令追加到AOF缓冲区的末尾,而后写入文件,但何时进行文件同步真正把数据写入AOF文件里则由系统自身决定,即当内存缓冲区的空间被填满或者是超过了设定的时限后系统自动同步。这种模式下效率是最快的,但对数据来讲也是最不安全的,若是redis里的数据都是从后台数据库如mysql中取出来的,属于随时能够找回或者不重要的数据,那么能够考虑设置成这种模式。

     

      相比RDB每次持久化都会内存翻倍,AOF持久化除了在第一次启用时会新开一个子进程建立AOF文件会大幅度消耗内存外,以后的每次持久化对内存使用都很小。但AOF也有一个不可忽视的问题:AOF文件过大。你对redis数据库的每一次写操做都会让AOF文件里增长一条数据,长此以往这个文件会造成一个庞然大物。还好的是redis提出了AOF重写的机制,即咱们上面配置的auto-aof-rewrite-percentage和auto-aof-rewrite-min-size。AOF重写机制这里暂不细述,以后本人会另开博文对此解释,有兴趣的同窗能够看看。咱们只要知道AOF重写既是从新建立一个精简化的AOF文件,里面去掉了多余的冗余命令,并对原AOF文件进行覆盖。这保证了AOF文件大小处于让人能够接受的地步。而上面的auto-aof-rewrite-percentage和auto-aof-rewrite-min-size配置触发AOF重写的条件。       

      Redis 会记录上次重写后AOF文件的文件大小,而当前AOF文件大小跟上次重写后AOF文件大小的百分比超过auto-aof-rewrite-percentage设置的值,同时当前AOF文件大小也超过auto-aof-rewrite-min-size设置的最小值,则会触发AOF文件重写。以上面的配置为例,当如今的AOF文件大于64mb同时也大于上次重写AOF后的文件大小,则该文件就会被AOF重写。

 

      最后须要注意的是,若是redis开启了AOF持久化功能,那么当redis服务重启时会优先使用AOF文件来还原数据库。

 

 

1. Redis主从同步

Redis支持主从同步。数据能够从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制。

2. 配置主从同步

Mater Slave的模式,从Slave向Master发起SYNC命令。

能够是1 Master 多Slave,能够分层,Slave下能够再接Slave,可扩展成树状结构。

2.1 配置Mater,Slave

配置很是简单,只需在slave的设定文件中指定master的ip和port

Master: test166

修改设定文件,服务绑定到ip上

1
2
# vi /etc/redis.conf
bind 10.86.255.166

重启Redis

# systemctl restart redis

1
# less /etc/redis.conf

Slave: test167

修改设定文件,指定Master

1
2
3
slaveof <masterip> <masterport>    指定master的ip和port
masterauth <master-password>       master有验证的状况下
slave- read -only  yes                 设置slave为只读模式

也能够用命令行设定:

1
2
redis 127.0.0.1:9999> slaveof localhost 6379
OK

2.2 同期状况确认

Master:

1
2
3
4
5
6
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.86.255.167,port=6379,state=online,offset=309,lag=1
……

 Slave:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:10.86.255.166
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:365
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

同期正常时:

master_link_status:up

master_repl_offset和slave_repl_offset相等,

master_last_io_seconds_ago10秒内。

2.3 Slave升级为Master

Master不可用的状况下,中止Master,将Slave的设定无效化后,Slave升级为Master

1
2
3
4
5
6
7
redis 127.0.0.1:9999> SLAVEOF NO ONE
  OK
 
redis 127.0.0.1:9999> info
......
role:master
......

2.4 Health Check

Slave按照repl-ping-slave-period的间隔(默认10秒),向Master发送ping。

若是主从间的连接中断后,再次链接的时候,2.8之前按照full sync再同期。2.8之后,由于有backlog的设定,backlog存在master的内存里,从新链接以前,若是redis没有重启,而且offset在backlog保存的范围内,能够实现从断开地方同期,不符合这个条件,仍是full sync

 

用monitor命令,能够看到slave在发送ping

1
2
3
127.0.0.1:6379> monitor
OK
1448515184.249169 [0 10.86.255.166:6379]  "PING"

2.5 设置Master的写行为

2.8之后,能够在设定文件中设置,Master只有当有N个Slave处于链接状态时,接受写操做

1
2
min-slaves-to-write 3
min-slaves-max-lag 10

3. Redis HA管理工具

redis-sentinel 能监视同期的状态,发现Master down的时候,会进行failover,将Slave升级为Master,启动后会自动更新sentinel设定文件,发生failover时,会自动修改sentinel和redis的设定文件

 

环境:

Master: 10.86.255.167 :6379    sentinel:26379

Slave1: 10.86.255.166 :6379    sentinel:26379

Slave2: 10.86.255.167 :7379    sentinel:36379

Sentinel的设定文件在/etc/redis-sentinel.conf,对failover的动做等能够进行一些定义,本次主要验证Sentinel的动做,设定文件能够根据具体状况自行调整 

3.1 设定Master,Slave

参照上文设定Master,Slave,并确认Mater和2个Slave的同期状态正常

3.2 Master上设定Sentinel

1
2
3
# vi /etc/redis-sentinel.conf
daemonize  yes
sentinel monitor mymaster <master ip> 6379 2

启动sentinel

1
2
3
# redis-sentinel /etc/redis-sentinel.conf
# redis-server /etc/redis-sentinel.conf --sentinel

确认

1
2
# redis-cli -p 26379
127.0.0.1:26379> INFO sentinel

确认Master信息

1
127.0.0.1:26379> sentinel masters

确认Slave信息

1
127.0.0.1:26379> sentinel slaves mymaster

3.3 Slave上设定Sentinel

在slave1上设定sentinel

1
2
3
# vi /etc/redis-sentinel.conf
daemonize  yes
sentinel monitor mymaster <master ip> 6379 2

启动slave1

1
# redis-sentinel /etc/redis-sentinel.conf

在slave2上设定sentinel

1
2
3
4
# less /etc/redis-sentinel_36379.conf
daemonize  yes
port 36379
sentinel monitor mymaster <master ip> 6379 2

启动slave2

1
# redis-sentinel /etc/redis-sentinel_36379.conf

3.4 动做确认

中止Master

1
127.0.0.1:6379> SHUTDOWN

确认日志发生fail over

1
# tail /var/log/redis/sentinel.log

确认Slave2变成Master,Slave1是Slave

1
test167:7379> info replication

1
test166:6379> info replication

启动刚才停掉的Master,确认变为Slave

1
10.86.255.167:6379> info replication

3.5 Sentinel命令

1
2
3
4
5
6
127.0.0.1:26379> sentinel masters
127.0.0.1:26379> sentinel slaves mymaster
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
127.0.0.1:26379> SENTINEL reset mymaster
127.0.0.1:26379> SENTINEL failover mymaster
127.0.0.1:26379> SENTINEL flushconfig mymaster
daemonize yes
pidfile /data/ops/app/redis-2.8.17_yunping_6381/redis.pid
port 6381
tcp-backlog 20000
timeout 0
tcp-keepalive 0
loglevel notice
logfile "/data/ops/app/redis-2.8.17_yunping_6381/redis.log"
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 2GB
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
rename-command CONFIG ""
rename-command EVAL ""
生产环境
相关文章
相关标签/搜索