author:JevonWei
版权声明:原创作品 blog:http://119.23.52.191/ ---构建Sentinel监控Redis的主节点架构
拓扑结构结构
拓扑环境
master 172.16.252.82slave1 172.16.252.184slave2 172.16.252.67sentinl1 172.16.252.82sentinl2 172.16.252.184sentinl3 172.16.252.67
实现Redis的主从复制
各节点安装redis(epel)
[root@master ~]# yum -y install redis[root@master ~]# setenforce 0[root@master ~]# iptables -F[root@master ~]# systemctl start redis[root@slave1 ~]# yum -y install redis[root@slave1 ~]# setenforce 0[root@slave1 ~]# iptables -F[root@slave1 ~]# systemctl start redis[root@slave2 ~]# yum -y install redis[root@slave2 ~]# setenforce 0[root@slave2 ~]# iptables -F
配置redis
master
[root@slave1 ~]# vim /etc/redis.conf bind 172.16.252.82 \\监听本地IPrequirepass "danran" 添加认证密码[root@slave1 ~]# systemctl restart redis[root@slave1 ~]# ss -ntlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 172.16.252.184:6379 *:*
slave1
[root@slave1 ~]# vim /etc/redis.conf bind 172.16.252.184 \\监听本地IP[root@slave1 ~]# systemctl restart redis[root@slave1 ~]# ss -ntlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 172.16.252.184:6379 *:* [root@slave1 ~]# redis-cli -h 172.16.252.184172.16.252.184:6379> SLAVEOF 172.16.252.82 6379 设置成为172.16.252.82的从数据库OK172.16.252.184:6379> CONFIG SET masterauth danran 设置master主服务端的认证密码OK172.16.252.184:6379> CONFIG REWRITE 保存到配置文件永久生效OK
slave2
[root@slave2 ~]# vim /etc/redis.conf bind 172.16.252.67 \\监听本地IPslaveof 172.16.252.82 6379masterauth "danran" 修改REPLICAION配置段的slaveof和masterauth参数设置从节点 [root@slave2 ~]# systemctl start redis[root@slave2 ~]# ss -ntlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 172.16.252.67:6379 *:*
master查看主从节点信息
[root@master ~]# redis-cli -h 172.16.252.82172.16.252.82:6379> AUTH danranOK172.16.252.82:6379> INFO Replication# Replicationrole:masterconnected_slaves:2slave0:ip=172.16.252.184,port=6379,state=online,offset=652,lag=0 \\lag表示与master节点同步延时时长slave1:ip=172.16.252.67,port=6379,state=online,offset=652,lag=0master_repl_offset:652repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:651
测试数据同步
master
[root@master ~]# redis-cli -h 172.16.252.82172.16.252.82:6379> AUTH danranOK172.16.252.82:6379> ZADD colors 1 red 2 bulue 6 green 4 gray(integer) 4
slave1
[root@slave1 ~]# redis-cli -h 172.16.252.184 172.16.252.184:6379> ZRANGE colors 0 51) "red"2) "bulue"3) "gray"4) "green"
slave2
[root@slave2 ~]# redis-cli -h 172.16.252.67172.16.252.67:6379> ZRANGE colors 0 51) "red"2) "bulue"3) "gray"4) "green"
配置Sentinel系统
sentinel1
[root@sentinel ~]# vim /etc/redis-sentinel.conf bind 172.16.252.82 监听IPsentinel monitor mymaster 172.16.252.82 6379 2 mymaster为master的标识符,监控172.16.252.82主机的6379端口,至少2个主机投票推举方可推举出主节点sentinel auth-pass mymaster danran sentinel认证密码,建议所有节点的密码认证一致sentinel down-after-milliseconds mymaster 5000 当超出5s连接不到主节点时,则表示主节点故障,重新推选出主节点[root@sentinel ~]# systemctl start redis-sentinel[root@sentinel ~]# ss -ntlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:26379 *:*
sentinel2
[root@sentine2 ~]# vim /etc/redis-sentinel.conf bind 172.16.252.184 监听地址sentinel monitor mymaster 172.16.252.82 6379 2 mymaster为master的标识符,监控172.16.252.82主机的6379端口,至少2个主机投票推举方可推举出主节点sentinel auth-pass mymaster danran sentinel认证密码,建议所有节点的密码认证一致sentinel down-after-milliseconds mymaster 5000 当超出5s连接不到主节点时,则表示主节点故障,重新推选出主节点[root@sentine2 ~]# systemctl start redis-sentinel[root@sentine2 ~]# ss -ntlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:26379 *:*
sentinel3
[root@sentine3 ~]# vim /etc/redis-sentinel.conf bind 172.16.252.67 监听IPsentinel monitor mymaster 172.16.252.82 6379 2 mymaster为master的标识符,监控172.16.252.82主机的6379端口,至少2个主机投票推举方可推举出主节点sentinel auth-pass mymaster danran sentinel认证密码,建议所有节点的密码认证一致sentinel down-after-milliseconds mymaster 5000 当超出5s连接不到主节点时,则表示主节点故障,重新推选出主节点[root@sentine3 ~]# systemctl start redis-sentinel[root@sentine3 ~]# ss -ntlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:26379 *:*
sentinel查看主从节点信息并测试主从节点切换
[root@sentinel ~]# redis-cli -h 172.16.252.82 -p 26379172.16.252.82:26379> SENTINEL masters 显示主节点的属性信息,主节点为172.16.252.821) 1) "name" 2) "mymaster" 主节点名称 3) "ip" 4) "172.16.252.82" 5) "port" 6) "6379" 7) "runid" 8) "2847d8ceda8d3a03f0df814091fc5174921f57ea" 9) "flags" 10) "master" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "198" 19) "last-ping-reply" 20) "198" 21) "down-after-milliseconds" 22) "3000" 23) "info-refresh" 24) "4299" 25) "role-reported" 26) "master" 27) "role-reported-time" 28) "4305" 29) "config-epoch" 30) "0" 31) "num-slaves" 32) "2" 33) "num-other-sentinels" 34) "2" 35) "quorum" 36) "2" 37) "failover-timeout" 超时时间 38) "180000" 39) "parallel-syncs" 40) "1"172.16.252.82:26379> SENTINEL slave mymaster 显示主节点为mymaster的从节点属性信息(error) ERR Unknown sentinel subcommand 'slave'172.16.252.82:26379> SENTINEL slaves mymaster1) 1) "name" 2) "172.16.252.184:6379" 3) "ip" 4) "172.16.252.184" 5) "port" 6) "6379" 7) "runid" 8) "" 9) "flags" 10) "s_down,slave" 11) "link-pending-commands" 12) "14" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "233250" 17) "last-ok-ping-reply" 18) "233250" 19) "last-ping-reply" 20) "233250" 21) "s-down-time" 22) "230233" 23) "down-after-milliseconds" 24) "3000" 25) "info-refresh" 26) "1505553054438" 27) "role-reported" 28) "slave" 29) "role-reported-time" 30) "233250" 31) "master-link-down-time" 32) "0" 33) "master-link-status" 34) "err" 35) "master-host" 36) "?" 37) "master-port" 38) "0" 39) "slave-priority" 40) "100" 41) "slave-repl-offset" 42) "0"2) 1) "name" 2) "172.16.252.67:6379" 3) "ip" 4) "172.16.252.67" 5) "port" 6) "6379" 7) "runid" 8) "fc91077ac51c954817a85922908320f7f70e2d61" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "374" 19) "last-ping-reply" 20) "374" 21) "down-after-milliseconds" 22) "3000" 23) "info-refresh" 24) "2509" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "233250" 29) "master-link-down-time" 30) "0" 31) "master-link-status" 32) "ok" 33) "master-host" 34) "172.16.252.82" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "186072"172.16.252.82:26379> SENTINEL failover mymaster 手动切换主节点OK172.16.252.82:26379> SENTINEL masters 主节点由172.16.252.82切换到了172.16.252.671) 1) "name" 2) "mymaster" 3) "ip" 4) "172.16.252.67" 5) "port" 6) "6379" 7) "runid" 8) "fc91077ac51c954817a85922908320f7f70e2d61" 9) "flags" 10) "master" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "37" 19) "last-ping-reply" 20) "37" 21) "down-after-milliseconds" 22) "3000" 23) "info-refresh" 24) "8118" 25) "role-reported" 26) "master" 27) "role-reported-time" 28) "27140" 29) "config-epoch" 30) "1" 31) "num-slaves" 32) "2" 33) "num-other-sentinels" 34) "2" 35) "quorum" 36) "2" 37) "failover-timeout" 38) "180000" 39) "parallel-syncs" 40) "1" 172.16.252.82:26379> SENTINEL slaves mymaster 显示主节点名称为mymaster的从节点属性信息1) 1) "name" 2) "172.16.252.184:6379" 3) "ip" 4) "172.16.252.184" 5) "port" 6) "6379" 7) "runid" 8) "" 9) "flags" 10) "s_down,slave" 11) "link-pending-commands" 12) "9" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "138676" 17) "last-ok-ping-reply" 18) "138676" 19) "last-ping-reply" 20) "138676" 21) "s-down-time" 22) "135668" 23) "down-after-milliseconds" 24) "3000" 25) "info-refresh" 26) "1505553462755" 27) "role-reported" 28) "slave" 29) "role-reported-time" 30) "138676" 31) "master-link-down-time" 32) "0" 33) "master-link-status" 34) "err" 35) "master-host" 36) "?" 37) "master-port" 38) "0" 39) "slave-priority" 40) "100" 41) "slave-repl-offset" 42) "0"2) 1) "name" 2) "172.16.252.82:6379" 3) "ip" 4) "172.16.252.82" 5) "port" 6) "6379" 7) "runid" 8) "2847d8ceda8d3a03f0df814091fc5174921f57ea" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "363" 19) "last-ping-reply" 20) "363" 21) "down-after-milliseconds" 22) "3000" 23) "info-refresh" 24) "65" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "118575" 29) "master-link-down-time" 30) "1505553462000" 31) "master-link-status" 32) "err" 33) "master-host" 34) "172.16.252.67" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "1" 模拟主节点172.16.252.67故障,则主节点完成切换[root@slave2 ~]# killall redis-server 172.16.252.82:26379> SENTINEL masters 主节点由172.16.252.67切换成了172.16.252.184 1) 1) "name" 2) "mymaster" 3) "ip" 4) "172.16.252.184" 5) "port" 6) "6379" 7) "runid" 8) "" 9) "flags" 10) "s_down,o_down,master" 11) "link-pending-commands" 12) "100" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "9613" 17) "last-ok-ping-reply" 18) "9613" 19) "last-ping-reply" 20) "9613" 21) "s-down-time" 22) "6611" 23) "o-down-time" 24) "5466" 25) "down-after-milliseconds" 26) "3000" 27) "info-refresh" 28) "14593" 29) "role-reported" 30) "master" 31) "role-reported-time" 32) "9613" 33) "config-epoch" 34) "2" 35) "num-slaves" 36) "2" 37) "num-other-sentinels" 38) "2" 39) "quorum" 40) "2" 41) "failover-timeout" 42) "180000" 43) "parallel-syncs" 44) "1" 使故障的172.16.252.67上线 [root@slave2 ~]# systemctl start redis再次查看mymaster主节点的从节点信息172.16.252.82:26379> SENTINEL slaves mymaster1) 1) "name" 2) "172.16.252.67:6379" 3) "ip" 4) "172.16.252.67" 5) "port" 6) "6379" 7) "runid" 8) "a8be66745daee322e5c2a2796a5a07623e6ab25d" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "102" 19) "last-ping-reply" 20) "102" 21) "down-after-milliseconds" 22) "3000" 23) "info-refresh" 24) "785" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "91331" 29) "master-link-down-time" 30) "1505554185000" 31) "master-link-status" 32) "err" 33) "master-host" 34) "172.16.252.184" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "1" 2) 1) "name" 2) "172.16.252.82:6379" 3) "ip" 4) "172.16.252.82" 5) "port" 6) "6379" 7) "runid" 8) "2847d8ceda8d3a03f0df814091fc5174921f57ea" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "913" 19) "last-ping-reply" 20) "913" 21) "down-after-milliseconds" 22) "3000" 23) "info-refresh" 24) "572" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "306685" 29) "master-link-down-time" 30) "1505554185000" 31) "master-link-status" 32) "err" 33) "master-host" 34) "172.16.252.184" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "1" 切换过程注意查看sentinel的日志信息[root@slave1 ~]# tail /var/log/redis/sentinel.log