首先拉取redis镜像
docker pull redis
拉取完成后运行redis容器,
运行主节点
docker run --name redis-6379 -p 6379:6379 -v /home/redis/master/data:/data -d redis redis-server --appendonly yes
运行从节点
docker run --name redis-6380 -p 6380:6379 -v /home/redis/redis6380/data:/data -d redis redis-server
docker run --name redis-6381 -p 6381:6379 -v /home/redis/redis6381/data:/data -d redis redis-server
3个容器都运行起来后用docker inspect 容器id命令查看主节点内网ip
docker inspect redis-6379
找到这个就是内网ip,记下来
分别进入6380 6381容器内 执行
docker exec -it redis-6380 /bin/bash
redis-cli
SLAVEOF 172.18.0.2 6379
info replication
两个容器内的操作相同
这时候主从配置就完成了
进入主节点查看
出现这个就说明主从配置完成了
接下来配置哨兵
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动 Redis Sentinel 。
首先cd到redis目录
执行
touch sentinel.conf && touch log.txt
然后编辑sentinel.conf
vim sentinel.conf
输入
sentinel monitor mymaster 172.18.0.2 6379 1
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
#添加为后台运行
daemonize yes
#指定日志目录
logfile "/log.txt"
第一行配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 172.18.0.2 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 1 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称 SDOWN )。
不过只有一个 Sentinel 将服务器标记为主观下线并不一定会引起服务器的自动故障迁移: 只有在足够数量的 Sentinel 都将一个服务器标记为主观下线之后, 服务器才会被标记为客观下线(objectively down, 简称 ODOWN ), 这时自动故障迁移才会执行。
将服务器标记为客观下线所需的 Sentinel 数量由对主服务器的配置决定。
parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
保存配置文件,然后用docker cp 命令把文件分别拷贝到redis容器下根目录 /
在容器内部执行命令启动哨兵
redis-sentinel /sentinel.conf
这里我们选择部署3个哨兵,上面的操作需要在3个redis容器中都执行一编
完成后,我们进入一个redis容器中,查看哨兵状态
执行
docker exec -it redis-6379 /bin/bash
redis-cli -p 26379
info
最终如果看到上面图中的信息就说明成功了