docker安装redis(哨兵模式)
准备工作,5台本地虚拟机,三台哨兵,2台redis(一主一从),安装好docker环境。(也可以在一台机器上启动5个实例,配置5个不同端口即可)
下载镜像
- 搜索redis镜像
1
docker search redis

- 下载镜像
1
docker pull docker.io/redis:5.0

redis 版本可在dockerhub仓库查看
主从配置
- 创建数据目录和配置目录
1
2mkdir /usr/redis/data
mkdir /usr/redis/config
后面将会把容器内的文件挂载出来
主节点配置
在/usr/redis/config下创建配置文件redis.conf并添加配置参数:
1 |
|
从节点配置
除了以上配置项外,从节点还需增加主从相关配置
1 |
|
启动容器
1 | docker run -d --name redis --restart=always -p 6379:6379 \ |
参数说明:
| 参数 | 说明 |
|---|---|
| -d | 后台运行容器 |
| –name | 容器名称 |
| –restart | 开机自动启动容器 |
| -p | 端口映射 |
| –privileged=true | 容器内root用户将真正拥有root权限(可不写) |
| -v | 文件挂载,格式:外部文件:docker内部文件(与上面配置文件里定义的文件路径保持一致:如dir:/data) |
| 17a9b6c90ffd | 镜像ID |
| redis-server | redis的启动服务,固定的 |
| /usr/local/etc/redis/redis.conf | 采用此配置文件启动redis-server服务 |
验证主从配置
- 进入到容器中
1
2
3
4
5
6redis是容器名
docker exec -it redis bash
进入redis 客户端,这里没设置密码
redis-cli
查看节点信息
info replication

遇到的问题
- Can’t open the log file: Permission denied

这是因为没给挂载的文件写权限,给整个redis目录赋权就行了
1
chmod -R 777 /usr/redis
添加哨兵集群配置
哨兵本质上也是redis实例,只是配置不同而已,起到监控redis主从的作用,当主节点挂掉后将从节点提升为主节点,当主节点重新恢复后自动将其作为从节点加入到集群中。起到保证集群高可用的作用
添加配置文件
参考官方配置文件:http://download.redis.io/redis-stable/sentinel.conf
- 修改配置
1 | #是否在后台执行,yes:后台运行;no:不是后台运行 |
- 启动哨兵
1
2
3
4
5
6和启动主从类似,只需要把redis-server改为redis-sentinel即可
docker run -d --name redis --restart=always -p 6379:6379 \
--privileged=true -v /usr/redis/data:/data \
-v /usr/redis/config/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/redis/logs/redis-server.log:/logs/redis-server.log \
17a9b6c90ffd redis-sentinel /usr/local/etc/redis/redis.conf
查看哨兵是否启动成功
再次打开哨兵的配置文件,将会看到文件被改写,增加了3台哨兵之间的互相监控配置

验证哨兵的自动故障转移
- 先查看从节点信息

关闭主节点
1
docker stop redis
等一会再次查看从节点信息

从节点自动变成了master节点。实现了自动转移
总结
填写配置文件一定要仔细,挂载文件也要仔细,即使挂载的文件不正确redis也能正常启动并采用默认的配置,导致主从配置不生效