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编辑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编辑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文件
-
编辑
sentinel.conf文件vim sentinel.conf编辑 sentinel.conf 文件
-
sentinel monitor mymaster 127.0.0.1 6379 2(84行左右)修改成sentinel monitor mymaster redis-master 6379 2-
mymaster这个名字随意起,是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查看master状态
-
查看
slave状态# 登录redis-slave1 redis-cli -p 6380 -a password # 查看状态 info replication # 登录redis-slave2 redis-cli -p 6381 -a password # 查看状态 info replication查看 slave1 状态
查看 slave2 状态
-
查看
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查看 sentinel1 状态
查看 sentinel1 状态
查看 sentinel1 状态
-
6379端口的redis-master设置值-
设置值
set name "zhangsan"master
slave1
slave2
-
删除值
# 删除所有的键 flushallmaster删除值
# 从库查看 keys *slave1
slave2
-
-
停止
6379端口这个redis-masterdocker stop <容器ID>停止 master
# 6380 6381都查看各自的状态 info replication6380 slave 的状态
6381 slave 的状态
-
6381这个端口的slave变成了master主节点,可以确认容器 ip
# 查看容器的内部 ip docker inspect <容器id> | grep IPA容器内部ip
-
-
6381主节点设置值-
set key "zero"6381 主节点设置值
-
6380从是否获取了值# 查看所有的键 keys * # 获取值 get key6380 slave
-
-
启动停止的
6379docker start <容器ID>启动 6379
# 查看 6379 此时的状态 info replication6379 状态
-
此时
6379端口的redis变成了从 slave -
验证高可用,是否获取了停止时
主节点6381设置的值# 获取所有的键 keys * # 获取 key 的值 get key获取所有的键
获取值
-
-
redis哨兵模式安装成功,达到了高可用









网友评论