分享

Redis采用Sentinel实现主从切换

 WindySky 2017-06-08

今天研究了一下Sentinel,实现了Redis的主从切换,下面简单介绍一下。
以下是我使用的两台机器,没有多余的机器,所以把sentinel部署在了166上面,最好是三台机器一起测试,效果会更明显。
master:192.168.11.165 port:20081
slave:192.168.11.166 port:20080
sentinel:192.168.11.166 port:26379

Linux 安装和配置Redis
一、Redis的安装
1.Redis下载:wget http://download./releases/redis-3.0.3.tar.gz
2.解压:tar xzf redis-3.0.3.tar.gz
3.cd redis-3.0.3
4.make(编译)
5.编译完成进入src目录下就看到了3个可执行文件redis-server,redis-benchmark,redis-cli,还有个redis.conf和src同一层
6.拷贝这4个文件到一个文件夹下,方便redis命令的操作,cp redis-server ../redis/
7.启动redis服务:./redis-server redis.conf
8.netstat -tunpl | grep 20081
9.登录redis:./redis-cli -h 192.168.11.165 -p 20081 -a test

二、Redis的简单配置
1.是否设置为守护进程:daemonize no 默认不是
2.绑定的主机地址:bind 127.0.0.1
3.当客户端闲置多长时间后关闭连接:timeout 300 (如果设置为0表示关闭此设置)
4.日志级别:Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
Debug:记录很多信息,用于开发和测试
Varbose:有用的信息,不像debug会记录那么多
Notice:普通的verbose,常用于生产环境
Warning:只有非常重要或者严重的信息会记录到日志
5.数据库数量设置databases:16
6.slaveof 192.168.11.165 20081(仅限于slave,master不需要配置)

Sentinel配置
port:26379
sentinel monitor mymaster 192.168.11.165 20081 1
sentinel auth-pass mymaster test

启动
首先启动master,./redis-cli -h 192.168.11.165 -p 20081 -a test
然后是slave,./redis-cli -h 192.168.11.166 -p 20080 -a test
最后是Sentinel,./redis-server ../sentinel.conf –sentinel
可以看到Sentinel上面打印出
18662:X 11 Jan 13:48:16.327 # Sentinel runid is a03d495123bedf371d41308c985127fa086b9541
18662:X 11 Jan 13:48:16.327 # +monitor master mymaster 192.168.11.166 20080 quorum 1
18662:X 11 Jan 13:48:47.487 * +slave slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
第二行代表监控的master名称是mymaster,ip地址是192.168.11.165 port是20081
第三行表示加入166这个slave

主从切换
下面我们模仿灾难,用命令./redis-cli -h 192.168.11.165 -p 20081 -a test 进入到master客户端,然后执行shutdown命令使master关闭,看看Sentinel会发生什么情况,可以看到Sentinel上面打印出

18747:X 11 Jan 13:55:23.204 # +sdown master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.205 # +odown master mymaster 192.168.11.165 20081 #quorum 1/1
18747:X 11 Jan 13:55:23.205 # +new-epoch 16
18747:X 11 Jan 13:55:23.205 # +try-failover master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.217 # +vote-for-leader ca166b082f7772e3958cc4284ebc748ce9608884 16
18747:X 11 Jan 13:55:23.217 # +elected-leader master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.217 # +failover-state-select-slave master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.277 # +selected-slave slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.277 * +failover-state-send-slaveof-noone slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.354 * +failover-state-wait-promotion slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.272 # +promoted-slave slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.272 # +failover-state-reconf-slaves master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.334 # +failover-end master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.334 # +switch-master mymaster 192.168.11.165 20081 192.168.11.166 20080
18747:X 11 Jan 13:55:24.335 * +slave slave 192.168.11.166:20081 192.168.11.166 20081 @ mymaster 192.168.11.166 20080
18747:X 11 Jan 13:55:24.335 * +slave slave 192.168.11.165:20081 192.168.11.165 20081 @ mymaster 192.168.11.166 20080

看到了+switch-master mymaster 192.168.11.165 20081 192.168.11.166 20080这一行了吗,这就代表它已经自动把166这台slave转为了master
这一行18747:X 11 Jan 13:55:24.335 * +slave slave 192.168.11.165:20081 192.168.11.165 20081 @ mymaster 192.168.11.166 20080
表示165变为了slave,那么真是这样吗,我们重新启动165会怎么样呢,用命令./redis-server redis.conf启动165看看会发生什么,Sentinel上面打印出了18747:X 11 Jan 13:59:17.417 * +convert-to-slave slave 192.168.11.165:20081 192.168.11.165 20081 @ mymaster 192.168.11.166 20080
进入165客户端,输入命令INFO Replication,可以看到

Replication

role:slave
master_host:192.168.11.166
master_port:20080
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:3000
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
确实变为了slave,master_host:192.168.11.166
自此我们已经实现了Redis的主从切换了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多