一.Redis高可用配置文件/etc/redis/sentinel.conf中几个重要的配置项含义

1.port 26379

sentinel监听端口,默认是26379,可以修改。

2.daemonize no

默认情况下,sentinel是不是在后台运行的,如果需要在后台运行,把该项的值更改为yes。

3.sentinel auth-pass <master-name> <password>

设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。

配置示例:

sentinel auth-pass mymaster 0123passw0rd

4.sentinel monitor <master-name> <ip> <redis-port> <quorum>

告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效。master-name只能包含英文字母,数字,和“.-_”这三个字符 需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)。

所以一般设置的redis的主从个数为奇数个。

配置示例:

sentinel  monitor  mymaster  172.25.83.1  6379  2

5.sentinel down-after-milliseconds <master-name> <milliseconds>

这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒

配置示例:

sentinel  down-after-milliseconds  mymaster  10000

6.sentinel parallel-syncs <master-name> <numslaves>

这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成 failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设 为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。

配置示例:

sentinel parallel-syncs mymaster 1
  1. sentinel failover-timeout <master-name> <milliseconds>failover-timeout 可以用在以下这些方面:
1. 同一个sentinel对同一个master两次failover之间的间隔时间。

  2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。

  3.当想要取消一个正在进行的failover所需要的时间。  

  4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个时件,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。

配置示例:

sentinel  failover-timeout  mymaster1  180000

二.实验环境(rhel7.3版本)

1.selinux和firewalld状态为disabled

2.各主机信息如下:

主机

ip

server4(主机)

172.25.63.4

server3(从机)

172.25.63.3

server2(从机)

172.25.63.2

三.redis主从复制+主从切换的部署(redis-sentinel实现高可用)

1.增加从机

在配置好一主一从的前提下,新增加一从——server2(该从的配置同server3)

配置好一主一从可以参考:

2.配置server4(主机)

<1>将sentinel配置文件拷贝到/etc/redis目录中

[root@server4 ~]# cd redis-5.0.3
[root@server4 redis-5.0.3]# cp sentinel.conf /etc/redis/

<2>编辑sentinel配置文件(sentinel端口是26379)

[root@server4 redis-5.0.3]# cd /etc/redis/
[root@server4 redis]# vim sentinel.conf

    
  protected-mode  no   #将17行的注释去掉,关闭保护模式,可以进行远程连接
  sentinel monitor mymaster 172.25.63.4 6379 2  #将84行的127.0.0.1该为172.25.63.4监控的名称是mymaster,2表示裁决,三台主机只有半数以上同意方可切换。  
  sentinel down-after-milliseconds mymaster 10000    #为了便于测试,将113行的30000改为10000,10秒收不到master的数据包,就认为master已经down。

<3>为了方便,将server4配好的sentinel配置文件发送到server3和server2

将server4上配好的sentinel文件发送给server3和server2
,一定要在server4开启sentinel之前。这是因为如果开启sentinel,然后再发送,那么sentinel配置文件会发生改变。那么发送给server2和3之后,在server2上启动sentinel会报错。

[root@server4 redis]# scp sentinel.conf root@172.25.63.2:/etc/redis/
[root@server4 redis]# scp sentinel.conf root@172.25.63.3:/etc/redis/

<4>开启sentinel

[root@server4 redis]# redis-server /etc/redis/sentinel.conf --sentinel

Redis如何双主 redis双主配置_redis

3.配置server3和server2(从机)

<1>开启sentinel

在server2:

[root@server2 utils]# redis-server /etc/redis/sentinel.conf --sentinel

在server3:

[root@server3 utils]# redis-server /etc/redis/sentinel.conf --sentinel

4.测试一

重新开server4,server3,server2的终端(因为之前的终端被sentinel的开启占用)

<1>查看redis集群的复制情况

在查看redis集群的复制情况之前,可以先了解如下的一条命令
[root@server4 ~]# redis-cli --help    #在远程连接之前,前查看帮助,以清楚远程连接的命令

server4:

[root@server4 ~]# redis-cli 
127.0.0.1:6379> info

Redis如何双主 redis双主配置_运维_02

当然也可以在server2上远程连接server4,来查看server4的状态

[root@server2 ~]# redis-cli -h 172.25.63.4    #远程连接server4
172.25.83.1:6379> info replication

也可以利用下面的命令来查看sentinel情况(查看sentinel的情况的前提是sentinel是开启的)

[root@server4 ~]# redis-cli -p 26379
127.0.0.1:26379> info

当然也可以在server2或server3上,远程连接server4的26379,查看sentinel的状态(查看sentinel的情况的前提是sentinel是开启的)

[root@server2 ~]# redis-cli -h 172.25.63.4 -p 26379
172.25.83.1:26379> info

<2>手工down掉master(server4)

[root@server4 ~]# redis-cli
127.0.0.1:6379> SHUTDOWN
not connected>

此时查看server4的sentinel:

Redis如何双主 redis双主配置_高可用_03


可见172.25.63.2切换为master,172.25.63.3从机开始指向新的master同步(当然主机挂掉之后,谁成为master,这是随机的)

此时在新的server2终端中查看redis状态:

[root@server2 ~]# redis-cli
127.0.0.1:6379> info

Redis如何双主 redis双主配置_高可用_04


此时说明高可用已经成功实现