ウェブサイト検索

CentOS 8 で Redis レプリケーションをセットアップする方法 (クラスターモードが無効) - パート 1


Redis (リモート ディクショナリ サーバー) は、非常に人気があり、広く使用されているオープン ソースの高速、分散型、効率的なインメモリ キー/値データベース/データ構造サーバーです。

これは、データベース、キャッシュ層、メッセージ ブローカー、キューなど、幅広い使用例で効果を発揮する豊富な機能セットを提供します。 Web アプリケーション、チャットおよびメッセージング アプリケーション、ゲーム、リアルタイム データ分析などに適用できます。

柔軟なデータ構造、読み取りパフォーマンスを拡張しデータ損失を防ぐためのマスター/スレーブ非同期レプリケーション、書き込みパフォーマンスを拡張するためのクライアント側シャーディング、メモリ内データをコンパクトな形式でディスクに書き込むための 2 つの形式の永続化、クラスタリング、およびパーティション分割。また、Redis SentinelLua スクリプトトランザクションなどを介した高可用性展開のための自動フェイルオーバーも備えています。

NO SQL または非リレーショナル データベースである Redis は、従来のデータベース システム (MySQL/MariaDB PostgreSQLなど)、従来のデータベースではすべてのデータをディスクまたは外部ソースに書き込むか、ディスクまたは外部ソースから読み取る必要があるのに対し、すべてのデータはメモリに常駐または保存されるため、アプリケーションから簡単にアクセスできます。

Redis はキャッシュの選択肢としてますます普及してきており、頻繁に使用されるデータについて常にデータベースにクエリを実行するのではなく、キャッシュされたデータ (アプリケーションのメイン メモリ空間内に保存されている) を再利用できるようになります。したがって、 最終的にアプリケーションのパフォーマンスを向上させるためのRDMS (リレーショナル データベース管理システム) の素晴らしい仲間です。

この 3 部構成のRedis チュートリアル シリーズでは、レプリケーション、Redis Sentinel および を使用した高可用性など、Redis の主要な機能のいくつかを設定して使用する方法について説明します。 >Redis クラスターの記事は次のとおりです。

このガイドでは、CentOS 8 Linux で Redis レプリケーション (クラスタモードが無効) をセットアップする方法 (Redis のインストール方法、マスターの構成方法など) を説明します。とレプリカを作成し、レプリケーションをテストします。

重要: クラスター モードが無効になっている Redis クラスター (レプリケーション クラスターなど) には、単一のノード グループ (例:マスターと 1 つまたは 2 つのレプリカ)、クラスター モードが有効になっている Redis クラスターは 2 つ以上のノード グループ (例: それぞれにスレーブまたは 2 つのスレーブを持つ 3 つのマスター) で構成されます。

前提条件:

  1. CentOS 8 がインストールされているサーバー

テスト環境のセットアップ

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34

上記の設定 (1 つの読み取り/書き込みプライマリ/マスター ノードと 2 つの読み取り専用レプリカ ノードがある) では、各ノードにクラスターのすべてのデータを含む単一のノード グループができます。スレーブがマスターに接続すると、完全なデータベースの初期コピーを受信し、スレーブ上に以前に存在していたデータはすべて破棄されます。

さらに、クライアントはマスターにのみ書き込むことができますが、クラスター内のどのノードからも読み取ることができます。また、マスター上で書き込みが実行されると、接続されているすべてのスレーブに伝播され、スレーブ データセットがリアルタイムで更新されます。

ステップ 1: CentOS 8 に Redis をインストールする

1. まず、SSH 経由ですべての CentOS 8 ノードにログインし、すべてのノード (マスターとレプリカ) に Redis パッケージをインストールします。 ) 示されているように、DNF パッケージ マネージャーを使用します。


dnf install @redis

2. Redis パッケージのインストールが完了したら、Redis サービスを開始し、システム起動時に毎回自動的に開始されるように有効にし、サービスが有効であるかどうかを確認します。以下のように起動して実行します。

