redis sentinelのスクリプトメカニズムとtwemproxy主従自動切替の実現
3331 ワード
redis sentinelスクリプトメカニズム
1).sentinel notification-script通知型スクリプト:sentinelに警告レベルのイベントが発生した場合(例えばredisインスタンスの主観的失効や客観的失効など)、このスクリプトが呼び出されます.このスクリプトは、メール、SMSなどの方法でシステム管理者にシステムの正常な動作に関する情報を通知する必要があります.スクリプトを呼び出すと、スクリプトの2つのパラメータに渡されます.1つはイベントのタイプで、1つはイベントの説明です.sentinelならconfプロファイルにこのスクリプトパスが構成されている場合は、このスクリプトがこのパスに存在し、実行可能であることを保証する必要があります.そうしないとsentinelは正常に起動できません.
# :
sentinel notification-script mymaster /var/redis/notify.sh
2).sentinel client-reconfig-scriptこのスクリプトは、failoverによってmasterが変更された場合に呼び出され、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が主従切替を行った後、スクリプトを実行して相応のステップを行い、切替効果を達成することができます.スクリプトの実行内容:
スクリプトの例:
#!/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
テスト
sentinel client-reconfig-script mymaster /usr/local/redis/twemproxy-reconfig.sh
/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