Redisマスタースレーブレプリケーションと読み取り/書き込み分離

1つの基本原則

を開始slave nodeすると、にPSYNCコマンドが送信さmaster nodeます。

これがある場合slave node、再接続master node、それmaster nodeだけになり复制给slave部分缺少的数据、それがある場合にそうでない場合は、slave nodeマスターノードへの最初の接続は、一旦トリガされますfull resynchronization

最初にfull resynchronization、1つ,masterが開始され后台线程、コピーRDB快照文件生成され、クライアントから受信したすべてのものも含まれ写命令缓存在内存中ます。RDBファイルが生成された後、masterRDBは、发送给slave第1のスレーブによって書き込まれる本地磁盘、そして次にから本地磁盘加载到内存中次に、マスターはメモリ写命令キャッシュされたものをスレーブに送信し、スレーブもデータを同期します。

スレーブノードでマスターノードとのネットワーク障害が発生して切断された場合、スレーブノードは自動的に再接続します。再接続するスレーブノードが複数あることをマスターが検出した場合、マスターはrdb保存操作のみを開始して、データのコピーをすべてのスレーブノードに提供します。

2アップロードを再開します

redis 2.8以降、マスタースレーブレプリケーションがサポートされてい断点续传ます。マスタースレーブレプリケーションプロセス中にネットワーク接続が切断された場合接着上次复制的地方、最初からコピーする代わりにコピーを続行できます

マスタノードは、メモリ内の一般的なものとなりbacklog、マスタとスレーブ一保存され、replica offsetそしていずれかをmaster id、オフセットバックログに格納されます。マスターとスレーブ間のネットワーク接続が切断された場合、スレーブはマスターをフォローさせます上次的replica offset开始继续复制

ただし、対応するオフセットが見つからない場合は、1回実行されresynchronizationます。

3ディスクレスコピー

マスターは、ディスクをローカルにランディングする代わりに、メモリにRDBを直接作成し、それをスレーブに送信します。

repl-diskless-sync コピー

repl-diskless-sync-delay、さらに多くのスレーブが再接続するのを待つ必要があるため、コピーを開始するまで一定の時間待ちます。

4読み取りと書き込みの分離

読み取りを増やして書き込みを減らし、ユーザーのコスト削減を最大化するビジネスシナリオに対応するために、Redisは読み取りと書き込みの分離を使用して、透過的で可用性が高く、パフォーマンスが高く、柔軟性の高い読み取り/書き込み分離サービスをユーザーに提供できます。

5マスタースレーブレプリケーション

5.1リソース情報

サーバ IPアドレス
主人 192.168.51.4
slave1 192.168.51.5
slave2 192.168.51.6

5.2スレーブマシンの構成

3台のマシンすべてがredisをインストールするように構成されています。具体的なインストール情報については、ブログ投稿、Redisのインストールと構成、および一般的なコマンドを確認してください

2台のスレーブマシンの構成は同じであり、マスターマシンに追加の構成は必要ありません。

5.2.1構成ファイルを変更する

[root@localhost init.d]# cd /usr/local/redis
[root@localhost redis]# vi 6379.conf 
# replicaof <masterip> <masterport>
replicaof 192.168.51.4 6379

# masterauth <master-password>
masterauth auskat

# administrative / dangerous commands.
replica-read-only yes
  • Replicaof 192.168.51.46379マスターのIPとポート番号を構成します
  • masterauthauskatはマスターのパスワードを設定します
  • レプリカ読み取り専用はいデフォルトのスレーブノードは読み取り専用モードです

5.2.2サービスを再開する

[root@localhost redis]# /etc/init.d/redis_init_script stop
[root@localhost redis]# /etc/init.d/redis_init_script start

5.3機能テスト

5.3.1マスターの表示

[root@localhost ~]# redis-cli -a auskat
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.51.5,port=6379,state=online,offset=1774,lag=1
slave1:ip=192.168.51.6,port=6379,state=online,offset=1774,lag=1
master_replid:89019a6d7bb98860f7d727d8361e778a6cad3e92
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1774
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1774
127.0.0.1:6379> set aaa aaa

5.3.2スレーブ1を表示

[root@localhost redis]# redis-cli 
127.0.0.1:6379> auth auskat
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.51.4
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:89019a6d7bb98860f7d727d8361e778a6cad3e92
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
127.0.0.1:6379> get aaa
"aaa"
127.0.0.1:6379> set abc 123
(error) READONLY You can't write against a read only replica.

5.3.3スレーブ2を表示

[root@localhost redis]# redis-cli 
127.0.0.1:6379> auth auskat
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.51.4
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1760
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:89019a6d7bb98860f7d727d8361e778a6cad3e92
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1760
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1663
repl_backlog_histlen:98

127.0.0.1:6379> get aaa
"aaa"
127.0.0.1:6379> set abc 123
(error) READONLY You can't write against a read only replica.

6関連情報

  • ブログ投稿は簡単ではありません、注意と賞賛に一生懸命働いたすべての人、ありがとう

おすすめ

転載: blog.csdn.net/qq_15769939/article/details/113822695