一、根据基础镜像构建三个容器
根据本文第一章(到自动启动redis之前,不要设置自动启动,会出错)配置基础镜像的相关设置,构建好后,将其导出为镜像,并根据镜像构建三台哨兵机。
docker commit centos7 centos-redis:latest
docker run --name redis-sentinel-1 -d -p 26379:26379 --privileged centos-redis
docker run --name redis-sentinel-2 -d -p 26380:26379 --privileged centos-redis
docker run --name redis-sentinel-3 -d -p 26381:26379 --privileged centos-redis
对于三台容器都执行以下操作,将sentinel.conf
文件移动到/myredis
文件下,方便操作
docker exec -it redis-sentinel-1 /bin/bash
cp /usr/local/src/redis-7.0.15/redis.conf /myredis/
cp /usr/local/src/redis-7.0.15/sentinel.conf /myredis/
二、相关配置
根据一主二从配置的基础上在sentinel.conf
文件中修改配置
机器redis-sentinel-1
的sentinel.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir "/myredis"
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel auth-pass mymaster 123321
机器redis-sentinel-2
的sentinel.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir "/myredis"
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel auth-pass mymaster 123321
机器redis-sentinel-3
的sentinel.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26381
logfile "/myredis/sentinel26381.log"
pidfile /var/run/redis-sentinel26381.pid
dir "/myredis"
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel auth-pass mymaster 123321
由于后续一主二从中的主机可能会变成从机,所以在这里给他设置密码,将主机的redis6379.conf
文件参数进行修改,修改后记得重启redis服务端使其生效。
masterauth 123321
三、启动哨兵
完成相关配置后,启动三个哨兵来完成监控,在三个docker容器内都执行如下命令
redis-sentinel sentinel.conf --sentinel
查看一下 sentinel26379.log
中的内容
可以看到,在这个哨兵的日志文件中,显示了当前的主机有两个哨兵以及两个slave机
启动哨兵后,我们手动关闭6379服务器来模拟master挂了
在172.17.0.2:6379
这台主机上使用SHUTDOWN
命令关机。
在这里主要考虑几个问题:
-
从机的数据是否还完好
我们选取一台从机,输入命令get k1
来查询
这是由于哨兵选举新主机后会使得网络重新,此时在查询一次就可以了
可以发现,从机的数据依旧完好 -
是否会从剩下的两台机器上选出新的master
可以发现,此时从机6380以及变成master了,且6381还是slave -
宕机的6379回来后,会不会产生双master冲突
从红框处可以看到,哨兵在选举出新的master后,会将原master
作为slave
挂到现在的master
下。因此在6379重新连回来以后,他会作为6380的slave存在。