systemctl start redis
systemctl enable redis
systemctl status redis

3. 次のように ss コマンドを使用してリスニング ポートをチェックすることによって、Redis サーバーが稼働していることを確認することもできます。

ss -ltpn | grep redis-server

ステップ 2: Redis マスターサーバーの構成

4. Redis は、自己文書化されたサンプル構成ファイルである /etc/redis.conf 構成ファイルを使用して構成されます。まず、元のファイルのバックアップを作成し、選択したコマンド ライン エディタを使用してそのファイルを開いて編集します。

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

5. デフォルトでは、Redis インスタンスは、bind ディレクティブを使用してループバック インターフェイスでの接続をリッスンして受け入れるように構成されています。レプリカと通信するには、IPv4 ループバック アドレスとその LAN IP アドレス (10.42.0.247) をリッスンするようにマスターを設定する必要があります。

bind 127.0.0.1 10.42.0.247

6. 次に、プロテクト モード パラメータを no に設定して、図に示すようにレプリカとの通信を許可します。

protected-mode no

また、Redis は、port ディレクティブを使用して設定されたポート 6379 で待機します。これは、アプリケーション API または CLI クライアントと通信するためのデータ ポートです。

port 6379

7. オプションでマスター - レプリカ 通信を保護するには、requirepass ディレクティブを使用してマスターを保護できます。コマンドを実行する前、またはレプリケーション同期プロセスを開始する前に、認証パスワードを発行してください。そうしないと、マスターはクライアント/レプリカのリクエストを拒否します (安全なパスワードを設定することを忘れないでください)。

以下のオプションをデモンストレーションの目的で使用し、それがどのように機能するかを示します。

requirepass  Securep@55Here

8. また、Redis ログは /var/log/redis/redis.log ファイルに保存されます。これは logfile ディレクティブを使用して設定されます。デフォルトのサーバー冗長レベルは通知で、ログレベルパラメータを使用して定義されます。

loglevel  notice
logfile  /var/log/redis/redis.log

9. systemdCentOS 8 のデフォルトのシステムおよびサービス マネージャーであるため、Redis と対話するように構成できます。 systemd 監視ツリーを作成するには、supervised パラメータを systemd に設定します。

supervised systemd

10. 必要な設定をすべて行ったら、ファイルを保存して閉じます。次に、Redis サービスを再起動して、新しい変更を適用します。

systemctl daemon-reload
systemctl restart redis

11. Redis サーバーにアクセスするには、redis-cli (redis-server へのコマンドライン インターフェイス) を使用する必要があります。デフォルトでは、ローカルホスト (127.0.0.1 ポート 6379) 上のサーバーに接続します。サーバーはパスワードを使用してクライアントから保護されているため、認証の前にコマンドを実行すると失敗するはずであることに注意してください。

次のスクリーンショットに示すように、auth コマンドを使用して認証パスワードを指定します。

redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> client list

12. レプリカに接続するには(次のセクションで説明するように構成した後)、-h-p を使用します。 オプションを使用して、レプリカの IP アドレス/ホスト名とポートをそれぞれ指定します (ポート 6379 がレプリカのファイアウォールで開かれている必要はありません)。

redis-cli -h 10.42.0.21 -p 6379

13. 次に、ファイアウォールで Redis サーバー データ ポートを開いてマスターへの受信接続を許可し、次に示されているように firewall-cmd コマンドを使用してファイアウォール ルールをリロードします。

firewall-cmd --zone=public --permanent --add-port=6379/tcp 
firewall-cmd --reload

ステップ 3: Redis レプリカ/スレーブ サーバーの構成

14. Redis インスタンスをオンザフライでレプリカとしてすばやく設定するには、redis-cli ユーティリティを使用して、REPLICAOF示されているコマンド。

