ホームページ  >  記事  >  バックエンド開発  >  Redis のマスター/スレーブ同期と読み書き分離設定の関連操作

Redis のマスター/スレーブ同期と読み書き分離設定の関連操作

jacklove
jackloveオリジナル
2018-06-15 17:19:262002ブラウズ

この記事では、Redis のマスター/スレーブ同期機能 (マスター、スレーブ) を使用して、プログラムの読み取りと書き込みを分離し、IO ボトルネックを回避し、データの読み取りと書き込みの効率を向上させる方法を紹介します。

Redis は、複数のスレーブ サーバーを同期するための 1 つのマスター サーバーをサポートしており、同期にはパブリッシュ/サブスクライブ メカニズムが使用されます。
1 つのマスターを複数のスレーブに階層化することもでき、各スレーブはスレーブを再度同期してツリー構造に拡張できます。

Redis のマスター/スレーブ同期設定

Redis のデフォルトのポートは 6379 で、元の Redis に影響を与えないように、新しいポートを使用します

#。

# #master Configurationredis_master.conf

port 6300requirepass 123456masterauth 123456daemonize yes


slave1 Configurationredis_slave1.conf マスターのスレーブとして設定します

port 6301slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes


slave2 構成redis_slave2.conf スレーブ

port 6302slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes

daemonizeをマスターに設定してバックグラウンド起動を示します。
requirepass ホスト認証用のパスワード。
masterauth スレーブがホストにアクセスするためのパスワードを確認します。これは、ホストの requirepass と一致している必要があります。 後でマスター/スレーブの切り替えをデモンストレーションする必要があるため、3 セットの conf の検証パスワードは同じです。

Redis マスターとスレーブの同期テスト

マスター、スレーブ 1、スレーブ 2 を順に起動

redis-server redis_master.conf
redis-server redis_slave1.conf
redis-server redis_slave2.conf

実行後、起動が成功したかどうかを確認

ps aux|grep redis
root  1858  Ss  3:55  0:00.01 redis-server *:6302 root  1849  Ss  3:54  0:00.01 redis-server *:6301 root  1842  Ss  3:54  0:00.02 redis-server *:6300

Enter

master、キー abc の値を 123 に設定します

redis-cli -p 6300127.0.0.1:6300> auth 123456OK127.0.0.1:6300> set abc 123OK127.0.0.1:6300> get abc"123"

スレーブ 1 とスレーブ 2 をそれぞれ入力して、データが同期されているかどうかを確認します


slave1:

redis-cli -p 6301
127.0.0.1:6301> auth 123456OK127.0.0.1:6301> get abc"123"
127.0.0.1:6301>

slave2:

redis-cli -p 6302
127.0.0.1:6302> auth 123456OK127.0.0.1:6302> get abc"123"
127.0.0.1:6302>

Enter

masterキー abc の値を 456

127.0.0.1:6300> set abc 456OK127.0.0.1:6300> get abc"456"

スレーブ 1 とスレーブ 2 が同期されているかどうかを確認します


slave1:

127.0.0.1:6301> get abc"456"

slave2:

127.0.0.1:6302> get abc"456"

Redis マスター/スレーブ切り替え

操作プロセス中に、マスターに問題がある場合は、別のスレーブをセットアップできます。マシンは自動的にマスターに設定されます。ここでは主に Redis の

sentinel 関数を使用してマスター/スレーブ切り替えを実装します。

sentinel1.conf

port 26301sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile "/tmp/sentinel.log"daemonize yes

sentinel2.conf

port 26302sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile "/tmp/sentinel.log"daemonize yes

センチネル モニター マスター 127.0.0.1 6300 22 は、3 つ以上のセンチネル サービスがマスター障害を検出した場合にのみマスター/スレーブ切り替えが実行されることを示します。

2 つのセンチネル プロセスを開始します

redis-server sentinel1.conf --sentinel
redis-server sentinel2.conf --sentinel
ps aux|grep redis
root  2643  Ss  4:28 0:00.02 redis-server *:26302 [sentinel]  
root  2636  Ss  4:28 0:00.02 redis-server *:26301 [sentinel]

Redis ログが表示され、起動に成功し、監視が開始されます

Running mode=sentinel, port=26301.
Sentinel ID is 3a23343948cd7f26662ccba1d01b92955311ef52
+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300Running mode=sentinel, port=26302.
Sentinel ID is ce0ee2af6b454205a3e475763945f505a10a7d6a
+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300+sentinel sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 @ master 127.0.0.1 6300+sentinel sentinel ce0ee2af6b454205a3e475763945f505a10a7d6a 127.0.0.1 26302 @ master 127.0.0.1 6300

マスターを終了します。マスターとスレーブをテストする

kill master プロセスを切り替えた後、sentinel はマスターが無効であると判断し、マスターとスレーブの切り替え処理を実行します。

ログは次のとおりです:

+failover-state-reconf-slaves master master 127.0.0.1 6300+slave-reconf-sent slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+config-update-from sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 +switch-master master 127.0.0.1 6300 127.0.0.1 6302+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6302+slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302-odown master master 127.0.0.1 6300+slave-reconf-inprog slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave-reconf-done slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+failover-end master master 127.0.0.1 6300+switch-master master 127.0.0.1 6300 127.0.0.1 6302+convert-to-slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302

ログからわかるように、マスター/スレーブ スイッチは次の操作を実行しました:

1スイッチ

slave2 新しいマスター の場合、redis_slave2.conf の 127.0.0.1 6300 のスレーブが自動的に削除されます。

2. redis_slave1.conf のslaveof 127.0.0.1 6300をslaveof 127.0.0.1 6302に自動的に更新し、slave2を新しいマスターとして使用します。

3.

元のマスターは再起動後、スレーブとして使用されます、slaveof 127.0.0.1 6302 が redis_master.conf に自動的に追加されます。


元のマスターを再起動した後、マスターとスレーブの同期テストを実行します。

元のマスターキー abc を 888 に更新します。スレーブなので更新に失敗しました。

127.0.0.1:6300> set abc 888(error) READONLY You can't write against a read only slave.

slave2 キー abc を 888 に更新します

127.0.0.1:6302> set abc 888OK127.0.0.1:6302> get abc"888"

元のマスター、スレーブ 1 は同期されているかどうかを確認します

元のマスター

127.0.0.1:6300> get abc"888"

slave1

127.0.0.1:6301> get abc"888"

検査の結果、マスター/スレーブの切り替え後、slave2 が新しいマスターとして機能し、他のサーバーがスレーブとして機能し、正常に使用できます。

この記事では、Redis のマスター/スレーブ同期と読み取り/書き込み分離設定の関連操作について説明します。さらに関連する内容については、PHP 中国語 Web サイトを参照してください。

関連提案:

mysqlでテーブルパーティションを再構築してデータを保持する方法のご紹介

PHPで独自のRequestIDクラスを生成する関連内容

# #php json_encode はオブジェクトのプライベート属性に対するソリューションをサポートしていません

以上がRedis のマスター/スレーブ同期と読み書き分離設定の関連操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。