Docker-Redis-配置主从和哨兵

上文中,我们使用docker安装了redis,下面来配置一个一主二仆的一个主从结构,并且设置哨兵,基于上文中的环境,我们现在已经有一个Redis实例了

环境准备

上文中我们是挂载的外部的配置文件,和数据文件,然后我们把这个文件夹复制两个出来,改下名字,如下:
image

然后修改这两个新的redis中,配置文件的端口号,分别该为6380 6381

修改完成之后,分别运行以下命令:

1
2
3
4
docker run -p 6380:6380 --name redis-6380 -v /usr/docker/redis-6380/conf/redis.conf:/etc/redis/redis.conf -v /usr/docker/redis-6380/data:/data --privileged=true -d 3459037fcc3a redis-server /etc/redis/redis.conf --appendonly yes


docker run -p 6381:6381 --name redis-6381 -v /usr/docker/redis-6381/conf/redis.conf:/etc/redis/redis.conf -v /usr/docker/redis-6381/data:/data --privileged=true -d 3459037fcc3a redis-server /etc/redis/redis.conf --appendonly yes

运行完成之后,可以用docker ps来查看是否启动成功

启动好之后,我们就有三个redis的服务了,我这里的ip和端口分别如下:

1
2
3
172.16.12.3 6379 
172.16.12.3 6380
172.16.12.3 6381

主从配置

环境设置好之后,我们把6379设置为Master,然后6380和6381设置为slave

先进入6380的容器内部:

1
docker exec -it 容器id /bin/bash

使用redis-cli设置主从, 或者是使用远程的redis-cli,执行以下命令:

1
SLAVEOF 172.16.12.3 6379

6381也这样操作就好了. 这里要注意的是,如果主机设置了访问密码的话,从机的配置中需要加入以下配置:

1
masterauth 123456

两个从机都设置完成之后,主从就搭建好了, 可以通过info replication来查看Redis的角色等信息

哨兵配置

我们现在是有三个redis的容器,然后我们在每个容器中再启动一个哨兵的服务,也就是说,一个容器中有一个redis的服务,还有一个哨兵的服务

这里的三个容器的配置都是一样的,这里只说一个的配置

首先,进入容器内部,命令如下:

1
docker exec -ti 容器ID /bin/bash

进入根目录

1
cd /

创建一个哨兵的配置文件

1
touch sentinel.conf

用vim编辑这个配置文件,这里容器默认是没有安装vim的,需要自己装一个,命令如下:

1
2
apt-get update
apt-get install vim –y

安装完成之后,就可以使用vim了,编辑刚创建的配置文件:

1
vim sentinel.conf

文件内容如下:

1
2
3
4
5
sentinel monitor mymaster 172.16.12.3 6379 1
daemonize yes
logfile "/var/log/redis/sentinel_log.log"
protected-mode no
sentinel auth-pass mymaster 123456

  • 第一行的配置中 mymaster是给监控主机起的名字,这个是自定义的,然后后面是主机的地址和端口,最后的1表示有多少个哨兵认为主机挂掉了,就进行切换
  • 第二行的配置表示哨兵在后台运行
  • 第三行是哨兵的日志文件地址
  • 第四行把保护模式关闭,保护模式如果开启只接受回环地址的ipv4和ipv6地址链接,拒绝外部链接,而且正常应该配置多个哨兵,避免一个哨兵出现独裁情况,如果配置多个哨兵那如果开启也会拒绝其他sentinel的连接.导致哨兵配置无法生效.
  • 第五行如果redis配置了密码,那这里必须配置认证,否则不能自动切换

最后启动哨兵,命令如下:

1
redis-sentinel /sentinel.conf

至此一个哨兵就配置启动完成了,其他两台的配置是一样的

验证

三个哨兵都启动完成之后,可以把master关闭然后去看哨兵的日志,如果进行了重新选举那就ok了