Redis-Entinelインストール


Redis2.Xバージョンでは分散クラスタはサポートされておらず、サードパーティ製のコンポーネントでしか実現できません.前の記事ではtwitterのtwemproxyについて説明しましたが、twemproxyはvalueを各サーバに平均的に分散し、失敗したノードを削除するしかなく、高可用性を保証できません.以下、redisのSentinelを紹介します.Sentinelもredisの著者が開発したもので、現在はredisのインストールパッケージに統合されており、主な目的はredisの高可用性を実現することです.
 
Centinelが実現する最も主要な機能は、あるマスターが停止したときに、あるslaveを自動的に新しいマスターに昇格させることができ、元のマスターのすべてのslaveも自動的に自分のマスターを新しいマスターに変更することができ、私たちのプログラムの可用性が大幅に向上したと思います.
 
--------------------------------------------------------------------------------------------------------------
 
以下にインストールと構成手順を記録します.
1、インストールはとても简単で、redisのインストールが完成すれば、Sentine lはインストールが完成して、Sentine lはredisの中に集積しました
2、配置、関連する配置ファイルはredisインストールディレクトリの下:sentinel.conf
 
port 26380#Centinel起動ポート
dir"/tmp/6380"#Sentinelの作業ディレクトリ
sentinel monitor mymaster 192.168.100.90 6380 2
#Sentineが傍受するmasteアドレス.1番目のパラメータはmasterの名前、2番目のパラメータはmaster IP、3番目のパラメータはmasterポート、4番目のパラメータはmasterが切れたときにmasterを失効と判定するには、Sentineクラスタで少なくとも2つのSentineが同意しなければならない.この数が基準に達しない限り、フェイルオーバは発生しない.
sentinel down-after-milliseconds mymaster 30000 
#マスターがどれくらいの時間内にSentineに有効な情報を返さなかったかは、そのマスターが主観的にラインオフしていると認定する
sentinel parallel-syncs mymaster 1 
#フェイルオーバを実行するときに、いくつかのslaveを設定して同時にマスターを切り替えます.この値が大きいほど、マスターを切り替えるときに使用できないslaveが多くなる可能性があります.この値を1、すなわち1つに設定すると、あるslaveでマスター同期データを切り替えると、残りのslaveは正常に動作します.
sentinel failover-timeout mymaster 180000  
#フェイルオーバの実行タイムアウト時間、つまり指定された時間内にほとんどのsentinelフィードバックmasterラインオフがなく、このフェイルオーバ計画は失効する
 
#同じプロファイルで複数のmasterリスニングを構成できます
 
 
 
3、Sentineを起動する
#   ,  redis-sentinel    
redis-sentinel /path/to/sentinel.conf
#   ,   redis-server   ,        Sentinel      Redis    , redis sentinel    
redis-server /path/to/sentinel.conf --sentinel

注意:どのように起動してもsentinelプロファイルのパスを指定する必要があります.
 
--------------------------------------------------------------------------------------------------------------
 
名詞の解釈:
1、主観ダウンライン:サーバーがdown-after-millisecondsに与えられたミリ秒数以内に、Sentinalが送信したPINGコマンドの返信を返さなかったり、エラーを返したりした場合、Sentinelはこのサーバーを主観ダウンラインとしてマークする(SDOWN)
2、客観的なラインオフ:十分な数のSentinelが1つのサーバーを主観的なラインオフとマークした後にのみ、サーバーは客観的なラインオフとマークされる(ODOWN)
masterが客観的なオフラインと認定された場合にのみ、フェイルオーバが発生します.
 
--------------------------------------------------------------------------------------------------------------
 
注意事項:
 
1、Sentinelクラスタのほとんどのサーバがmasterの主観的なダウンラインを認定した場合にのみmasterが客観的なダウンラインとして認定され、フェイルオーバを行うことができます.つまり、sentinel monitorに設定されている数にかかわらず、この値を満たしていても、ほとんどに達しない限り、フェイルオーバは発生しません.
2、sentinelは少なくとも3台を配置し、異なる機械に分布することを公式に提案している.ここでは主にsentinelの可用性を考慮し、sentinelを2台しか配備しておらず、quorumを1に設定しても自動フェイルオーバを実現できますが、そのうちの1台が停止した場合、自動フェイルオーバは永遠にトリガーされません.多くのsentinelがmasterの主観的なオフラインを認定しているわけではありません.
3、sentinel monitor構成のmaster IPはできるだけ127.0.0.1またはlocalhostと書かないでください.クライアント、例えばjedisがmasterを取得するのはこれに基づいて取得されるので、このように構成すると、jedisが取得したipは127.0.0.1で、プログラムがmasterに接続できない可能性があります.
4、sentinelが起動すると自動的にsentinelを修正する.confファイルは,発見されたmasterのslave情報やクラスタ内の他のsentinelの情報など,sentinelを再起動しても元の状態を保つことができる.注意、クラスタサーバの調整時にsentinelのマシンを交換したり、sentinelを新たに構成したりする場合は、以前実行していたsentinelプロファイルを直接コピーしないでください.その中に上記の情報が自動的に生成されるので、新しいプロファイルをコピーしたり、自動的に生成された情報を削除したりする必要があります.
5、フェイルオーバが発生した場合、masterの変更記録とslave交換masterの変更はredisのプロファイルに自動的に同期し、redisを再起動しても変更後の状態を保つことができる.
 
--------------------------------------------------------------------------------------------------------------
 
sentinelコマンド:
 
これらのコマンドを実行するには、redis-cli-p sentinelポートを使用してredisクライアントを開きます.
PING:PONGを返します.
SENTINELマスター:監視されているすべてのプライマリ・サーバと、これらのプライマリ・サーバの現在のステータスをリストします. SENTINEL slaves  name>:指定されたプライマリ・サーバのすべてのスレーブ・サーバと、これらのスレーブ・サーバの現在のステータスがリストされます. SENTINEL get-master-addr-by-name  name>:指定された名前のプライマリ・サーバのIPアドレスとポート番号を返します.このコマンドは、プライマリ・サーバがフェイルオーバ操作を実行している場合、またはプライマリ・サーバに対するフェイルオーバ操作が完了している場合に、新しいプライマリ・サーバのIPアドレスとポート番号を返します. SENTINEL reset :指定されたモードpatternに一致するすべての名前のプライマリ・サーバをリセットします.patternパラメータはGlobスタイルのモードです.リセット操作は、実行中のフェイルオーバを含むプライマリ・サーバの現在のすべてのステータスを消去し、現在発見されているものと関連付けられているものをすべて削除します.プライマリ・サーバのすべてのステータスは、サーバとCentinelから削除されます. SENTINEL failover  name>:プライマリ・サーバが無効になった場合、他のSentinelの意見を聞かずに自動フェイルオーバを強制的に開始します(ただし、フェイルオーバを開始したSentinelは他のSentinelに新しい構成を送信し、他のSentinelはこの構成に従って更新します)--------------------------------------------------------------------------------------------------------------
 
クライアント:
 
Jedisはsentinelをサポートする
//             ,       master  ,  sentinel          
JedisSentinelPool pool=new JedisSentinelPool("mymaster", hosts, config);
Jedis jedis=pool.getResource();
jedis.set("name","zhangsan");

 
参照先:http://redisdoc.com/topic/sentinel.html