|
搭建: 1.建立consul集群,在redis节点上布置consul agent
2.建立sentinel集群
3.注册服务(重点)
首先在redis2222实例上新建redis主从检测脚本
cat >/root/check/redis_role.sh<<EOF#!/bin/bashPORT=$1ROLE=$2a=$(redis-cli -p $PORT info Replication|grep role:|awk -F ':' '{print $2}'|awk -F '\r' '{print $1}' )if [ $a = $ROLE ]; thenexit 0elseexit 2fiEOF
注:脚本使用方式:/root/check/redis_role.sh 2222 master
第一个参数2222代表端口
第二个参数master代表主,也可使用slave
原理:摘出info命令中replication段的role属性,然后和第二个变量相对比,相同,则输出0
(shell脚本正常运行的返回值),否则返回2(shell脚本执行异常的返回值)
其次:创建consul的redis服务配置文件
cat >/etc/consu/redis_2222.json<<EOF{"services":[{"id":"2222master","name":"redis-master","tags":["master"],"address":"192.168.1.131","port":2222,"check":[{"args":["/root/check/redis_role.sh","2222","master"],"interval":"3s"}]},{"id":"2222slave","name":"2222slave""tags":["slave"]"address":"192.168.1.131""port":2222"checks":[{"args":["/root/check/redis_role.sh","2222","slave"],"interval":"3s"}]}]}EOF
在redis3333实例所在的主机上同样操作。
解释:在2222实例上我们注册两个服务,一个为redis-master,一个为redis-slave。
在3333实例上也注册了同样的两个服务,在consul系统中,将json配置文件中name属性相同的
服务视为同一个服务。因为consul本身是具备健康检查的功能,一个服务中如果两个节点都OK
服务域名解析是将会轮询到两个节点中,但健康检查失败后,域名解析时会自动踢出fail节点。
|
|
|