Redisマスタースレーブレプリケーション、センチネル、クラスター

1つ、Redisクラスター

1.マスタースレーブレプリケーション

マスタースレーブレプリケーションは高可用性Redisの基盤であり、Sentinelとクラスターはマスタースレーブレプリケーションに基づいて高可用性を実現します。マスタースレーブレプリケーションは、主にデータのマルチマシンバックアップ、および読み取り操作の負荷分散と単純な障害回復を実装します。欠陥:障害回復を自動化できない、書き込み操作を負荷分散できない、ストレージ容量が単一のマシンによって制限されている

2.セントリー

Sentinelは、マスタースレーブレプリケーションに基づいて、自動障害回復を実現します。欠陥:書き込み操作の負荷分散ができない、ストレージ容量が単一のマシンによって制限されている、Sentinelがスレーブノードを自動的にフェイルオーバーできない、読み取りと書き込みの分離シナリオでは、スレーブノードに障害が発生すると、読み取りサービスが使用できなくなり、スレーブノードの追加監視が必要です、スイッチ操作

3.クラスター

Redisは、クラスタリングを通じて、書き込み操作の負荷分散が不可能であり、ストレージ容量が1台のマシンによって制限されるという問題を解決し、比較的完全な高可用性ソリューションを実現します。

2、Redis

マスタースレーブレプリケーションとは、1つのRedisサーバーのデータを他のRedisサーバーにコピーすることです。前者はマスターノード(マスター)と呼ばれ、後者はスレーブノード(スレーブ)と呼ばれます。データレプリケーションは一方向であり、マスターノードからスレーブノードへのみです。

デフォルトでは、各Redisサーバーがマスターノードであり、マスターノードは複数のスレーブノードを持つことができます(またはスレーブノードなし)が、スレーブノードは1つのマスターノードしか持つことができません

1.マスタースレーブレプリケーションの役割

①データの冗長性

マスタースレーブレプリケーションは、データのホットバックアップを実現します。これは、永続性に加えてデータ冗長性の方法です。

②故障復旧

マスターノードに問題がある場合、スレーブノードは迅速な障害回復を実現するためのサービスを提供できます。実際、これは一種のサービス冗長性です。

③負荷分散

マスタースレーブレプリケーションに基づいて、読み取りと書き込みを分離することで、マスターノードは書き込みサービスを提供でき、スレーブノードは読み取りサービスを提供できます(つまり、アプリケーションはRedisデータの書き込み時にマスターノードに接続します) 、およびアプリケーションは、Redisデータを読み取るときにスレーブノードに接続し、サーバーの負荷を共有します。特に、書き込みを減らして読み取りを増やすシナリオでは、複数のスレーブノードで読み取り負荷を共有すると、Redisサーバーの同時実行性が大幅に向上します。

④高可用性の要

上記の機能に加えて、マスタースレーブレプリケーションはセンチネルとクラスターの実装の基盤でもあるため、マスタースレーブレプリケーションはRedisの高可用性の基盤です。

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

①スレーブマシンプロセスが開始されると、マスターマシンに「同期コマンド」コマンドを送信して同期接続を要求します

②初回接続でも再接続でも、マスターマシンはバックグラウンド処理を開始してデータスナップショットをデータファイルに保存し(rdb操作を実行)、同時にマスターは変更するすべてのコマンドを記録します。データをデータファイルにキャッシュします

③バックグラウンド処理がキャッシュ操作を完了すると、マスターマシンがデータファイルをスレーブマシンに送信し、スレーブマシンがデータファイルをハードディスクに保存してメモリにロードすると、マスターマシンがデータファイルを送信します。データを変更するすべての操作を実行し、それをスレーブマシンに送信します。スレーブに障害が発生してダウンタイムが発生した場合、通常に戻った後、自動的に再接続します
。④マスターマシンがスレーブ側のマシンから接続を受信すると、完全なデータファイルをスレーブ側のマシンに送信します。Materが複数のスレーブを受信した場合同時に、要求を同期すると、マスターはバックグラウンドでプロセスを開始してデータファイルを保存し、それをすべてのスレーブ側マシンに送信して、すべてのスレーブ側マシンが正常であることを確認します。

3、Redisマスタースレーブレプリケーション

1.Redisマスタースレーブレプリケーションをビルドします

①マスターノードの構成

#ファイアウォールをオフにします

systemctl stopfirewalld

setenforce 0

#Redisをインストールする

yum install -y gcc gcc-c ++ make

cd / opt#redisの圧縮パッケージを/ optディレクトリにアップロードします

tar zxvf redis-5.0.7.ta​​r.gz

cd /opt/redis-5.0.7/

作る

PREFIX = / usr / local / redisをインストールします

cd /opt/redis-5.0.7/utils

./install_server.sh#次に、常にEnterキーを押します

いつredis実行可能パス[/ usr / loca1 / bin / redis-server]ステップを選択してください、/ usr / local / redis / bin / redis-serverと入力してください

