redis集群-哨兵

天下之事常成于困约,而败于奢靡。这篇文章主要讲述redis集群-哨兵相关的知识,希望能为你提供帮助。
redis 集群实现方式:客户端分片,代理分片,redis cluster

集群要解决两个核心问题:
1.master和slave角色的无缝切换
2.横向动态扩展redis服务器,从而实现多台服务器并行写入,以实现更高并发的目的

?哨兵(sentinel)?
Sentinel进程是用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现
Master和Slave服务器的切换,保证系统的高可用。
其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。
一般在生产环境也建议使用 Redis的2.8版本的以后版本。

哨兵 (Sentinel)是一个分布式系统,你可以在一个架构中运行多个哨兵 (sentinel)进程,这些进程使用流言协议,
来接收关于Master主服务器是否下线的信息,并使用投票协议,来决定是否执行自动故障迁移以及选择哪个Slave作为
新的Master

哨兵可以不和redis服务器部署在一起
?1.主从搭建?
参考:??https://blog.51cto.com/u_14814545/5136856??
主机
ip地址
master
192.168.47.54
salve1
192.168.47.55
salve2
192.168.47.56
注意:主从配置的时候,需要修改配置文件
vim /usr/local/redis/etc/redis.conf
bind 0.0.0.0
masterauth 123456
requirepass 123456#之前没设置这个,切换master后,新slave的状态master_link_status:down,不知道是不是因为
没有设置requirepass的缘故,有空再测试一下,反正设置了后,master切换后,新slave与新master是同步了的

?2.sentinel配置文件?
cp /data/redis-5.0.3/sentinel.conf/usr/local/redis/

#54主机
root@ubuntu:~# grep "^[a-Z]" /usr/local/redis/sentinel.conf
bind 0.0.0.0
port 26379
daemonize yes
pidfile "/usr/local/redis/redis-sentinel.pid"
logfile "/usr/local/redis/sentinel_26379.log"
dir /usr/local/redis
sentinel monitor mymaster 192.168.47.54 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes


#55主机
bind 192.168.47.55
port 26379
daemonize yes
pidfile "/usr/local/redis/redis-sentinel.pid"
logfile "/usr/local/redis/sentinel_26379.log"
dir "/usr/local/redis"
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.47.54 6379 2
sentinel auth-pass mymaster 123456


#56主机
bind 192.168.47.56
port 26379
daemonize yes
pidfile "/usr/local/redis/redis-sentinel.pid"
logfile "/usr/local/redis/sentinel_26379.log"
dir "/usr/local/redis"
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.47.54 6379 2
sentinel auth-pass mymaster 123456


#3台主机启动哨兵
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf

说明
sentinel monitor mymaster 192.168.47.54 6379 2#2表示几个slave认为master donwn就重新选举
sentinel down-after-milliseconds mymaster 30000 #SDOWN(主观下线)的时间
sentinel parallel-syncs mymaster 1#发生故障转移时候同时向新master同步数据的slave数量;
数字越小,总同步时间越长
sentinel failover-timeout mymaster 180000#所有slaves指向新的master所需的超时时间

【redis集群-哨兵】2.2.redis状态
root@ubuntu:~# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.47.55,port=6379,state=online,offset=6592,lag=1
slave1:ip=192.168.47.56,port=6379,state=online,offset=6592,lag=1
master_replid:398d80a6b3447839c07b8c6ff234770ddca693dd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:6592
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:6592

2.3.日志查看
tail -f /usr/local/redis/sentinel.conf


?3.测试?
停止master
systemctl stop redis

3.1.主机查看sentinel.conf
sentinel monitor ip 发生改变
cat /usr/local/redis/sentinel.conf


3.2.主机查看redis状态

说明
master_replid#故障转移后,当前master_replid
master_replid2 #故障转移后,上一次master_replid

3.3.重新启动54服务器,指向了新的master(56主机)



    推荐阅读