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

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

様々なユースケースに効果的な豊富な機能を提供しており、データベース、キャッシュレイヤー、メッセージブローカー、またはキューとして使用できます。Webアプリケーション、チャットやメッセージングアプリケーション、ゲーム、リアルタイムデータ分析などに適用できます。

柔軟なデータ構造をサポートし、マスタースレーブ非同期レプリケーションを使用して読み取り性能をスケーリングし、データの損失に対して保護します。クライアント側のシャーディングを使用して書き込み性能をスケーリングし、メモリ内データをコンパクトな形式でディスクに書き込むための2つの永続性をサポートし、クラスタリングとパーティショニングを実行します。また、Redis Sentinelを介した高可用性展開のための自動フェイルオーバー、Luaスクリプティングトランザクションなどの機能も備えています。

NO SQLまたは非リレーショナルデータベースであるため、Redisは従来のデータベースシステム(MySQL/MariaDBPostgreSQLなど)よりもパフォーマンスの利点を提供します。なぜなら、すべてのデータがメモリに存在するか、またはアプリケーションから簡単にアクセスできるためであり、一方、従来のデータベースはすべてのデータをディスクに書き込むか、外部ソースから読み取る必要があるからです。

Redisはキャッシングにますます多く使用される選択肢となり、常にデータベースに問い合わせるのではなく、キャッシュされたデータ(アプリケーションのメインメモリ空間内に保存されている)を再利用することができます。したがって、アプリケーションのパフォーマンスを最終的に向上させるRDMSリレーショナルデータベース管理システム)の素晴らしいパートナーです。

この3部構成のRedisチュートリアルシリーズでは、レプリケーション、Redis SentinelRedis Clusterを使用した高可用性など、Redisの主要な機能の設定と使用方法について説明します。記事は以下の通りです:

Part 1: How To Setup Redis Replication(with Cluster-Mode Disabled) in CentOS 8

Redisレプリケーションのセットアップ方法(クラスターモード無効)をCentOS 8 Linuxで行い、Redisのインストール、マスターとレプリカの設定、およびレプリケーションのテスト方法を示します。

重要:クラスターモードが無効のRedisクラスター(すなわちレプリケーションクラスター)は単一のノードグループ(例:マスターと1つまたは2つのレプリカ)を持ちますが、クラスターモードが有効なRedisクラスターは2つ以上のノードグループ(例:各々がスレーブを持つ3つのマスターまたは2つ)から構成される場合があります。

前提条件:

  1. CentOS 8がインストールされたサーバー

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

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34
Logical Representation of Redis Replication Diagram

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

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

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

1.まず、SSHを使用してすべてのCentOS 8ノードにログインし、次に、DNFパッケージマネージャを使用してすべてのノード(マスターおよびレプリカ)にRedisパッケージをインストールします。

# dnf install @redis

2.Redisパッケージのインストールが完了したら、Redisサービスを起動し、システムの起動時に自動的に起動するように設定し、以下のように起動しているかどうかを確認します。

# systemctl start redis
# systemctl enable redis
# systemctl status redis

3.Redisサーバーが起動していることを確認するには、次のようにssコマンドを使用してリスニングポートを確認できます。

# ss -ltpn | grep redis-server
Confirm Redis Server Ports

ステップ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
Configuring Redis Master Server

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

デモンストレーション目的で、以下のオプションを使用します。

requirepass  Securep@55Here
Set Authentication Password

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

loglevel  notice
logfile  /var/log/redis/redis.log
Set Redis Log File and Log Level

9.CentOS 8ではデフォルトでsystemdがシステムおよびサービスのマネージャーですので、Redissystemd監視ツリーとやり取りするように設定するには、supervisedパラメーターをsystemdに設定します。

supervised systemd
Set Redis Supervisor to Systemd

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

# systemctl daemon-reload
# systemctl restart redis

11.Redisサーバーにアクセスするには、redis-cli(redis-serverへのコマンドラインインターフェース)を使用する必要があります。デフォルトでは、localhost127.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
Access Redis Server via Redis CLI

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

# redis-cli -h 10.42.0.21 -p 6379

13. 次に、マスターへの受信接続を許可するために、ファイアウォールでRedisサーバーデータポートを開き、その後、ファイアウォールのルールを再読み込みします。次に示すコマンドを使用します。

# 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
Connect to a Master Redis Instance

15. レプリケーション接続を永続化するには、構成ファイルで次の変更を行う必要があります。まず、元のファイルのバックアップを作成し、次に編集用に開きます。

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

16. クライアントがデータを読むためにレプリカに接続できるようにするには、レプリカのIPアドレスをbindディレクティブに追加します。

# 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
Check Redis Relocation Info on Master

23. スレーブ/レプリカでレプリケーションの状態を確認します。

# redis-cli
127.0.0.1:6379> info replication
Check Redis Replication Info on Redis Replica 1
Check Redis Replication Info on Redis Replica 2

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

マスターで、次のようにします。

# redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'www.tecmint.com'
Set Key Value in Master Instance

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

# redis-cli
127.0.0.1:6379> get domain
Check Data Sync Status on Replicas

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

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

つまり、マスターは、接続されているレプリカがN未満で、ラグがM秒以下である場合、それぞれmin-replicas-to-writeおよびmin-replicas-max-lagによって制御される秒数を指定して、書き込みを受け付けなくなります。

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

min-replicas-to-write 2
min-replicas-max-lag 10
Protecting the Redis Master Against Loss of Write

その他のオプションは、/etc/redis.confの構成ファイルの残りで見つけることができ、詳細についてはRedisのドキュメントでレプリケーションについて読んでください。

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

Source:
https://www.tecmint.com/setup-redis-replication-in-centos-8/