阅读 308

基于docker的高可用redis集群搭建

简介


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恢复可以看到,已经切换到从库

关注公众号每天收获技术干货

参考

基于Docker的Redis高可用集群搭建(redis-sentinel)

文章分类
后端
文章标签