Redis哨兵モード

2481 ワード

Redis哨兵モード
前景
redisプライマリ・スレーブ・アーキテクチャにダウンタイムが発生した場合、どうしますか?
  • Redisダウンタイム
  • から
    a)これは比較的簡単で、Redisでライブラリから再起動すると自動的にマスタースレーブアーキテクチャに加入し、同期データを自動的に完成する.
    b)スレーブライブラリが切断されている間、メインライブラリの変化は大きくなく、スレーブライブラリが永続化されていることを前提に、再起動後、インクリメンタルコピーが実現される.
  • メインRedisダウンタイム
  • i.第一歩は、データベースからSLAVEOF NO ONEコマンドを実行し、主従関係を切断し、メインライブラリに昇格してサービスを継続する.
    ii.第2ステップでは、メインライブラリを再起動した後、SLAVEOFコマンドを実行し、他のライブラリのスレーブライブラリに設定すると、データが更新されます.
    しかし、これは手動で操作する必要があります.面倒なことは言わないで、間違いやすいので、何かいい方法がありますか.
    歩哨の原理
    Redisはsentinel(哨兵)メカニズムを提供し、sentinelモードでredisを起動した後、master/slaveの運行状態を自動的に監視し、基本原理は:心拍メカニズム+投票裁決
    各sentinelは、他のsentinal、master、slaveタイミングにメッセージを送信し、相手が「生きている」かどうかを確認し、相手が指定された時間(構成可能)内に応答していないことを発見した場合、一時的に相手が掛かっていると判断する(いわゆる「主観的にダウンタイムと判断する」Subjective Down、略称SDOWN).
    「哨兵群」の多くのsentinelが、あるmasterが応答していないことを報告した場合、システムはこのmasterが「徹底的に死亡した」(すなわち、客観的な真のdown機、Objective Down、ODOWNと略称する)と判断し、一定のvoteアルゴリズムを通じて、残りのslaveノードから1台を選択してmasterに昇格し、自動的に関連配置を修正する.
    歩哨モード配置
    まずredisルートディレクトリの下にconfサブディレクトリを作成し、プロファイルsentinelを新規作成します.conf、またはコピー解凍redisソースファイルのルートディレクトリの下にsentinelがあります.conf、内容は以下の通りです
    port 26379
    dir /tmp
    sentinel monitor master 192.168.1.103 6379 1
    sentinel down-after-milliseconds master 30000
    sentinel parallel-syncs master 1
    sentinel failover-timeout master 180000
    logfile "/var/log/sentinel_log.log"
    

    構成の説明:
    1、prot現在のSentinelサービスが運行するポート
    2、dir Centinelサービス実行時に使用する一時フォルダ
    3、sentinel monitor master 192.168.110.101 6379 2
    Sentinelはマスターという名前のプライマリredisインスタンスを監視します.このプライマリインスタンスのIPアドレスはネイティブアドレス192.168.1.1103で、ポート番号は6379です.このプライマリインスタンスを失効と判断するには、少なくとも1つのSentinelプロセスの同意が必要です.Sentinelの数が基準に達しない限り、自動failoverは実行されません.
    4、sentinel down-after-milliseconds master 30000
    CentinelがRedisインスタンスが無効になったと判断するミリ秒数を指定します.インスタンスがこの時間を超えてPINGを返さなかったり、エラーを直接返したりした場合、Centinelはこのインスタンスを主観的なオフラインとしてマークします.1つのSentineプロセスのみがインスタンスを主観的なオフラインとしてマークすると、必ずしもインスタンスの自動フェイルオーバを引き起こすわけではありません.十分な数のSentineが1つのインスタンスを主観的なオフラインとしてマークしている場合にのみ、インスタンスは客観的なオフラインとしてマークされ、自動フェイルオーバが実行されます.
    5、sentinel parallel-syncs master 1
    フェイルオーバを実行するときに、Redisインスタンスから新しいプライマリインスタンスを同期できる最大数を指定します.Redisインスタンスが多い場合、この数が小さいほど同期時間が長くなり、フェイルオーバを完了するのに要する時間が長くなります.
    6、sentinel failover-timeout master 180000
    この時間(ms)内にfailover操作が完了しなかった場合、failoverは失敗したとみなされる
    操作手順
  • 構成マスターコピー
  • 各redisサーバにおけるSentinelのプロファイル
  • を変更する.
  • redisサービスを開始し、
  • Sentinel
  • を起動
  • 起動順序:プライマリRedis->Redis->Sentinal