シンプルな Redis クラスターを構築してマスター/スレーブ レプリケーションと読み取り/書き込み分離を実現する

Redis は分散クラスター モードをサポートするだけでなく、マスター/スレーブ レプリケーション クラスターを実装することもできます。以下では、誰もがマスター スレーブ レプリケーションとセンチネル モードを理解できるように、単純なマスター スレーブ レプリケーション クラスターを段階的に構築します。

本文を始める前に、まず Baidu での時間を節約するために必要ないくつかの概念について説明します。

クラスターとは、論理全体を形成する同じコンポーネントの複数のインスタンスを指します。

マスター/スレーブ レプリケーションはデータ バックアップ ソリューションです。簡単に言うと、2 つ以上の同一のデータベースが使用され、1 つのデータベースはマスター データベースとして使用され、もう 1 つのデータベースはスレーブ データベースとして使用されます。マスター データベースで対応する操作を実行すると、スレーブ データベースはマスター データベースのすべての操作を正確に同じになるように記録します。

読み取りと書き込みを分離することは、データベースをより安定させるためのデータベースの使用方法です。
スレーブデータベースが存在する場合に使用され、マスターデータベースがデータの追加、削除、変更、つまり書き込みを行うと、クエリタスクがスレーブデータベースに引き継がれます。読み取り操作と書き込み操作を分離すると、データベースの同時負荷容量が大幅に増加します。

1.Redisをダウンロードしてインストールします

参照してください: Linux (centos7) で Redis をインストール、構成、起動し、メイクエラーの問題を解決する全プロセス

2. マスター/スレーブ レプリケーション モデル

ここに画像の説明を挿入します
スケッチを描いてみました これは、1 つのマスターと 2 つのスレーブを備えた単純なクラスター モデルであり、マスターは書き込みに使用され、スレーブはデータの読み取りに使用され、読み取りと書き込みの分離を実現します。次のステップは、このようなクラスター システムを実装することです。

3. クラスタ環境のセットアップ

このデモの構築には centos7 仮想マシンを使用しました。必要な環境は、
JDK、linux、および Redis です。

複数の redis.conf ファイルをコピーし、異なる構成ファイルを使用して Redis サーバーを起動し、複数のサービスをシミュレートします。
1. Redis サービスを開始し、次のように入力します。情報の複製現在のライブラリに関する情報を表示するコマンド
127.0.0.1:6379> info replication
# Replication
role:master              //当前库为master
connected_slaves:0       //连接当前master的从机数目为0
master_replid:7b7cb8aa6a54e4fb2b717e59d6d626578c7b7f3f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

クラスターをデプロイした後、このコマンドを使用して情報を表示できます。

2. 新しい conf ディレクトリを作成し、redis 構成ファイルを conf ディレクトリに 3 回コピーします。
[root@localhost bin]# mkdir conf
[root@localhost bin]# cp redis.conf conf/redis6380.conf
[root@localhost bin]# cp redis.conf conf/redis6381.conf
[root@localhost bin]# cp redis.conf conf/redis6382.conf

このようにして 3 つの構成ファイルを取得したので、それらにいくつかの変更を加えてみましょう。

3. ホスト構成ファイルを変更する

redis6380.conf をホスト (マスター) として構成し
、conf ディレクトリに入ります。vim redis6380.conf設定ファイルを編集する

  1. まず、設定ファイル名に対応するようにポート番号を変更する必要があります。
    ここに画像の説明を挿入します
  2. バックグラウンドで実行する場合は、忘れずに「yes」に変更してください
    ここに画像の説明を挿入します
  3. 重複を避けるために pid ファイル名を変更します。
    ここに画像の説明を挿入します
  4. 重複を避けるためにログファイル名を変更します。
    ここに画像の説明を挿入します
  5. 重複を避けるためにrdbファイル名を変更します
    ここに画像の説明を挿入します
4. スレーブ設定ファイルを変更するには、ホストの変更方法を参照してください。

ホストへの変更はすべて同じで、ポートをそれぞれ 6381 と 6382 に設定できます。ログファイルとrdbファイルも同様に変更し、名前の重複を避けてください。

