高可用性 - マスタースレーブレプリケーションの原理と最適化をRedisの

マスタースレーブのレプリケーションとは何ですか

機械の故障、容量のボトルネック、QPSボトルネック

マスタ・スレーブ、複数のマスタ

別々の読み取りおよび書き込みを行います

データのコピーを作成します

拡張データのパフォーマンス

maskterは、複数のスレーブを持つことができます

スレーブは1つのマスタのみを持つことができます

データフローは、マスタからスレーブへの一方向であります

二つのレプリケーション構成

2.1スレーブコマンド

6380から、6379卿
6389実行上の
スレーブの 127.0.0.1 6379 非同期 
slaveof誰#はコピーをキャンセルし、データが前にクリアされていません

 

2.2コンフィギュレーションファイル

ポートIP slaveof 構成ノードのIPアドレスとポートから 
はい読み取り専用スレーブノードからは読み取り専用、読み書きのデータが混乱になりますので、
' 『』
ます。mkdir -p redis1 / redis1 confに/データredis2 / redis2 confに/データredis3 / redis3 confに/データ
Vimのredis.conf 
デーモン化NOへ
PidFileオプションがredis.pid 
バインド0.0.0.0を
保護-MODE NO 
ポート6379 
タイムアウト0 
ログファイルredis.log 
dbfilename dump.rdb 
DIR /データ
slaveof 10.0.0.101 6379 
スレーブ読むオンリーはい
CPのredis.conf /ホーム/ redis2 / confに/
6379 -pドッキングウィンドウの実行:6379 --name redis_6379 -v /home/redis1/conf/redis.conf:/etc/redis/redis.conf -v /ホーム/ redis1 /データ:/データ-dのRedisのRedisサーバ/など/ Redisの/ redis.conf 
ドッカ6378 -pを実行:6379 --name redis_6378 -v /home/redis2/conf/redis.conf:/etc/redis/redis.conf -v /ホーム/ redis2 /データ:/データ-dのRedisのRedisサーバ/etc/redis/redis.confの
6377 -pドッキングウィンドウの実行:6379 --name redis_6377 -v -v /home/redis3/conf/redis.conf:/etc/redis/redis.conf /ホーム/ redis3 /データ:/データ-dのRedisのRedisサーバ/etc/redis/redis.confの
情報の複製
''」

 

 

四つのトラブルシューティング

スレーブ失敗

マスターの失敗

ファイブコピーよくあるご質問

1個別の読み取りと書き込み

ノードから流れるように配分を読みます

問題が発生することがありますコピーデータ待ち時間を、ノード障害からの古いデータを読み込みます

マスター構成の不一致から2

maxmemory矛盾:欠落したデータ

データ構造の最適化パラメータ:マスターノードが最適化されているが、最適化がノードから提供されていない、いくつかの問題があるでしょう

複製の全額を回避するために3

不可避第フルボリュームコピー、小マスタノード、低ピーク(夜間)

マスタノードの再起動(ID変更ランニング):ノードIDは、操作に一致しません

コピーには不十分なバッファを絞る:コピーバッファサイズ、rel_backlog_sizeを増やします

4回避レプリケーションの嵐

シングルマスターレプリケーションストームノード、マスターノードの再起動は、すべてのノードからコピー

 

 

マスターコピーからHA

#マスター・スレーブレプリケーションの問題:
#1マスタースレーブレプリケーション、プライマリノードに障害が発生し、フェイルオーバーのニーズが行われるように、手動で転送することができます発生します。マスターとなり、スレーブの一つ聞かせて
#2マスター・スレーブ複製、マスターできるだけの書き込みデータ、および書き込み限られたストレージ容量

二つの建築表現

診断を行うことができます障害、フェイルオーバー、(実際には、プロセスである)をクライアントに通知、直接センチネルに接続されたクライアントアドレス

画像-20191229230823911

以上の1つのセンチネルは、問題の発見とマスターを確認しました

2リーダーとしてセンチネル選挙に触れて

スレーブとして3は、新しいマスターを選択します

4スレーブの残りの部分は、スレーブの新しいマスターになる知らせます

5からの主な変更をクライアントに通知します

6古いマスターの復活を待っていると、スレーブの新しいマスターになるために

3つの取り付け構成

1 メインスレーブノード開くように構成された
 2は、主センチネルノード構成(特殊センチネルRedisの)を監視するためにオンされる
。3 であるべきである複数のマシン
 構成オープンセンチネルノードモニターメイン 
MKDIR -p redis4 / confにredis4 /データ redis5 / confにredis5 /データredis6 / redis6データ/ confに
VI sentinel.conf 
ポート 26379 
NOをデーモン化する
DIR / データが
保護された - MODE NO 
バインド 0.0.0.0 
ログファイル" redis_sentinel.log " 
センチネルモニターmymaster 10.0.0.1 6379 2 
センチネルダウン -after-30000ミリ秒はmymaster 
センチネル平行に -syncs mymaster 1
センチネルフェイルオーバー -timeout mymaster 180000 
]ドッキングウィンドウの実行 -p 26379:26379 --name redis_26379 -v /home/redis4/conf/sentinel.conf:/etc/redis/sentinel.conf -v /ホーム/ redis4 /データ:/データ-dのRedis Redisの-センチネルの/ etc / Redisの/ sentinel.conf 
ドッキングウィンドウの実行 26378 -p:26379 --name redis_26378 -v -v /home/redis5/conf/sentinel.conf:/etc/redis/sentinel.conf /ホーム/ redis5 /データ:/データ-dのRedis Redisの-センチネルの/ etc / Redisの/ sentinel.conf 
ドッカ実行 -p 26377:26379 --name redis_26377 -v /home/redis6/conf/sentinel.conf:/etc /redis/sentinel.conf -v /ホーム/ redis6 /データ:/データ-dのRedis Redisの-センチネルの/ etc / Redisの/ sentinel.conf 
のRedis- センチネルsentinel.conf 
情報の
設定が自動検出スレーブを上書きします

 

四クライアント接続

インポートのRedis
 から redis.sentinel インポートセンチネル
#の接続のSentinelサーバ(ホスト名をドメインとすることができる)10.0.0.101:26379 
センチネルセンチネル=((' 10.0.0.101 '、26379 )、 ' 10.0.0.101 '、26378 )、 ' 10.0.0.101 '、26377 
             ]、
                    SOCKET_TIMEOUT =。5 
プリント(センチネル)
 マスターサーバーアドレスの取得 
(マスター= sentinel.discover_masterを' Mymaster ' 印刷(マスター)
サーバのアドレスから取得した 
スレーブ= sentinel.discover_slaves(' mymaster ' 印刷(スレーブ)
マスターサーバーを得るには、書き込み
#1 '(= sentinel.master_forマスターmymaster 'SOCKET_TIMEOUT = 0.5) w_ret = master.set(' foo 'で、'バー') #
 スレーブ= sentinel.slave_for(' mymaster 'SOCKET_TIMEOUT = 0.5) r_ret = slave.get(' FOO 「) 印刷(r_ret)

 

 

ファイブ実装の原則

シックス・よくある質問

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/Gaimo/p/12121837.html