redis (永続化、マスター/スレーブ レプリケーション、redis クラスター)

1. Redisの永続化

        Redis の高いパフォーマンスは、すべてのデータをメモリに保存するためですが、Redis の再起動後にデータが失われないようにするには、メモリからハードディスクにデータを同期する必要があります。プロセスは永続性です。

        Redis は 2 つの永続化方式をサポートしています。1 つはRDB 方式、もう 1 つはAOF 方式です。いずれか一方を単独で使用することも、両方を組み合わせて使用​​することもできます。

1.1、RDB 永続性 (デフォルト)

        RDB の永続化はスナップショットによって行われ、特定の条件が満たされると、Redis は自動的にメモリ内のデータのスナップショットを取得し、それをハードディスクに永続化します。

        RDB は Redis が採用するデフォルトの永続化方式であり、redis.conf 構成ファイルのデフォルト構成は次のとおりです。

save 900 1 #900 秒、複数のキーが変更された場合、スナップショットを開始します。 save
300 10 #300 秒、10 を超えるキーが変更された場合、スナップショットを開始します。 save save
60 10000 # 10,000 を超えるキーがある場合にそれを示します。キーが 60 秒以内に変更されると、スナップショットの保存が開始されます

redis.conf 内:

rdb スナップショット ファイルの場所を指定するように dir を構成します。

dbfilenam を構成して rdb スナップショット ファイルの名前を指定します。

Redis が起動すると、RDB スナップショット ファイルが読み取られ、ハードディスクからメモリにデータがロードされます。

 実験

1. dump.rdbを削除します

2、テストabcを設定します

3. サーバーを閉じて、bin ディレクトリ内の変更を観察します。

要約:

利点: Redis データへのアクセスが高速化されます。

短所: サーバーの電源を切ると一部のデータが失われます (データの整合性は保証できません)。

1.2、AOF 永続性

        デフォルトでは、Redis は AOF (ファイルの追加) 永続性を有効にしません。これは、appendonly パラメーターを使用して有効にできます。

追加のみはい

        AOF ファイルの保存場所は RDB ファイルの保存場所と同じで、どちらも dir パラメータで設定されます。デフォルトのファイル名は appendonly.aof で、appendfilename パラメータで変更できます。  

appendファイル名 appendonly.aof

        AOF 永続化戦略は次のとおりです。  

#appendfsync always #AOF ファイルは、データ変更が発生するたびに書き込まれます。
appendfsync eachsec #毎秒同期します。この戦略は AOF のデフォルトの戦略です。
#appendfsync no # 同期しません。効率的ですが、データは保持されません。

実験 

1.appendonlyをyesに設定します

2. キーを設定する

3. appendonly.aof を観察します。

要約:

利点: 優れた永続性、データの整合性を保証できる

短所: Redis システムのアクセス速度が大幅に低下します。

2、マスタースレーブレプリケーション(理解)

        永続化により、redis サービスが再起動された場合でもデータが失われることはありません。これは、redis サービスの再起動後にハード ディスク上の永続データがメモリに復元されるためです。ただし、redis サーバーのハード ディスクが破損した場合、データが失われる可能性があります。次の図に示すように、この単一障害点はレプリケーション メカニズムによって回避できます。

例証します:

  • メイン Redis のデータには、redis1 と redis2 の 2 つのコピー (レプリケーション) があり、1 つの Redis サーバーがダウンしても、他の 2 つの Redis サービスはサービスを提供し続けることができます。

  • マスター Redis のデータとスレーブ Redis のデータはリアルタイムで同期されており、マスター Redis がデータを書き込むと、そのデータはマスター/スレーブ レプリケーション メカニズムを通じて 2 つのスレーブ Redis サービスにコピーされます。

  • マスター Redis は 1 つだけあり、スレーブ Redis は複数存在する可能性があります。

  • マスター/スレーブ レプリケーションはマスターをブロックせず、マスターはデータを同期しながらクライアント要求の処理を続行できます。

  • 次の図に示すように、redis はマスターとスレーブの両方になることができます。

 

2.1. マスター/スレーブ構成 

メインの Redis 構成

特別な構成は必要ありません

Redisから設定する

スレーブ Redis サーバー上の redis.conf ファイルを変更し、マスター Redis のスレーブ IP マスター Redisポートを追加します。

上記の構成は、スレーブ Redis サーバーに対応する現在のマスター Redis が 192.168.101.3 で、ポートが 6379 であることを示しています。  

2.3. マスター/スレーブレプリケーションプロセス 

 

コピープロセスの説明:

1. スレーブ サービスが開始されると、スレーブはマスターとの接続を確立し、同期コマンドを送信します。

2. マスターは、データベースのスナップショットを RDB ファイルに保存するバックグラウンド プロセスを開始します。

3. マスターは RDB ファイルをスレーブに送信します

4. スレーブはファイルをディスクに保存し、回復のためにメモリにロードします。

5. マスターはキャッシュされたコマンドをスレーブに転送します。

注:マスターが停止しているため、スレーブは読み取りのみ可能です

 3. Redisクラスタの構築

アーキテクチャの詳細:

(1)すべての Redis ノードは相互接続されており (PING-PONG メカニズム)、ノードの障害はクラスター内のノードの半分以上が障害を検出した場合にのみ有効になります。

