1. 编写docker-compose.yml
version: '3.7'
services:
redis-master:
image: redis
ports:
- 6379:6379
volumes:
- ./master/conf/redis.conf:/var/local/redis/redis.conf
# 容器中默认将数据就是放在 /datas目录下
- ./master/datas/:/datas/
command: ['redis-server', '/var/local/redis/redis.conf']
redis-slave1:
image: redis
ports:
- 6380:6379
volumes:
- ./slave1/conf/redis.conf:/var/local/redis/redis.conf
# 容器中默认将数据就是放在 /datas目录下
- ./slave1/datas/:/datas/
command: ['redis-server', '/var/local/redis/redis.conf']
redis-slave2:
image: redis
ports:
- 6381:6379
volumes:
- ./slave2/conf/redis.conf:/var/local/redis/redis.conf
# 容器中默认将数据就是放在 /datas目录下
- ./slave2/datas/:/datas/
command: ['redis-server', '/var/local/redis/redis.conf']
redis-sentinel1:
image: redis
ports:
- 26391:26379
volumes:
- ./sentinel1/conf/sentinel.conf:/var/local/redis/sentinel.conf
# 容器中默认将数据就是放在 /datas目录下
command: ['redis-sentinel', '/var/local/redis/sentinel.conf']
redis-sentinel2:
image: redis
ports:
- 26392:26379
volumes:
- ./sentinel2/conf/sentinel.conf:/var/local/redis/sentinel.conf
# 容器中默认将数据就是放在 /datas目录下
command: ['redis-sentinel', '/var/local/redis/sentinel.conf']
redis-sentinel3:
image: redis
ports:
- 26393:26379
volumes:
- ./sentinel3/conf/sentinel.conf:/var/local/redis/sentinel.conf
# 容器中默认将数据就是放在 /datas目录下
command: ['redis-sentinel', '/var/local/redis/sentinel.conf']
- 容器中默认将
数据就是放在/datas/目录下 volumes将数据映射到了宿主机上,要编辑各自的redis-conf、sentinel.conf
2. 编辑redis.conf
-
根据
docker-compose.yml的volumes,创建文件夹# 创建 conf/ 目录 mkdir -p master/conf/ slave1/conf/ slave2/conf/ sentinel1/conf/ sentinel2/conf/ sentinel3/conf/ # 创建 datas/ 目录 mkdir -p master/datas/ slave1/datas/ slave2/datas/ -
redis-master的reids.conf-
下载
redis.conf# 进入 master/conf/ 目录 cd master/conf/ # 下载 wget http://download.redis.io/redis-stable/redis.conf
-
编辑
redis.conf文件vim redis.conf
-
修改的内容
-
命令模式下命令输入使用/关键字查找
-
将
bind 127.0.0.1注释掉(69行左右),可以远程访问

-
# requirepass foobared(786行左右)撤销注释,修改密码

-
# masterauth <master-password>(392行左右)撤销注释,修改成自己设置的密码

-
-
-
redis-slave1的redis.conf-
将
master的redis.conf复制# 返回到docker-compose.yml同级目录 cd ../../ # 复制 cp master/conf/redis.conf slave1/conf/ # 进入文件夹 cd slave1/conf/

-
编辑
redis.conf文件vim redis.conf
-
内容
-
因为是直接复制
master的redis.conf文件,只需要再修改一处即可 -
# replicaof <masterip> <masterport>(385行左右)撤销注释,修改为replicaof redis-master 6379<masterip>可以是主的ip,也可以是docker-compose.yml设置的主的服务名,建议是服务名,因为docker-compose启动的ip不确定<masterport>为容器里的ip


-
将
redis.conf文件复制# 返回到docker-compose.yml同级目录 cd ../../ # 复制文件到 slave2/conf/ cp slave1/conf/redis.conf slave2/conf/
-
-
-
sentinel1的sentinel.conf文件-
下载
sentinel.conf文件# 进入文件夹 cd sentinel1/conf/ # 下载 wget http://download.redis.io/redis-stable/sentinel.conf

-
编辑
sentinel.conf文件vim sentinel.conf
-
sentinel monitor mymaster 127.0.0.1 6379 2(84行左右)修改成sentinel monitor mymaster redis-master 6379 2mymaster这个名字随意起,是sentinel中主的名字,如果该名字重新定义,全文都要修改(有多个)127.0.0.1是主的ip地址,也可以写成docker-compose.yml文件中主的服务名6379是主节点的端口号2表示需要2个哨兵才能确定主节点


-
# sentinel auth-pass <master-name> <password><master-name>改为第三步中mymaster的值,因为没有修改,所以直接为mymaster<password>改为主节点设置的密码


-
sentinel myid <字符串>检查是否有这个,删掉(这个是启动容器后再生成的,如果重新启动,那么必须删掉这个) -
复制文件
# 返回到docker-compose.yml同级目录 cd ../../ # 复制文件 cp sentinel1/conf/sentinel.conf sentinel2/conf/ cp sentinel1/conf/sentinel.conf sentinel3/conf/
-
-
启动
# 启动 docker-compose up -d # 查看容器状态 docker ps -a

3. 哨兵模式高可用的验证
-
查看
master状态# -p 后面是 端口 # -a 后面是设置的 密码 # 登录redis redis-cli -p 6379 -a password # 查看状态 info replication
-
查看
slave状态# 登录redis-slave1 redis-cli -p 6380 -a password # 查看状态 info replication # 登录redis-slave2 redis-cli -p 6381 -a password # 查看状态 info replication

-
查看
sentinel# redis-sentinel1 redis-cli -p 26391 -a password # 查看状态 info sentinel # redis-sentinel2 redis-cli -p 26392 -a password # 查看状态 info sentinel # redis-sentinel3 redis-cli -p 26393 -a password # 查看状态 info sentinel


-
6379端口的redis-master设置值-
设置值
set name "zhangsan"


-
删除值
# 删除所有的键 flushall
# 从库查看 keys *

-
-
停止
6379端口这个redis-masterdocker stop <容器ID>
# 6380 6381都查看各自的状态 info replication

6381这个端口的slave变成了master主节点,可以确认容器 ip
# 查看容器的内部 ip docker inspect <容器id> | grep IPA
-
6381主节点设置值-
set key "zero"
-
6380从是否获取了值# 查看所有的键 keys * # 获取值 get key
-
-
启动停止的
6379docker start <容器ID>
# 查看 6379 此时的状态 info replication
-
此时
6379端口的redis变成了从 slave -
验证高可用,是否获取了停止时
主节点6381设置的值# 获取所有的键 keys * # 获取 key 的值 get key

-
-
redis哨兵模式安装成功,达到了高可用
本文详细介绍了如何使用Docker部署Redis哨兵集群实现高可用性,包括配置docker-compose.yml文件,编辑redis.conf和sentinel.conf配置文件,以及验证哨兵模式高可用性的步骤。
439

被折叠的 条评论
为什么被折叠?



