大家好,今天我们分享Redis数据库的哨兵模式
在前面我们做的东西,就是有三个服务组成的Redis小集群
这种方式可以处理master 出现故障的问题
但是它的缺点,就是需要手工配置,这样就会出现时间上的延迟,而在生产环境当中,这种延迟是致命的,
所以不推荐这种方式
哨兵模式是一种特殊的模式
,首先Redis提供了哨兵的命令,哨兵是一个独立的进程
,作为进程,它会独立运行。其原理是
哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
看这个图,简单说,就是哨兵负责盯着这些服务器
上面的这个图,可以发现,哨兵会成为新的瓶颈
完整的图是这样
就是说,如果只有一个哨兵,如果他出现问题,redis集群当中的节点将无法得到有效监控,所以我们使用了多个哨兵
哨兵与哨兵之间是互相监控的
假设主服务器宕机(坏了),哨兵1先检测到这个结果,系统并不会马上进行failover过程
,仅仅是哨兵1自己认为主服务器不可用
,这个现象成为主观下线
。当后面的哨兵也检测到主服务器坏了,并且数量达到一定值时,那么哨兵之间就会进行一次投票与选举
,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。
这样对于客户端而言,一切都是透明的。
配置一下Redis哨兵模式:
我们现在的状态就是一主二从
(之前的那个)
6379是主节点
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6302,state=online,offset=4662,lag=0
slave1:ip=127.0.0.1,port=6303,state=online,offset=4662,lag=1
master_replid:5c4f2e117c26c9a1c1d1310e327f166dc7a88c2e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4662
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:4662
127.0.0.1:6379>
这是几个配置文件
[root@localhost redistest]# ll
总用量 324
-rw-r--r-- 1 root root 61811 3月 22 19:21 1
-rw-r--r-- 1 root root 152 3月 23 12:37 dump.rdb
-rw-r--r-- 1 root root 61811 3月 23 15:45 redis01.conf
-rw-r--r-- 1 root root 61811 3月 23 18:11 redis02.conf
-rw-r--r-- 1 root root 61803 3月 23 18:18 redis03.conf
-rw-r--r-- 1 root root 61799 3月 23 12:36 redis.conf
编辑这个文件
(这行命令,一个字都不能写错)
[root@localhost redistest]# vim sentinel.conf
写这个内容
sentinel monitor redistest 127.0.0.1 6379 1
# sentinel monitor 这两个词只能这样写,不可以变
# redistest 这个词可以随便写
# <