redis高可用性ソリューション(sentinel,cluster)

2441 ワード

sentinel(哨兵)
1説明:
master-slaveのグループでは、sentinelシステムがmaster状態を監視するために使用され、masterがダウンタイムした場合、古いmasterの代わりに新しいmasterを自動的にルールに従ってslaveから選択します.
古いmasterが再びオンラインになると、新しいmasterのslaveとして実行されます.
2起動
              $ redis-sentinel sentinel.conf
または
              $ redis-server sentinel.conf --sentinel
sentinelが起動するサーバとしてクライアントが送信できるコマンドはPING、SENTINEL、INFO、SUBSCRIBE、UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSSCRIBE、PUNSUBSSCRIBEのみで、起動してもAOF、RDBファイルはロードされません
3構成
sentinel monitor mymaster 127.0.0.1 6379 2   ##      ip/  /   master        2 sentinel  【1】
sentinel down-after-milliseconds mymaster 60000  ## Sentinel             ms 
sentinel failover-timeout mymaster 180000    ##            ,ms,       ,         ,        
sentinel parallel-syncs mymaster 1    ##         ,                          ,       ,               

4主観的失効と客観的失効
主観的な失効:sentinelがサーバのオフラインを判断し、down-after-millisecondsの設定値に基づいて
客観的失効:sentinelシステムはmasterサーバのオフライン(【1】の構成値に達する)を判断し、客観的失効の場合にのみmasterサーバがフェイルオーバ(failover)を実行し始める
5マスター選挙ルール
Disconnection time from the master.  

Slave priority.   ## slave-priority 10,25,100,         

Replication offset processed. ##     ,           

Run ID. ##    runId,  ,      

cluster(クラスタ)
1機能:
redisが提供する分散型データベーススキームであり、スライス(sharding)によってデータ共有を行い、レプリケーションとフェイルオーバの機能を提供する.
クラスタ内のノードが到達できない場合、コマンドの処理を続行できます.      
2クラスタのデータスライス
clusterはコンシステンシhashを用いずハッシュスロットを導入し,合計16384個,clusterノードがそれぞれ一部を担うハシスロット(hash slot)(各keyはCRC 16検査後に16384を型取りしてどのスロットを置くかを決定する)
複数のkeyが同じスライスに属する場合、複数のkeyを同時に操作することができ、そうでなければ、できない.
3クラスタのフォールトトレランス(マスターコピーモデル)
一部のノードがクラスタの使用に影響を及ぼさずに到達できない場合、redisは主従レプリケーションモデルを使用する.すなわち、各masterには対応するslaveがあり、あるmasterが到達できない場合、クラスタはそのslaveを新しいmasterとして選択してサービスを継続する.
4クラスタは、強い一貫性を保証できません(低遅延と高性能の観点から、プライマリ・スレーブ・レプリケーションは非同期で実行されます).
5構成
port 7000  
cluster-enabled yes  ##           
cluster-config-file nodes.conf  ##              ,                   
cluster-node-timeout 5000  ##             

添付、キャッシュ更新?
1ヒット:クエリーがキャッシュからコンテンツを読み込むと、直接戻ります.
2 miss:永続層からコンテンツを読み出し、キャッシュに保存して戻ります.
3更新:データ変更の場合、データベースを更新してからキャッシュを更新します.