述
上文中,我们使用docker安装了redis,下面来配置一个一主二仆的一个主从结构,并且设置哨兵,基于上文中的环境,我们现在已经有一个Redis实例了
环境准备
上文中我们是挂载的外部的配置文件,和数据文件,然后我们把这个文件夹复制两个出来,改下名字,如下:
然后修改这两个新的redis中,配置文件的端口号,分别该为6380 6381
修改完成之后,分别运行以下命令:1
2
3
4docker 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
3172.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
2apt-get update
apt-get install vim –y
安装完成之后,就可以使用vim了,编辑刚创建的配置文件:1
vim sentinel.conf
文件内容如下:1
2
3
4
5sentinel 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了