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
-
删除值
# 删除所有的键 flushall
master删除值
# 从库查看 keys *
slave1
slave2
-
-
停止
6379
端口这个redis-master
docker stop <容器ID>
停止 master
# 6380 6381都查看各自的状态 info replication
6380 slave 的状态
6381 slave 的状态
-
6381
这个端口的slave
变成了master
主节点,可以确认容器 ip
# 查看容器的内部 ip docker inspect <容器id> | grep IPA
容器内部ip
-
-
6381
主节点设置值-
set key "zero"
6381 主节点设置值
-
6380
从是否获取了值# 查看所有的键 keys * # 获取值 get key
6380 slave
-
-
启动停止的
6379
docker start <容器ID>
启动 6379
# 查看 6379 此时的状态 info replication
6379 状态
-
此时
6379
端口的redis
变成了从 slave
-
验证高可用,是否获取了停止时
主节点6381
设置的值# 获取所有的键 keys * # 获取 key 的值 get key
获取所有的键
获取值
-
-
redis
哨兵模式安装成功,达到了高可用
网友评论