構成ファイルを通じてマスター/スレーブ レプリケーションを直接構成する場合は、スレーブ構成ファイルを変更するときに構成を追加する必要があります。スレーブ 127.0.0.1 6380、ホストサーバーアドレスを指定します。
このようにして、直接スレーブとして起動しますが、このとき、以下のステップの入力スレーブは無視してください。

5. 個別に開始する

複数のコマンド ターミナルを起動して個別に開くことも、Xshell を使用して複数のタブ ページにアクセスすることもできます。
それぞれ以下のコマンドを実行します(ポート番号の変更に注意):
ここに画像の説明を挿入します
全て起動後、プロセス情報を確認し、再度確認します。ps -ef|grep redis:
ここに画像の説明を挿入します
上の図は、すべてのサービスが正常に開始され、クラスター環境がセットアップされたことを示しています。

4. マスター/スレーブ レプリケーション (slaveof) を構成する

これで各サービスに入ることができます情報の複製、3 つの Redis がホストになり、それらの間に接続がないことがわかります。手動で設定する必要があります。

  • 6381 クライアントを開いて使用します。スレーブ 127.0.0.1 6380コマンドを使用して、そのホスト アドレスを指定します。それから情報の複製その正体は奴隷機械になっていることがわかります。
    ここに画像の説明を挿入します
    同様に、6382 のホストとして 6380 を指定します。これは基本的にマスターと 2 つのスレーブの状況を形成します。この場合、6380 が共通のホストで、6381/6382 がスレーブになります。
    別のクライアントで一部のデータの読み取りと書き込みを行うと、ホストは読み取りと書き込みが可能で、スレーブは読み取りのみが可能で、データはクライアント間で共有されることがわかります。たとえば、マスターでいくつかの変数を設定し、スレーブ クライアントを使用してこれらの変数にアクセスできます。

補充する

Redis カスケード マスター/スレーブ レプリケーション

Redis は、1 つのマスターと複数のスレーブのマスター/スレーブ レプリケーションをサポートせずにはいられません。さらに、下図に示すカスケード モードもサポートします。実装モードは、前述の
ここに画像の説明を挿入します
1 つのマスターと複数のスレーブ、つまりスレーブ サービスに似ています。また、slaveof コマンド Just baby を使用して、他のマスターとして使用することもできます。

構成ファイルを使用してマスター/スレーブ レプリケーションを構成する

構成ファイルを使用してマスター/スレーブ レプリケーション サービスを構成するには、スレーブ サーバー構成ファイルに構成を追加するだけで済みます。マスター サービスは変更を行う必要はありません。構成は次のとおりです。slaveof
[host] [ port]
ここで、上記の式の host はマスターサーバーのアドレスです port はメインサーバーのポートです、例:
slaveof 127.0.0.1 6379

Redis のマスター/スレーブ レプリケーションの原則

Redis のマスター/スレーブ レプリケーションの同期プロセスは、完全同期と増分同期の 2 種類に分かれており、マスターとスレーブが接続されたばかりの場合は完全同期が実行され、完全同期が完了すると増分同期が実行されます。もちろん、必要に応じて、スレーブはいつでも完全な同期を開始できます。
では、完全同期と増分同期とは何でしょうか? 実際、平たく言えば、マスター サーバーからスレーブ サーバーにすべてのデータを同期するプロセスは完全同期です。ご想像のとおり、このプロセスには時間と労力がかかりますが、増分同期とは、スレーブ サーバーが書き込みおよび変更された最新のデータのみを同期します。メイン サーバーが書き込みコマンドを実行するたびにデータが各拡張機能に送信され、増分レプリケーションが実現されます。これは非常に高速です。
Redis の戦略では、何があっても最初に増分同期が試行され、失敗した場合はスレーブ マシンが完全同期を実行する必要があります。
以下に、完全同期と増分同期の詳細な概念を示します。

完全同期