(2)データにアクセスするときはどのノードにも接続できますが、クラスター内の 1 つのノードに障害が発生すると、クラスター全体が障害になります。

Redis クラスターには 16384 の組み込みハッシュ スロットがあります。Redis クラスターにキーと値を配置する必要がある場合、Redis は最初に crc16 アルゴリズムを使用してキーの結果を計算し、次に結果の残りを計算します。 16384、各キーが 0 ~ 16383 の番号が付けられたハッシュ スロットに対応するように、redis はノードの数に応じてハッシュ スロットを異なるノードにほぼ均等にマップします。 

 

Redis クラスターには少なくとも 3 つのノードが必要です。クラスターの高可用性を確保するには、各ノードにバックアップ マシンが必要です。

Redis クラスターには少なくとも 6 台のサーバーが必要です。

擬似分散ビルドします。1 つの仮想マシンを使用して 6 つの Redis インスタンスを実行できます。Redisのポート番号7001-700を変更する必要があります

 3.1. クラスタ構築環境

Ruby スクリプトを使用してクラスターを構築するには、Ruby をインストールする必要があります。

[root@upload ~]# yum install Ruby
[root@upload ~]# yum install Rubygems
[root@upload ~]# gem install redis-3.0.0.gem 

redis-3.0.0が正常にインストールされました

ジェムが1つインストールされています

redis-3.0.0 の ri ドキュメントをインストールしています...

redis-3.0.0 の RDoc ドキュメントをインストールしています...

[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x。1 ルート root 48141 2015 年 4 月 1 日 redis-trib.rb

3.2. 構築手順 

注: dump.rdb および appendonly.aof ファイルは削除する必要があります

擬似分散を構築するには、6 つの redis インスタンスを /usr/local/redis-cluster ディレクトリに配置し、異なるポート 7001 ~ 7006 で実行する必要があります。

cp -r /usr/local/redis /usr/local/redis-cluster/redis-7001

3.3. 6 つの Redis インスタンスを作成する

各インスタンスは異なるポートで実行されます。redis.conf 構成ファイルも変更する必要があります。構成ファイルでは、cluster-enabled yes の前のコメントも削除する必要があります。

 

3.4. 各 Redis インスタンスの起動

クラスターを起動するスクリプトを作成します。start-all.sh は /usr/java/redis-cluster ディレクトリに配置されます。

  cd /usr/local/redis-cluster/redis-7001/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7002/bin
                ./redis-server redis.conf
                cd /usr/ local/redis-cluster/redis-7003/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7004/bin
                ./redis-server redis.conf
                cd /usr/local/redis-クラスタ/redis-7005/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7006/bin
                ./redis-server redis.conf

[root@localhost redis-cluster]# chmod 777 start-all.sh

クラスターをシャットダウンするスクリプト shutdown-all.sh を作成し、/usr/local/redis-cluster ディレクトリに配置します。

 cd redis-7001/bin

./redis-cli -p 7001 シャットダウン

./redis-cli -p 7002 シャットダウン

./redis-cli -p 7003 シャットダウン

./redis-cli -p 7004 シャットダウン

./redis-cli -p 7005 シャットダウン

./redis-cli -p 7006 シャットダウン

[root@localhost redis-cluster]# chmod 777shutdown-all.sh

 3.5. Ruby スクリプトを使用して Redis クラスターを構築する

cd /usr/upload/redis.3.0.0/src

#create --replicas 1 意思就是说,为每个节点创建一个副本,也就是备份,如果 是不同的服务器,那么后面的端口也需要改成服务器的端口, 前面3个ip是主,后面3个ip是备份机

./redis-trib.rb create --replicas 1 192.168.116.134:7001 192.168.116.134:7002 192.168.116.134:7003 192.168.116.134:7004 192.168.116.134:700 5 192.168.116.134:7006

3.6. テスト 

-c パラメーターを使用して、起動時にクラスター モードを開始します。コマンドは次のとおりです。

./redis-cli -c -p 7001

 

3.7、redis クラスターコマンド

クラスター情報 #クラスター情報を出力する

クラスターノード #現在クラスターに認識されているすべてのノード (ノード) と、これらのノードに関する情報をリストします。  

 3.8、マスタースレーブ数の設定

1: Redis クラスター内のマスター ノードの数は少なくとも 3 つ以上である必要があります。
マスター 1 がハングアップした後、残りのマスター ノード (マスター 2 とマスター 3 がある場合) が新しいマスターを再選択するためです。しかし、マスター ノードの半分以上は、マスター-1 がダウンしていると考えているため、新しいマスターが再選出されます。2 つある場合、1 つはダウンし、もう 1 つがあります。1>1 は真ではないため、少なくとも 3 つのマスター ノードが必要です

2: 必須ではありませんが、クラスター ノードの数が奇数の場合

コストとリソースを節約するため、ノードが 4 つある場合、4 の半分の 2 が 1 つで一時停止され、残りの 3 つ (3>2) が再選択の条件を満たしますが、ノードが 3 つある場合は 1.5 の半分になります。 、ハング 1 と 2 があり、2>1.5 も再選出の条件を満たし、ノードが保存されます。

 

おすすめ

転載: blog.csdn.net/m0_71560190/article/details/126501151