redis sentinel的脚本机制及实现twemproxy主从自动切换

redis sentinel 脚本机制

1).sentinel notification-script  
通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。

# 配置示例:
sentinel notification-script mymaster /var/redis/notify.sh

2).sentinel client-reconfig-script
当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。以下参数将会在调用脚本时传给脚本:

      

目前总是“failover”,是“leader”或者“observer”中的一个。参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的。这个脚本应该是通用的,能被多次调用,不是针对性的。

# 配置示例:
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

实现twemproxy自动进行主从切换

根据redis sentinel的脚本机制,我们可以配置 client-reconfig-script脚本,当redis进行主从切换后,执行脚本进行相应步骤,达到切换效果。
脚本执行内容:

  • 1、获取原始master的ip和port、新master的ip和port、集群的master-name
  • 2、修改twemproxy的配置文件
  • 3、关闭twemproxy
  • 4、使用新的配置文件启动twemproxy

脚本示例:

#!/bin/bash

###  sentinel 触发执行此脚本时,会默认传递几个参数过来
###        

monitor_name="$1"
master_old_ip="$4"
master_old_port="$5"
master_new_ip="$6"
master_new_port="$7"
# 这里通过获取  master-group-name 来修改 twemproxy 的配置文件,这里定的一点规范而已
# 因为我测试只挂了一个节点在后面,所以直接使twemproxy的配置等文件与sentinel的master-name相同即可
# 正常情况下后面应该有多个分片集群,集群名可以使用mymaster_1等方式,然后进行对应截取来获取文件名称等,方式多种
twemproxy_name="$1"   ##注意


twemproxy_home="/home/redis-test/twemproxy"

twemproxy_bin=$twemproxy_home"/sbin/nutcracker"
twemproxy_conf=$twemproxy_home"/conf/${twemproxy_name}.yml"
twemproxy_pid=$twemproxy_home"/pids/${twemproxy_name}.pid"
twemproxy_log=$twemproxy_home"/logs/${twemproxy_name}.log"
twemproxy_cmd="${twemproxy_bin} -c ${twemproxy_conf} -p ${twemproxy_pid} -o ${twemproxy_log} -d"

## 使用sed命令将新的master 端口和ip 替换掉 twemproxy 配置文件中旧的master 信息
sed -i "s/${master_old_ip}:${master_old_port}/${master_new_ip}:${master_new_port}/" ${twemproxy_conf}

## kill 掉根据旧配置文件启动的nutcracker 进程 ,并重新启动
ps -ef |grep "${twemproxy_cmd}" |grep -v grep |awk '{print $2}'|xargs kill
${twemproxy_cmd}

sleep 1
ps -ef |grep "${twemproxy_cmd}" |grep -v grep
测试
  • 1、首先启动redis主从集群
  • 2、启动redis哨兵集群,配置文件加入client-reconf-script参数配置:
sentinel client-reconfig-script mymaster /usr/local/redis/twemproxy-reconfig.sh
  • 3、启动twemproxy
/home/redis-test/twemproxy/sbin/nutcracker -c /home/redis-test/twemproxy/conf/mymaster.yml -p /home/redis-test/twemproxy/pids/mymaster.pid -o /home/redis-test/twemproxy/logs/mymaster.log -d
  • 4、挂掉某个redis的master节点,看客户端是否可以访问,查看twemproxy配置文件,

你可能感兴趣的:(redis)