この記事では、Redis のマスター/スレーブ同期機能 (マスター、スレーブ) を使用して、プログラムの読み取りと書き込みを分離し、IO ボトルネックを回避し、データの読み取りと書き込みの効率を向上させる方法を紹介します。
Redis は、複数のスレーブ サーバーを同期するための 1 つのマスター サーバーをサポートしており、同期にはパブリッシュ/サブスクライブ メカニズムが使用されます。
1 つのマスターを複数のスレーブに階層化することもでき、各スレーブはスレーブを再度同期してツリー構造に拡張できます。
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-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 *:6300Enter
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 2 の 2 は、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 json_encode はオブジェクトのプライベート属性に対するソリューションをサポートしていません
以上がRedis のマスター/スレーブ同期と読み書き分離設定の関連操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。