文章目录
- 一、注意事项(坑点!!!)
- 二、配置Redis主从架构集群
- 第一步:创建目录文件结构
- 第二步:编写DockerCompose配置文件
- 第三步:编写redis.conf
- 第四步:启动redis主从集群
- 三、配置哨兵
- 第一步:编写DockerCompose配置文件
- 第二步:获取master在容器中的ip
- 第三步:编写sentinel.conf
- 第四步:启动哨兵
- 四、测试从机自动升级效果
- 1. 测试联通性
- 2.测试自动选举
使用DockerCompose配置单个redis环境可以参考另一篇文章【使用DockerCompose安装Redis】
一、注意事项(坑点!!!)
- 在slave配置指定master时(
slaveof redis-master 6379
),尽管master是配置映射的6380,但是端口还是要指定6379,这个端口必须是master容器内的端口
,而不是映射到主机的端口。 - 配置sentinel.conf时,指定master要用ip或者域名,指定master的容器名无法通过(
只有redis.conf里知道master时容器名可以通过
,如果有朋友知道其中原理是什么,欢迎在评论区留言讨论)。 - 使用
docker-compose down
删除容器集群之后,下一次启动时master的ip可能变了,要重新查询master的ip并修改哨兵的配置文件
。
二、配置Redis主从架构集群
第一步:创建目录文件结构
# 进入docker相关文件目(没有可以参考文章顶部的文章创建一个)
cd /docker
# 创建相关目录
mkdir redis-master-slave redis-master-slave/master redis-master-slave/slave1 redis-master-slave/slave2
第二步:编写DockerCompose配置文件
vim /docker/docker-compose/redis-master-slave.yml
写入以下内容
version: '3'
services:# ------------------- master ------------------- redis-master:image: redis:6.2.14container_name: redis-masterports:- 6380:6379volumes:- /docker/redis-master-slave/master/redis.conf:/usr/local/etc/redis/redis.conf- /docker/redis-master-slave/master/data:/data- /docker/redis-master-slave/master/logs:/var/log/rediscommand: redis-server /usr/local/etc/redis/redis.confrestart: always# ------------------- slave1 ------------------- redis-slave1:image: redis:6.2.14container_name: redis-slave1ports:- 6381:6379volumes:- /docker/redis-master-slave/slave1/redis.conf:/usr/local/etc/redis/redis.conf- /docker/redis-master-slave/slave1/data:/data- /docker/redis-master-slave/slave1/logs:/var/log/rediscommand: redis-server /usr/local/etc/redis/redis.confrestart: always# ------------------- slave2 ------------------- redis-slave2:image: redis:6.2.14container_name: redis-slave2ports:- 6382:6379volumes:- /docker/redis-master-slave/slave2/redis.conf:/usr/local/etc/redis/redis.conf- /docker/redis-master-slave/slave2/data:/data- /docker/redis-master-slave/slave2/logs:/var/log/rediscommand: redis-server /usr/local/etc/redis/redis.confrestart: always
第三步:编写redis.conf
1. 配置master的redis.conf
vim /docker/redis-master-slave/master/redis.conf
写入以下内容
# 配置密码
requirepass 123456
# 开启aof
appendonly yes
# aof文件名
appendfilename "appendonly.aof"
# aof记录的策略
appendfsync always
# appendfsync everysec
# appendfsync no
2. 配置slave1的redis.conf
注意slave的6379是容器内的端口,如果没必须是6379
vim /docker/redis-master-slave/slave1/redis.conf
写入以下内容
# 配置密码
requirepass 123456
# 开启aof
appendonly yes
# aof文件名
appendfilename "appendonly.aof"
# aof记录的策略
appendfsync always
# appendfsync everysec
# appendfsync no# 指定master
slaveof redis-master 6379
# 指定master的密码
masterauth 123456
4. 配置slave2的redis.conf
vim /docker/redis-master-slave/slave2/redis.conf
写入以下内容(和slave1一模一样)
# 配置密码
requirepass 123456
# 开启aof
appendonly yes
# aof文件名
appendfilename "appendonly.aof"
# aof记录的策略
appendfsync always
# appendfsync everysec
# appendfsync no# 指定master
slaveof redis-master 6379
# 指定master的密码
masterauth 123456
第四步:启动redis主从集群
cd /docker/docker-compose
docker-compose -f redis-master-slave.yml up -d
启动后使用docker ps
命令查看状态
补充:
- 停用:docker-compose -f redis-master-slave.yml down
三、配置哨兵
可以配置一个,也可以配置多个,当然配置多个哨兵的话,才更能保证高可用
。这里我就只配置一个,配置多个几乎是一模一样的配置,只是端口变一下。
第一步:编写DockerCompose配置文件
vim /docker/docker-compose/redis-ms-sentinal.yml
写入以下内容
version: '3'
services:# ------------------- sentinel ------------------- redis-sentinel:image: redis:6.2.14container_name: redis-sentinelports:- 26379:26379volumes:- /docker/redis-master-slave/sentinel.conf:/usr/local/etc/redis/sentinel.confcommand: redis-sentinel /usr/local/etc/redis/sentinel.conf restart: always
第二步:获取master在容器中的ip
使用 docker inspect 容器id|grep IPAddress
命令,如下
第三步:编写sentinel.conf
vim /docker/redis-master-slave/sentinel.conf
写入以下内容(主义填入正确的 master ip
)
port 26379
# 哨兵 监视 主机名 主机ip 端口 票数
sentinel monitor mymaster 192.168.48.5 6379 1
# 集群的密码
sentinel auth-pass mymaster 123456
第四步:启动哨兵
cd /docker/docker-compose
docker-compose -f redis-ms-sentinal.yml up -d
启动后使用docker ps
命令查看状态
四、测试从机自动升级效果
1. 测试联通性
2.测试自动选举
通过流言协议和投票协议进行重新选举需要几秒钟的时间