Redis のフル コピーは通常、スレーブの初期化フェーズ中に行われ、この時点でスレーブはマスター上のすべてのデータをコピーする必要があります。具体的な手順は次のとおりです。

  • スレーブ サーバーはマスター サーバーに接続し、SYNC コマンドを送信します。
  • SYNC ネーミングを受信した後、メイン サーバーは BGSAVE コマンドの実行を開始して RDB ファイルを生成し、バッファを使用してそれ以降に実行されたすべての書き込みコマンドを記録します。
  • マスター サーバー BGSAVE が実行されると、スナップショット ファイルがすべてのスレーブ サーバーに送信され、送信期間中に実行された書き込みコマンドが記録され続けます。
  • サーバーからスナップショット ファイルを受信した後、古いデータをすべて破棄し、受信したスナップショットをロードします。
  • マスターサーバーのスナップショットが送信されると、バッファ内の書き込みコマンドのスレーブサーバーへの送信が開始されます。
  • スレーブ サーバーはスナップショットのロードを完了し、コマンド リクエストの受信を開始し、マスター サーバーのバッファから書き込みコマンドを実行します。
    ここに画像の説明を挿入します

以上の手順でスレーブサーバーからのデータの初期化が完了し、スレーブサーバーはユーザーからの読み出しリクエストを受け付けることができるようになります。

増分同期

Redis の増分レプリケーションとは、スレーブが初期化されて正常に動作し始めるときに、マスター サーバーで発生する書き込み操作がスレーブ サーバーに同期されるプロセスを指します。
インクリメンタル レプリケーションのプロセスは、主に、マスター サーバーが書き込みコマンドを実行するたびに、同じ書き込みコマンドをスレーブ サーバーに送信し、スレーブ サーバーが受信した書き込みコマンドを受信して​​実行するというものです。

注:
複数のスレーブが切断され、再起動する必要がある場合、スレーブが起動している限り、同期リクエストが送信され、ホストと完全に同期されます。複数のスレーブが同時に表示されると、マスターの急激な増加が発生する可能性があります。 IO ダウンタイム。

知識を広げる

Redis のマスター/スレーブ レプリケーションの構成は非常にシンプルで、スレーブ サーバーをマスター サーバーの完全なコピーにすることができます。Redis のマスター/スレーブ レプリケーションについては、理解する必要がある重要な点がいくつかあります。

1) Redis は非同期レプリケーションを使用します。しかし、Redis 2.8 以降では、スレーブ サーバーはレプリケーション ストリームから処理されるデータ量に定期的に応答するようになります。
2) マスター サーバーは複数のスレーブ サーバーを持つことができます。
3) スレーブ サーバーは、他のスレーブ サーバーからの接続も受け入れることができます。マスター サーバーに複数のスレーブ サーバーを接続するだけでなく、複数のスレーブ サーバーをスレーブ サーバーに接続して
グラフ状の構造を形成することもできます。
4) Redis のマスター/スレーブ レプリケーションはマスター サーバーをブロックしません。つまり、複数のスレーブ サーバーが初期同期を実行しているときでも、マスター サーバーはリクエストを処理できます。
5) マスター/スレーブ レプリケーションはスレーブ サーバー側をブロックしません。スレーブ サーバーは、初期同期を実行するときに、古いバージョンのデータを使用してクエリ要求に応答します (これが redis.conf 構成ファイルで構成されていると仮定します)。それ以外の場合は、レプリケーション ストリームが閉じられたときにクライアントにエラーを返すようにスレーブを構成できます。ただし、初期同期が完了すると、古いデータ セットを削除し、新しいデータ セットをロードする必要があり、この短期間の間、スレーブ サーバーは受信リクエストをブロックします。
6) マスター/スレーブ レプリケーションは、複数のスレーブ サーバーを使用して読み取り専用リクエストを処理することでスケーラビリティを強化するために使用できます (たとえば、大量のソート操作をスレーブ サーバーで実行できます)。また、単にデータの冗長性のために使用することもできます。
7) マスター/スレーブ レプリケーションを使用すると、マスター サーバーによるディスクへのデータ書き込みの消費を節約できます。マスター サーバーの redis.conf ファイルで「保存を避ける」を設定し (すべての「保存」コマンドをコメント アウト)、 「続行」として設定されたサーバー スレーブサーバーで「保存」をクリックするだけです。ただし、この構成では、メインサーバーが自動的に再起動しないようにする必要があります。

次の記事では、ホスト障害という特殊な状況に備えてセンチネル メカニズムを構成します。

おすすめ

転載: blog.csdn.net/weixin_41674401/article/details/109625757