哨兵模式(自动选择主机)

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

redis哨兵模式两主多从 redis哨兵模式主从切换_redis哨兵模式两主多从

 

 

redis哨兵模式两主多从 redis哨兵模式主从切换_服务器_02

 

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。


1.配置哨兵配置文件 sentinel.conf

sentinel monitor 被监控的名称 host port 1  (数字1代表主机挂了,从机投票来选择主机,票数最多的成为主机)

#sentinel monitor myredis 127.0.0.1 6379 1

2.启动哨兵

[root@linuxvm bin]# redis-sentinel kconfig/sentinel.conf
[root@linuxvm bin]# redis-sentinel kconfig/sentinel.conf 
17822:X 08 Apr 2021 15:23:09.304 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17822:X 08 Apr 2021 15:23:09.305 # Redis version=6.2.1, bits=64, commit=00000000, modified=0, pid=17822, just started
17822:X 08 Apr 2021 15:23:09.305 # Configuration loaded
17822:X 08 Apr 2021 15:23:09.306 * Increased maximum number of open files to 10032 (it was originally set to 1024).
17822:X 08 Apr 2021 15:23:09.306 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 6.2.1 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 17822
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               17822:X 08 Apr 2021 15:23:09.307 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
17822:X 08 Apr 2021 15:23:09.316 # Sentinel ID is 01dde377ea995a59b45ae79d2c7d5517ecabebca
17822:X 08 Apr 2021 15:23:09.316 # +monitor master myredis 127.0.0.1 6379 quorum 1
17822:X 08 Apr 2021 15:23:09.317 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:23:09.325 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379

关掉主机

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> SHUTDOWN
not connected> exit
[root@linuxvm bin]#

如果主机点断开,就会从从机中随机选择一个服务器

17822:X 08 Apr 2021 15:24:47.650 # +sdown master myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:47.650 # +odown master myredis 127.0.0.1 6379 #quorum 1/1
17822:X 08 Apr 2021 15:24:47.650 # +new-epoch 1
17822:X 08 Apr 2021 15:24:47.650 # +try-failover master myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:47.668 # +vote-for-leader 01dde377ea995a59b45ae79d2c7d5517ecabebca 1
17822:X 08 Apr 2021 15:24:47.668 # +elected-leader master myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:47.668 # +failover-state-select-slave master myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:47.721 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:47.721 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:47.797 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:48.743 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:48.743 # +failover-state-reconf-slaves master myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:48.789 * +slave-reconf-sent slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:49.783 * +slave-reconf-inprog slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:49.783 * +slave-reconf-done slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:49.845 # +failover-end master myredis 127.0.0.1 6379
17822:X 08 Apr 2021 15:24:49.845 # +switch-master myredis 127.0.0.1 6379 127.0.0.1 6380
17822:X 08 Apr 2021 15:24:49.845 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6380
17822:X 08 Apr 2021 15:24:49.845 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380
17822:X 08 Apr 2021 15:25:19.863 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380

如果主机恢复,只能归并到新的主机下 当做从机

哨兵模式:

优点:

1.哨兵集群基于主从复制模式

2.主从可以切换,故障可以转移,系统的可用性更好

3.哨兵模式就是主从模式的升级,手动到自动

缺点:

1.redis 不好在线扩容集群容量一旦达到上线 在线扩容十分麻烦

2.实现哨兵模式的配置其实很麻烦,里面有很多选择