redis-sentinel

2017-01-10 10:07:38来源:作者:jdk 源码剖析人点击

第七城市

redis-sentinel: 解决的是主从切换的的问题,其已经被集成在redis2.4+的版本中

过程以及效果:

1):Master状态检测

2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave

3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

配置:sentinel.conf 配置 (在redis包的根目录下有)

####master sentinel.conf##sentinel实例之间的通讯端口port 26379####sentinel需要监控的master信息:<mastername> <masterIP> <masterPort> <quorum>.####<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效" 才会认为master为ODWON("客观"失效) .sentinel monitor mymaster 127.0.0.1 6381 2sentinel down-after-milliseconds mymaster 1000sentinel failover-timeout mymaster 180000sentinel parallel-syncs mymaster 1

启动:(redis-sentinel 在编译后的src文件夹里有)

sudo ./redis-sentinel sentinel_A.conf --sentinelsudo ./redis-sentinel sentinel_B.conf --sentinel

(注意:如果配置的quorum为2,要启动两个sentinel进程)

实验验证:

准备当前环境:

master port:6379

slaver port:6380,6381

杀死master进程:

sudo netstat -anplut|grep "6379"sudo kill -9 26394

redis-sentinel的控制台日志:

[26590] 09 Jan 11:08:01.984 # +sdown master mymaster 127.0.0.1 6379[26590] 09 Jan 11:08:02.139 # +new-epoch 1[26590] 09 Jan 11:08:02.140 # +vote-for-leader a0850358ee7cfbded6ad3943ee1d17410abc7f7e 1[26590] 09 Jan 11:08:03.090 # +odown master mymaster 127.0.0.1 6379 #quorum 2/2[26590] 09 Jan 11:08:03.090 # Next failover delay: I will not start a failover before Mon Jan 9 11:14:02 2017[26590] 09 Jan 11:08:03.216 # +config-update-from sentinel 127.0.0.1:26379 127.0.0.1 26379 @ mymaster 127.0.0.1 6379[26590] 09 Jan 11:08:03.216 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6381[26590] 09 Jan 11:08:03.216 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381[26590] 09 Jan 11:08:03.217 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381[26590] 09 Jan 11:08:03.239 * +slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6381[26590] 09 Jan 11:08:33.283 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381

查看当前各个redis 实例的状态:

[xinchun.wang@l-ttstw7.f.dev.cn6 ~/redis]$ sudo ./redis-cli -h 127.0.0.1 -p 6380 info Replication# Replicationrole:slavemaster_host:127.0.0.1master_port:6381master_link_status:upmaster_last_io_seconds_ago:0master_sync_in_progress:0slave_repl_offset:740121slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0

6380 继续为 slaver,但是master 已经改为 6381

[xinchun.wang@l-ttstw7.f.dev.cn6 ~/redis]$ sudo ./redis-cli -h 127.0.0.1 -p 6381 info Replication# Replicationrole:masterconnected_slaves:2slave0:ip=127.0.0.1,port=6382,state=online,offset=748997,lag=1slave1:ip=127.0.0.1,port=6380,state=online,offset=749130,lag=0master_repl_offset:749130repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:749129

此时:6381 被修改为了master,并且可以看到从的实例,6380,6382

另外:此时port 为 6379的 redis的实例不存在了

观察下 6380,6381,6382的 redis 配置,发现slaveof 配置项发生了变化

其中:6381 过去是slaver,现在是master, slaveof 配置项删除了

6380 过去是slaver,现在还是,配置从slaveof 127.0.0.1 6379 改为slaveof 127.0.0.1 6381

验证结束!

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台