redis集群-哨兵

Posted 小怪獣55

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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所需的超时时间

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

redis集群-哨兵_redis集群-哨兵

3.测试

停止master
systemctl stop redis

3.1.主机查看sentinel.conf

sentinel monitor ip 发生改变
cat /usr/local/redis/sentinel.conf

redis集群-哨兵_redis集群-哨兵_02

3.2.主机查看redis状态

redis集群-哨兵_redis集群-哨兵_03

说明

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

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

redis集群-哨兵_redis集群-哨兵_04

以上是关于redis集群-哨兵的主要内容,如果未能解决你的问题,请参考以下文章

11.Redis 哨兵集群实现高可用

Redis 哨兵集群实现高可用

redis集群-哨兵

Redis 哨兵模式核心原理

Redis哨兵模式(故障转移测试)

redis主从redis哨兵redis集群配置搭建和使用