ln -s / usr / local / redis / bin / * / usr / local / bin /#ソフト接続を作成する

#redis構成ファイルを変更する

vim /etc/redis/6379.conf
bind 0.0.0.0#70行、バインドアイテムをコメントアウトするか、0.0.0.0に変更します。デフォルトでは、すべてのネットワークカードが
デーモン化されます。#137行、デーモン
ログファイル/ var /を開きます。log /redis_6379。log#172行、ログファイルディレクトリ
dir / var / lib / redis / 6379#264行を指定し、作業ディレクトリ
appendonly yes#700行を指定し、AOF永続化機能を有効にします

/etc/init.d/redis_6379 restart#サービスを再起動します

②スレーブノードの構成を変更する

#2つのスレーブノードの構成は同じです

上記のようにredisをインストールします

#redis構成ファイルを変更する

vim /etc/redis/6379.conf
bind 0.0.0.0#70行、リスニングアドレスを0.0.0.0に変更daemonize
yes#137行、デーモン
ログファイル/var/log/redis_6379.log#172行を開き、ログを指定しますfile directory
dir / var / lib / redis / 6379#264行、
192.168.200.11 6379#287行の作業ディレクトリreplicaを指定し、コメントを
外して同期するマスターノードIPとポートを指定しますappendonly yes#700行、AOF永続化機能を有効にします

/etc/init.d/redis_6379 restart#サービスを再起動します

③主従効果を確認する

#MasterLogビュー

tail -f /var/log/redis_6379.log
ここに画像の説明を挿入

#マスターノードビュー

redis-cli -h 192.168.200.11

INFOレプリケーション
ここに画像の説明を挿入

4、Redisセンチネルモード

Sentinelのコア機能:マスタースレーブレプリケーションに基づいて、Sentinelはマスターノードの自動フェイルオーバーを導入します

1.センチネルモードの原理

これは、マスタースレーブ構造内の各サーバーを監視するために使用される分散システムです。障害が発生すると、投票メカニズムによって新しいマスターが選択され、すべてのスレーブが新しい​​マスターに接続されます。したがって、センチネルを実行しているクラスター全体の数は3ノード以上である必要があります

2.センチネルモードの役割

①監視:歩哨は、マスターノードとスレーブノードが正常に動作しているかどうかを常にチェックします

②自動フェイルオーバー:マスターノードが正常に動作できない場合、センチネルは自動フェイルオーバー操作を開始します。故障したマスターノードのスレーブノードの1つを新しいマスターノードにアップグレードし、他のスレーブノードを変更して新しいものを複製します。マスターノード

③通知:歩哨はフェイルオーバーの結果をクライアントに送信できます

3.歩哨構造の構成

①センチネルノード:センチネルシステムは1つ以上のセンチネルノードで構成されています。センチネルノードは特別なredisノードであり、データを保存しません。

②データノード:マスターノードとスレーブノードの両方がデータノードです

歩哨の開始はマスタースレーブモードに依存するため、歩哨モードを実行する前にマスタースレーブモードをインストールする必要があります。すべてのノードが歩哨モードをデプロイする必要があります。歩哨モードは、すべてのRedis作業ノードが正常かどうかを監視します。マスターが表示されたとき問題が発生した場合、他のノードがマスターノードとの接続を失ったため、投票します。投票の半分以上がこのマスターに問題があると考え、歩哨室に通知されます。次に、スレーブの1つが新しいマスターとして選択されます。
客観的であるために特別な注意が必要です。オフラインはマスターノードでのみ使用可能な概念です。スレーブノードとセンチネルノードが失敗した場合、センチネルによって主観的にオフラインになります。 、その後の客観的なオフラインおよびフェイルオーバー操作はありません
ここに画像の説明を挿入

4.センチネルモードを構成します

①歩哨モードを設定する

#すべてのノードが同じように構成されている

vim /opt/redis-5.0.7/sentinel.conf

protected-mode no#17 line、protected mode
port 26379#21 line、Redis sentinelのデフォルトリスニングポート
daemonize yes#26 line、sentinelをバックグラウンドスタートアップ
ログファイル "/var/log/sentinel.log"#36 line、ログストレージパス
ディレクトリ「/ var / lib / redis / 6379」#65行を指定し、データベースストレージパス
センチネルモニターmymaster 192.168.200.11 6379 2#84行を指定し、指定されたセンチネルノードを変更してマスターノード192.168.200.10を監視します。 6379、これはマスターノードの名前がmymasterであり、最後の2つの意味はマスターノードの障害判断に関連しています。マスターノードの障害とフェイルオーバーの
センチネルダウンを判断するには、少なくとも2つのセンチネルノードが同意する必要があります。after-milliseconds mymaster 30000#113行、判断サーバーがダウンしている期間、デフォルトは30000ミリ秒(30秒)
センチネルフェイルオーバータイムアウトmymaster 180000#146行、障害が発生したノードの最大タイムアウト時間は180000(180秒)

