redis哨兵模式即redis主从模式的升级版,可以实现主机与从机的自动切换。
一、先将两台服务器搭建成主从模式
分别在两台机器上(192.168.50.45,192.168.50.17)使用docker-compose启动两个redis,compose.yml相同,配置文件有所不同
version: "2.1"
services:
redis:
image: coral_ris:latest
restart: unless-stopped
ports:
- "6379:6379"
command:
- /bin/sh
- -c
- |
echo "y" |redis-check-aof --fix /data/appendonly.aof
redis-server /usr/local/etc/redis/redis.conf
volumes:
- /data/docker/redis/conf:/usr/local/etc/redis
- /data/docker/redis/data:/data
在从机192.168.50.17的redis.conf下添加如下配置。
slaveof 192.168.50.45 6379
分别docker-compose up 启动redis,并分别用info Replication查看相关集群信息。
50.45机器:
50.17机器:
并且两台redis里面都没有 key 为8848的数据。
向主机中set key为8848的数据,从机数据同步了,说明主从结构搭建成功。
普通的主从结构在主机宕机的情况下,系统是不会进行主从切换的。
如下我们停掉主redis
50.17的redis并没有晋升为主节点
这也是主从架构的弊端,要想实现在主节点宕机的情况下从节点能够自动晋升为主节点的功能,那么就需要借助sentinel的监控了。
redis sentinel本质上说也是一台redis节点,但它只负责对系统中其他redis节点的监控,并不存储数据。
二、sentinel搭建
我们在50.45上进行sentinel的搭建,sentinel的compose文件如下:
version: "2.1"
services:
redis:
image: coral_ris:latest
restart: unless-stopped
ports:
- "26379:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel.conf:/usr/local/etc/redis/sentinel.conf
由此也可以看出sentinel也是由reids镜像启动的redis服务。
我们在compose同级目录创建sentinel的配置文件,并编辑内容如下:
port 26379
dir "/tmp"
sentinel deny-scripts-reconfig yes
#指定监控的master地址
sentinel monitor mymaster 192.168.50.45 6379 1
#主密码,不设置的话不能动态切换
sentinel auth-pass mymaster SQL_Manager
sentinel config-epoch mymaster 1
分别启动主从redis后,启动sentinel的compose,可以看到监控的主从信息:
然后停止50.45的redis,sentinel实现了主从的切换。
50.17变成了主机。
至此简单的一主一从一哨兵的模式就已经搭建完成,但这只是测试环境使用,在生产环境中至少也要部署两个哨兵互相监控来保证哨兵功能的健壮性。