redis主从搭建+哨兵(docker):
"""推荐使用国内daocloud镜像,镜像地址:daocloud.io/library/"""
1. # 拉取镜像
docker pull daocloud.io/library/redis:latest
2. # 使用docker启动3个redis容器服务,分别使用到6379、6380、6381端口
docker run --name redis6379 -p 6379:6379 -d daocloud.io/library/redis --appendonly yes
docker run --name redis6380 -p 6380:6379 -d daocloud.io/library/redis --appendonly yes
docker run --name redis6381 -p 6381:6379 -d daocloud.io/library/redis --appendonly yes
3. # 查看3个容器的IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' redis6379
docker inspect --format='{{.NetworkSettings.IPAddress}}' redis6380
docker inspect --format='{{.NetworkSettings.IPAddress}}' redis6381
172.17.0.4 redis6379 # master
172.17.0.5 redis6380 # slave1
172.17.0.6 redis6381 # slave2
4. #进入docker容器内部, 使用redis-cli命令修改 redis6380、redis6381 的主机为 172.17.0.4:6379
docker exec -ti 容器id /bin/bash # 进入docker容器内部
redis-cli
SLAVEOF 172.17.0.4 6379
5. # 查看redis6379是否已经拥有2个从机:
127.0.0.1:6379> info replication
role:maste
connected_slaves:2
slave0:ip=172.17.0.6,port=6379,state=online,offset=224,lag=0
slave1:ip=172.17.0.5,port=6379,state=online,offset=224,lag=1
master_replid:e65a5e233e9caa53a3e2d1d17e3622be2bc70de9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224
# 哨兵
1. 接下来直接进入3台redis容器内部进行配置。
docker exec -ti 容器id /bin/bash # 进入docker容器内部
2. 进入根目录创建 sentinel.conf 文件
cd / && touch sentinel.conf
3. 修改文件内容为, 每一台配置完全一样:
sentinel monitor mymaster 172.17.0.4 6379 1
4. 最后,启动Redis哨兵:
使用 "redis-sentinel /sentinel.conf &" 启动Redis哨兵监控
使用 "ps -ef |grep redis" 命令,可以看到redis-server和redis-sentinel正在运行
5. 验证哨兵机制下的自动主从切换
我们将主 redis6379 进程kill掉。 # 停止redis6379容器
稍等几秒钟后,就有另外一台从升级为主机,实验时是 redis6380 升级为了主。 # 切换过程有点慢,大公司不能容忍,必须要cluster集群。
用info命令查询可以看到 redis6380 服务器的角色变成的master。说明自动主从切换成功。
然后重新启动之前被kill掉的 主 redis6379 服务器,启动后用info命令查看,可以发现其变成了 redis6380 的从服务器。