1. Redis のマスター/スレーブ レプリケーション
マスター/スレーブ レプリケーションとは、1 つの Redis サーバー (マスター ノード - マスター) のデータを他の Redis サーバー (スレーブ ノード - スレーブ) にコピーすることを指します。デフォルトでは、各 Redis サーバーはマスター ノードであり、各マスター ノードには複数の Redis サーバーまたはスレーブ ノードではありませんが、スレーブ ノードはマスター ノードを 1 つだけ持つことができます
1.1 マスター/スレーブ レプリケーションの役割
データ冗長性: マスター/スレーブ レプリケーションは、永続化以外のデータ冗長化方法であるデータのホット バックアップを実装します。
障害回復: マスターノードに障害が発生した場合、スレーブノードがサービスを提供できます。
負荷分散: 読み取り/書き込み分離によるマスター/スレーブ レプリケーションに基づいて、マスター ノードが書き込みサービスを提供し、スレーブ ノードが読み取りサービスを提供してサーバー負荷を共有します。
高可用性の基礎: マスター/スレーブ レプリケーションはセンチネルとクラスターの実装の基礎です
1.2 共通マスタ・スレーブ構成
1 つのマスターと 1 つのスレーブ: 主にデータのセキュリティとマスター ノードへの永続性の影響を回避するために、スレーブ ノードからマスター ノードのフェイルオーバーに使用されます。
1 つのマスターと複数のスレーブ: 主に大量の読み取りを行うシナリオの場合、読み取りは複数のノードで共有されますが、マスター ノードの安定性に影響し、帯域幅に影響します。
ツリー状のマスター/スレーブ: 1 つのマスターと複数のスレーブによって引き起こされるマスター ノードへの高圧の問題を軽減するために、マスター - スレーブ - スレーブ、次にマスター - スレーブの階層構造が形成されます。
1.3 マスタ・スレーブレプリケーションの実現
redis.conf の複数のコピーをコピーして構成を変更する
92 プロット 6379
158 pidfile /var/run/redis_6379.pid
171 ログファイル "redis6379.log"
253 dbfilename dump6379.rdb
コマンドで一括置換可能
:%s/6379/6380/g
別のサーバーを起動し、別の端末を開いて別のサーバーに接続します
redis-server redis6379.conf
redis-cli -p 6379
現在のサーバーの役割などの情報を表示するには、「情報レプリケーション」と入力します。
サーバーの下にコマンドを入力して、現在のサービスをスレーブ サーバーとして設定し、そのマスター サーバーを設定します。
メインサーバーの IP ポート番号のサルブ
2.レディセントリー
メインサーバーがダウンした場合、機能の通常の実装を維持するには、メインサーバーとなるスレーブサーバーを選択するセントリーが必要です (センチネルも、メインサーバーに接続された別個の Redis サーバーであり、メイン経由でスレーブに接続されます)
単一のセントリーがダウンタイムを誤って判断するのを防ぐために、複数のセントリー (奇数でなければなりません) を使用し、投票パラメーターを設定することもできます。この数のセントリーがマスターサーバーがダウンしていると判断した場合にのみ、マスターサーバーはスレーブスイッチ
Sentinel の Sentinel.conf は次のように設定する必要があります (コメントを削除)
protected-mode no # ポート 26379 のテストに便利な保護モードをオフにします
# Sentinel port
Sentinel Monitor mymaster 192.168.41.226 6379 1# 192.168.41.226: ホスト IP 6379: ポート 1: 少なくとも少数の監視員がホストがオフラインであると判断した場合のフェイルオーバー
「redis-sentinel Sentinel6379.conf」と入力してセンチネルを起動します
3. Redis クラスター
Redis-cluster クラスターは、redis 3.0 以降のバージョンでサポートされています。これは、複数の Redis マスター サーバーが相互に接続されてクラスターを形成することを意味します。
これは、センチネル モードはほとんどの要件を満たすことができますが、大量の書き込みリクエストを処理できないという問題を解決するためです。
これも古典的な P2P (分散化) です
3.1 Redisクラスターの実装
-
/usr/local/redis の下に redis-cluster ディレクトリを作成します。
-
redis6379 を redis-cluster にコピーし、redis8001.conf という名前を付けます。
-
92 redis8001.conf のポート番号を変更します
-
158 pidファイルを変更する
-
171 ログファイルを変更する
-
253 rdb ファイルを変更する
-
699 aof を有効にし、yes に設定します
-
703 aof ファイル名を指定する
-
832 クラスターを有効にし、yes に設定します
-
840 ノード構成ファイルの指定
複数の Redis サーバーの起動を容易にするために、起動スクリプトを作成し、/user/local/redis の下に start_all.sh ファイルを作成し、それをファイルに追加します。
redis-server redis-cluster/redis8001.conf
redis
-server redis-cluster/redis8002.conf redis-server redis-cluster/redis8003.conf
redis-server redis-cluster/redis8004.conf
redis-server redis-cluster/redis8005.conf
redis-server redis-cluster/redis8006.conf
ps -ef|grep redis
保存して終了し、start_all.sh ファイルに実行権限を追加します。
chmod +x start_all.sh
Redisを起動する
./start_all
クラスターを作成する
redis-cli --cluster create 192.168.74.130:8001 192.168.74.130:8002 192.168.74.130:8003 192.168.74.130:8004 192.168.74.130:8005 192.168.74.1 30:8006 --クラスターレプリカ 1
作成時に「yes」と入力します
Redis クラスターに接続するには、-c を使用します。
redis-cli -c -p 8001
クラスターのシャットダウン スクリプトを作成する
#!/bin/bash
PORT=8001
ENDPORT=8006
while [ $((PORT <= ENDPORT)) != "0" ]; do
echo "Redis $PORT の停止"
redis-cli -p $PORT shutdown
PORT=$((PORT+1))
done
echo "done"
exit 0
実行権限を追加する
chmod +x stop_all.sh