Docker Redis哨兵模式部署

165 阅读4分钟

哨兵模式 一主二从三哨兵

1. 创建配置文件conf和data挂载目录

mkdir -p  /usr/local/docker/redis/conf
mkdir -p /usr/local/docker/redis/data

2.修改配置文件

2.1.配置主节点

cp redis.conf  /usr/local/docker/redis/redis_master.conf
vim /usr/local/docker/redis/redis_master.conf
#修改redis_master.conf配置
bind 127.0.0.1 注释掉
port 16390 可将原来的6379 换成自定义端口16390
daemonize no 换成no
requirepass 123456 密码(若主节点开启密码,从节点及哨兵也必须开启同样的密码)

2.2.配置从节点1

宿主机ip即为服务器ip

cp redis.conf  /usr/local/docker/redis/redis_slave1.conf
vim /usr/local/docker/redis/redis_slave1.conf
#修改redis_slave1配置
bind 127.0.0.1 注释掉
port 16391 换端口
daemonize no 换成no
replicaof 宿主机ip 16390(主节点端口)
masterauth 123456(开启时)
requirepass 123456(开启时)

2.3.配置从节点2

与步骤2.2相同 仅需要换端口即可

3.启动master与salve节点

3.1 启动主节点

docker run -d  --privileged=true  -p 16390:16390  -v  /usr/local/docker/redis/conf/redis_master.conf:/usr/local/etc/redis/conf/redis.conf -v  /usr/local/docker/redis/data:/data --name  redis-master  redis:latest   redis-server  /usr/local/etc/redis/conf/redis.conf

参数解释:
--privileged=true 大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
-p 16390:16390  映射容器服务的 16390 端口到宿主机的16390 端口。外部可以直接通过宿主机ip:16390 访问到 Redis 的服务(启动前需要将服务器宿主机端口放行)
-d  后台启动
-v 挂载目录
-v  /usr/local/docker/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf  冒号前的为配置的宿主conf  后面的为容器内conf目录(在容器启动后容器内部会自动创建,不需要手动创建)</p>
 -v  /usr/local/docker/redis/data:/data  冒号前的为配置的宿主data  后面的为容器内data目录(在容器启动后 会自动创建)
--name  redis-master  自定义容器名
redis:latest  下载的redis镜像名
redis-server 以server模式启动 
/usr/local/etc/redis/conf/redis.conf  寻找容器中的配置文件,最终找到的是映射的自定义redis配置文件

启动后检查容器状态

docker ps 

image.png

查看有没有redis-master的容器启动。若没有启动,查看容器启动日志

docker logs redis-master

image.png

3.2启动两个从节点

salve1启动

docker run -d  --privileged=true  -p 16391:16391  -v  /usr/local/docker/redis/conf/redis_slave1.conf:/usr/local/etc/redis/conf/redis.conf -v /usr/local/docker/redis/data/slave1:/data --name  redis-slave1  redis:latest   redis-server  /usr/local/etc/redis/conf/redis.conf

salve2启动

docker run -d  --privileged=true  -p 16392:16392  -v  /usr/local/docker/redis/conf/redis_slave2.conf:/usr/local/etc/redis/conf/redis.conf -v /usr/local/docker/redis/data/slave2:/data --name  redis-slave2  redis:latest   redis-server  /usr/local/etc/redis/conf/redis.conf

同样查看有没有redis-slave1/slave2的容器启动情况。若没有启动,查看容器启动日志

docker logs redis-slave1

4.哨兵配置和启动

4.1 将下载的redis.conf 复制粘贴到指定位置 cp source target

cp  redis.conf  /usr/local/docker/redis/conf/redis_sentinel0.conf
cp  redis.conf  /usr/local/docker/redis/conf/redis_sentinel1.conf
cp  redis.conf  /usr/local/docker/redis/conf/redis_sentinel2.conf

4.2 修改哨兵的配置

vim  /usr/local/docker/redis/conf/redis_sentinel0.conf
vim  /usr/local/docker/redis/conf/redis_sentinel1.conf
vim  /usr/local/docker/redis/conf/redis_sentinel2.conf

以redis_sentinel0.conf 为例

bind 127.0.0.1 注释掉本地ip
port 17000 换端口(其他sentinel更换端口即可)
daemonize no 换成no
sentinel monitor master节点名称  master主机ip master节点端口 2代表哨兵选举的数量
(例如: sentinel monitor redis-master  117.126.11.1 13960 2)
sentinel auth-pass mymaster 123456 (开启时)
requirepass 123456(开启时)

4.3 启动sentinel 节点

以sentinel0节点为例,其他sentinel节点类似

docker run -d  --privileged=true  -p 17000:17000  -v  /usr/local/docker/redis/conf/redis_sentinel0.conf:/usr/local/etc/redis/conf/redis.conf -v/usr/local/docker/redis/data/sentinel0:/data --name  redis-sentinel0  redis:latest   redis-sentinel  /usr/local/etc/redis/conf/redis.conf

查看节点启动状态

docker ps

image.png

5.检查哨兵模式是否正常

这里使用外部redis客户端工具 aother redis desktop manager(也可以使用windows cmd命令链接)

1.在master节点增加key

2.在其他节点观察key是否同步刷新,如果同步刷新,说明salve节点配置成功

3.将主节点下线 docker stop redis-master(主节点容器名称)

4.再增加key,观察salve节点是否增加key,如果那个节点能够增加,说明当前salve节点已经被选举成为master节点,其他slave节点继续为slave节点

5.重新启动原来的redis-master,观察后发现已经变成了从节点