简介
sentinel可用于监控redis集群的状态,当redis主库不可用时,sentinel可通过选举,选择出新的主库,达到redis集群自动切换主库的一个高可用状态。
获取sentinel配置信息
wget http://download.redis.io/redis-stable/sentinel.conf
复制代码
redis集群启动
主库启动
#sh docker_restart.sh <库名称> <端口>
sh docker_restart.sh redis-master 6300
# 进入容器
docker exec -it redis-master bash
# 连接redis
redis-cli -a lindj -p 6300
# 设置主库密码
config set masterauth lindj
复制代码
从库1启动
#sh docker_restart.sh <库名称> <端口>
sh docker_restart.sh redis-slave1 6301
# 进入容器
docker exec -it redis-slave1 bash
# 连接redis
redis-cli -a lindj -p 6301
# 连接主库
slaveof 192.68.1.92 6300
# 设置主库密码
config set masterauth lindj
复制代码
同理按照从库1的启动流程 启动从库2 redis-slave2
具体集群的搭建可参考基于docker的redis集群搭建
sentinel配置
#lindj-master:自定义集群名
#<master-redis-ip>:主库ip
# <master-redis-port>:主库port
#<quorum>:最小投票数,由于有三台redis-sentinel实例,所以可以设置成2
sentinel monitor lindj-master 192.168.1.92 6300 2
# redis集群密码
sentinel auth-pass lindj-master lindj
# 添加后台运行
daemonize yes
复制代码
启动sentinel
sh docker_restart.sh <sentinel名称>
# 进入容器
docker exec -it sentinel-master bash
# 加载配置
redis-sentinel /usr/local/etc/redis/sentinel.conf
复制代码
docker_start.sh文件内容
#!/bin/sh
application_name=$1
echo "application=${application_name}"
echo "container is stoping and removing"
containerId=$(docker ps -a | grep -E "${application_name}" | awk '{print $1}')
if [ ! -z $containerId ]
then docker stop $containerId && docker rm $containerId
fi
echo "container is running"
docker run -it --name ${application_name} \
-v /data/redis/sentinel/${application_name}.conf:/usr/local/etc/redis/sentinel.conf \
-d redis /bin/bash
复制代码
依次按照这个步骤启动其他sentinel节点
测试
# 进入主容器
docker exec -it redis-master bash
# 主容器休眠
redis-cli -a lindj -p 6300 DEBUG sleep 60
复制代码
此时进入从容器执行 info Replication,可以看到master已经完成切换
60秒后原主redis恢复可以看到,已经切换到从库