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.gemredis-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 も再選出の条件を満たし、ノードが保存されます。