#構成を変更した後、scpコマンドを使用して他のサーバーに送信できます

scp /opt/redis-5.0.7/sentinel.conf [email protected]:/opt/redis-5.0.7/sentinel.conf

scp /opt/redis-5.0.7/sentinel.conf [email protected]:/opt/redis-5.0.7/sentinel.conf

②センチネルモードを開始する

#最初にマスターを起動し、次にスレーブを起動します

cd /opt/redis-5.0.7/#最初にredisディレクトリに切り替えて開始します

redis-sentinel sentinel.conf&#&はバックグラウンドスタートアップを指します
ここに画像の説明を挿入

5、Redisクラスターモード

クラスターは複数のノード(ノード)で構成され、Redisデータはこれらのノードに分散されます。クラスター内のノードは、マスターノードとスレーブノードに分けられます

マスターノードのみが読み取りおよび書き込み要求とクラスター情報の保守を担当します。スレーブノードはマスターノードのデータとステータス情報のみをコピーします。

1.クラスターの役割

①データパーティション:データパーティション(またはデータシャーディング)はクラスターのコア機能です

クラスターはデータを複数のノードに分散します。一方で、Redis単一マシンのメモリサイズの制限を突破し、ストレージ容量が大幅に増加します。他方で、各マスターノードは外部の読み取りおよび書き込みサービスを提供できます。 、クラスターの応答性が大幅に向上します

Redisスタンドアロンメモリサイズの制限は、永続性とマスタースレーブレプリケーションの導入で言及されています。たとえば、スタンドアロンメモリが大きすぎる場合、bgsaveとbgrewriteaofのフォーク操作により、メインプロセスがブロックされる可能性があります。マスタースレーブ環境でホストを切り替えると可能になる場合があります。その結果、スレーブノードは長期間サービスを提供できず、完全なレプリケーションフェーズ中にマスターノードのレプリケーションバッファーがオーバーフローする可能性があります。

②高可用性

クラスターは、マスタースレーブレプリケーションとマスターノードの自動フェイルオーバー(センチネルと同様)をサポートします。いずれかのノードに障害が発生した場合でも、クラスターは外部サービスを提供できます。

2.Redisクラスターのデータシャーディング

Redisクラスターはハッシュスロットの概念を導入しています
。Redisクラスターには16384個のハッシュスロット(番号0-16383)があり
ます。クラスター内の各ノードはハッシュスロットの一部を担当します。CRC16
チェックの後、各キーは16384の残りの部分を使用して決定します。どちらを配置するか。この値を使用して、対応するスロットに対応するノードを見つけるためにスロットを希望し、アクセス操作のために対応するノードに自動的にジャンプします。

#ノードが3つある場合、redisはハッシュスロットを3つの部分に分割します。ハッシュスロットの一部が壊れていると、クラスター全体が使用できなくなります。

3.Redisクラスターモードを構築します

①redisクラスターディレクトリを作成する

cd / etc / redis

mkdir -p redis-clusyer / redis600 {1…6}
ここに画像の説明を挿入

②ファイルをredis600ディレクトリにコピーします

{1…6}の私のために

行う

cp /opt/redis-5.0.7/redis.conf / etc / redis / redis-cluster / redis600 $ i

cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server / etc / redis / redis-cluster / redis600 $ i

完了
ここに画像の説明を挿入

③設定ファイルを変更する

cd / etc / redis / redis-cluster / redis6001#6ポートが異なります

vim redis.conf
bind 0.0.0.0#69 line、すべてのネットワークセグメントをリッスンします
protected-mode no#88
line、modify、closed mode port 6001#92 line、modify、redis listen port、daemonize
yes#136 line、as別のプロセス
クラスターの開始-有効はい#832行、コメント解除、クラスター機能の有効化
cluster-config-file nodes-6001.conf#840行、コメント解除、クラスター名ファイル設定
cluster-node-timeout 15000#846、クラスタータイムアウト時間のコメント解除
appendonly yes#700行を設定し、変更し、AOF永続性を開きます

④redisノードサービスを開始する

for d in {1…6}
do
cd / etc / redis / redis-cluster / redis600 $ d
redis-server redis.conf
done

ps -elf | grep redis#プロセスの表示
ここに画像の説明を挿入

⑤クラスターを起動します

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

#6つのインスタンスは3つのグループに分けられ、各グループには1つのマスターと1つのスレーブがあり、前面がマスターノード、背面がスレーブノードです。以下を操作して作成する場合は、yesと入力する必要があります。
-レプリカ1は、各マスターノードに1つのスレーブノードがあることを意味します
ここに画像の説明を挿入

⑥テストクラスター

redis-cli -o 6001 -c#-cノード間をジャンプ

クラスタスロット#ノードのハッシュスロット番号の範囲を表示する
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_51615030/article/details/114122248