02-Redis-3.2.3 Sentinel集群

1.Redis 的哨兵模式(Sentinel)为 Redis 提供了高可用。可以不用人为干预,自动提升 Slave 为 Master,从而实现自动故障转移。Sentinel 也提供了对 Redis 实例的监控、告警、为 Clients 提供配置服务等。

2.集群IP分配:

172.16.1.17 redis-node01  redis,sentinel   主
172.16.1.18 redis-node02  redis,sentinel   从
172.16.1.81 redis-node03  redis,sentinel   从

3.redis-node01主配置文件

[root@redis-node01 ~]#  grep -Ev '^#|^$' /etc/redis/6379.conf
bind 127.0.0.1 172.16.1.17           # 监听IP地址
protected-mode yes 
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes                         # 后台运行模式
supervised no
pidfile /var/run/redis_6379.pid       # pid文件
loglevel notice
logfile "/etc/redis/redis_6379.log"   # 日志文件
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump_6379.rdb               # rdp快照文件
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
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-size -2
list-compress-depth 0
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   

4.redis-node02,redisnode03从服务配置

[root@redis-node02 ~]# grep -Ev '^#|^$' /etc/redis/6379.conf
bind 127.0.0.1 172.16.1.18
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/etc/redis/redis_6379.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump_6379.rdb
dir ./
slaveof 172.16.1.17 6379               # 添加Master端的IP与端口
slave-serve-stale-data yes
slave-read-only yes                    # 默认从服务器只读,不能写
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100                     # 优先级配置,2个从服务器这个不要一样,数字小的优先取得master
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-size -2
list-compress-depth 0
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

5.在redis主服务器检查

[root@redis-node01 ~]# /usr/local/redis/bin/redis-cli -h 172.16.1.17 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.1.18,port=6379,state=online,offset=616898,lag=1    # 从服务器1
slave1:ip=172.16.1.81,port=6379,state=online,offset=616898,lag=1    # 从服务器2
master_repl_offset:616898
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:616897

6.在redis从从服务器复制状态

[root@redis-node02 redis]# /usr/local/redis/bin/redis-cli -h 172.16.1.18 info replication 
# Replication
role:slave                       # 从服务器
master_host:172.16.1.17          # 主服务器IP
master_port:6379
master_link_status:up       # 状态up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:616926
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

7.redis从服务器配置sentinel

[root@redis-node02 redis]# cp /usr/local/src/redis-3.2.3/sentinel.conf /etc/redis/
[root@redis-node02 redis]# vim /etc/redis/sentinel.conf
bind 172.16.1.18                                # 绑定IP地址,一定要绑定,不然会失败!!!
port 26379                                      # sentinel监听的端口
daemonize yes                                   # 后台运行
logfile "/etc/redis/sentinel_log.log"           # 日志文件
pidfile "/etc/redis/sentinel.pid"               # pid文件
sentinel monitor mymaster 172.16.1.17 6379 1    # 主服务器信息,末尾数字n表示n个哨兵同时检测到主服务器挂了时,redis才会认为master挂掉并进行从服务器的切换,数字不能大于哨兵的个数,mymaster 可随意起名,但是要与下列的配置保持一致 
sentinel down-after-milliseconds mymaster 30000 # 表示sentinel在多少毫秒后连接不到master认为master断开 
sentinel parallel-syncs mymaster 1              # 表示一次性允许多少slave指向新的new master. 这里默认为1,如果该数值过大会导致新的master服务器IO剧增,保持默认1即可 
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh # 在重新配置new master,new slave过程,可以触发的脚本,可发邮件或者修改项目中的redis指向等

 

8.redis-node01,redis-node02启动sentinel

[root@redis-node02 redis]# /usr/local/redis/bin/redis-server /etc/redis/sentinel.conf --sentinel
或
[root@redis-node02 redis]# redis-sentinel sentinel.conf
[root@redis-node02 redis]# lsof -i :26379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-sen 2534 root 4u IPv4 346081 0t0 TCP 172.16.1.18:26379 (LISTEN)
redis-sen 2534 root 11u IPv4 346211 0t0 TCP 172.16.1.18:41863->172.16.1.81:26379 (ESTABLISHED)
redis-sen 2534 root 12u IPv4 346213 0t0 TCP 172.16.1.18:26379->172.16.1.81:54196 (ESTABLISHED)

9.查看sentinel状态

[root@redis-node02 redis]# redis-cli -h 172.16.1.18 -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.16.1.81:6379,slaves=2,sentinels=2   # 2个sentinel节点

 10.redis故障转移测试

[root@redis-node01 ~]# redis-cli -h 172.16.1.17 -p 6379 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.1.18,port=6379,state=online,offset=8077,lag=1
slave1:ip=172.16.1.81,port=6379,state=online,offset=7940,lag=1
master_repl_offset:8214
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:8213

[root@redis-node02 redis]# redis-cli -h 172.16.1.18 -p 6379 info replication 
# Replication
role:slave
master_host:172.16.1.17
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:26274
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

 

# 停掉redis-node01

[root@redis-node01 redis]# /etc/init.d/redis stop
Stopping ...
Redis stopped

# 已经切换到1.81中

[root@redis-node02 redis]# redis-cli -h 172.16.1.18 -p 6379 info replication
# Replication
role:slave
master_host:172.16.1.81
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:7614
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

# 在redis-node03节点查看

[root@redis-node03 redis]# redis-cli -h 172.16.1.81 -p 6379 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.1.18,port=6379,state=online,offset=12938,lag=0
master_repl_offset:12952
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:12951

 11.监控2个实例

port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
 
#master 7000
sentinel monitor master-7000 127.0.0.1 7000 2
sentinel down-after-milliseconds master-7000 30000
sentinel parallel-syncs master-7000 1
sentinel failover-timeout master-7000 180000
 
#master 7001
sentinel monitor master-7001 127.0.0.1 7001 1
sentinel down-after-milliseconds master-7001 30000
sentinel parallel-syncs master-7001 1
sentinel failover-timeout master-7001 180000

  

 

 

参考文档:

http://676021.blog.51cto.com/666021/1834264

http://blog.163.com/a12333a_li/blog/static/87594285201304103257837/

http://www.cnblogs.com/wjoyxt/p/4242184.html 

http://blog.csdn.net/lijunxian1013/article/details/51994254

 

posted @ 2016-09-05 13:59  sunmmi  阅读(452)  评论(0编辑  收藏  举报