redis-cli replicaof 10.42.0.247 6379
OR
redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379

15. レプリケーション接続を永続的にするには、構成ファイルに次の変更を加える必要があります。まず元のファイルをバックアップし、それを開いて編集します。

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

16. クライアントがレプリカに接続してデータを読み取れるようにするには、レプリカの IP アドレスをバインド ディレクティブに追加します。

replica1
bind 127.0.0.1 10.42.0.21

replica2
bind 127.0.0.1 10.42.0.34

Redis インスタンスをレプリカとして設定する

17. Redis インスタンスをレプリカとして構成するには、replicaof パラメータを使用し、マスター ノードの IP アドレス (またはホスト名) とポートを次のように設定します。価値観。

replicaof 10.42.0.247 6379

マスターに対して認証するようにレプリカを設定する

18. 次に、マスター インスタンスはパスワードを使用して保護されているため、masterauth を使用してレプリカ構成でマスターへの認証を可能にするパスワードを設定する必要があります。パラメータ。

masterauth Securep@55Here

19. さらに、レプリカがマスターとの接続を失った場合、またはレプリケーションの進行中に、レプリカはクライアント要求に応答するように設定されており、おそらく「期限切れです」 >」のデータです。ただし、最初の同期の場合は、データ セットが空である可能性があります。この動作はreplica-serve-stale-data パラメータによって制御されます。

また、Redis 2.6 のデフォルトのレプリカは読み取り専用であるため、これはreplica-read-only パラメータによって制御されます。アプリケーションのニーズに合わせて、他のレプリカ構成を調整することもできます。

20. 必要な変更をすべて加えたら、すべてのレプリカで Redis サービスを再起動します。

systemctl restart redis

21. また、ファイアウォールでポート 6379 を開いてマスターとクライアントからレプリカへの接続を許可し、ファイアウォール ルールをリロードします。

firewall-cmd --zone=public --permanenent --add-port=6379/tcp
firewall-cmd --reload

ステップ 4: マスターレプリカのレプリケーションステータスを確認する

22.マスター/レプリカレプリケーション構成が完了したら、次のようにセットアップが正常に機能しているかどうかを確認できます。

マスター上で次のコマンドを実行します。

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> info replication

23. また、次のようにレプリカ/スレーブのレプリケーション ステータスを確認します。

redis-cli
127.0.0.1:6379> info replication

23. 次に、マスター インスタンスにキーと値を設定してレプリケーションをテストし、データがレプリカに同期されているかどうかを確認しましょう。

マスター上でこれを実行します。

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'linux-console.net'

24. 次に、図に示すように、データがレプリカに同期されているかどうかを確認します。

redis-cli
127.0.0.1:6379> get domain

一部の書き込みが失われるリスクからマスター インスタンスを保護する

25. Redis には、十分なレプリカが利用できない場合にマスター インスタンスが一部の書き込みを失うリスクを指定された秒数に制限できる機能があります。

これは、接続されているレプリカの数が N 未満で、min で制御される遅延が M 秒以下の場合、マスターは書き込みの受け入れを停止できることを意味します。 -replicas-to-write オプションとmin-replicas-max-lag オプションをそれぞれ。

これらを設定するには、次のスクリーンショットに示すように、コメントを解除し、/etc/redis.conf 内のセットアップ要件に従って値を設定します。この構成は、レプリカへの最後の ping から 10 秒後にオンラインのレプリカが 2 つ未満の場合、マスターは書き込みの受け入れを停止することを意味します。

min-replicas-to-write 2
min-replicas-max-lag 10

/etc/redis.conf 構成ファイルの残りの部分にはその他のオプションがあり、詳細については Redis ドキュメントのレプリケーションについてお読みください。

次の記事では、CentOS 8 の Sentinel を使用して Redis を高可用性のためにセットアップする方法について説明します。それまではロックされた状態で、下のコメント フォームを使用してご意見やご質問を忘れずに共有してください。