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が主従切替を行った後、スクリプトを実行して相応のステップを行い、切替効果を達成することができます.スクリプトの実行内容:
  • 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プロファイルを見て、