哨兵模式 一主二从三哨兵
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
查看有没有redis-master的容器启动。若没有启动,查看容器启动日志
docker logs redis-master
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
5.检查哨兵模式是否正常
这里使用外部redis客户端工具 aother redis desktop manager(也可以使用windows cmd命令链接)