[元]Redisマスターコピーのさまざまな環境でのテスト

3838 ワード

Redisマスターは、さまざまな環境でテストをコピーします.
試験環境:Linux ubuntu 3.11.0-12-generic 2 GB Mem 1 core of Intel(R)Core(TM)i 5-3470 [email protected] GHz Redis 2.6.13以下R 1はmaster、R 2はslave配置は運行メンテナンスグループ標準配置を採用し、デフォルト主従配置は同様にノード起動後にslave
R1: 127.0.0.1 6378
R2: 127.0.0.1 6379 

0.初期の場合各ノードinfoの場合(一部有用な情報):
MASTER ->
 'connected_slaves': 1,            #   slave    
SLAVE  ->
 'master_host': '127.0.0.1',
 'master_last_io_seconds_ago': 5,
 'master_link_status': 'up',       #   master slave    
 'master_port': 6378

1.正常な読み書き:
In [32]: r1.set('key', 'value')
Out[32]: True

In [34]: r2.get('key')
Out[34]: 'value'

2.プライマリ・スタンバイの正常な接続の下で、デフォルトのslave(slave-read-only onは構成されていません)
slaveに書き込むとエラーが見つかりました
In [35]: r2.set('key2', 'value')
ReadOnlyError: You can't write against a read only slave

3.Masterフラッシュ:
Crashマスターノードを削除:
'master_host': '127.0.0.1',
'master_last_io_seconds_ago': -1,
'master_link_down_since_seconds': 4,
'master_link_status': 'down',
'master_port': 6378

プライマリノードを再起動すると、slaveは自動的に新しい接続から確立されます.
'master_host': '127.0.0.1',
'master_last_io_seconds_ago': 9,
'master_link_status': 'up',
'master_port': 6378,

4.Crashマスターノード、slaveデフォルト(slave-read-only onを構成しない場合)
マスターがオフになってもslave書き込みはエラーです
SLAVE ->
    'master_host': '127.0.0.1',
    'master_last_io_seconds_ago': -1,
    'master_link_down_since_seconds': 6,
    'master_link_status': 'down',
    'master_port': 6378
    
In [37]: r2.set('key', 'value')
ReadOnlyError: You can't write against a read only slave.

slaveをreadonlyに設定し、エラーを検出
zb@ubuntu:~/codes/test$ redis-cli -h 127.0.0.1 -p 6379 set slave-read-only no
(error) READONLY You can't write against a read only slave.

slaveのslaveプロパティをオフにし、プライマリノードにアップグレードする必要があります.
zb@ubuntu:~/codes/test$ redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE
OK
zb@ubuntu:~/codes/test$ redis-cli -h 127.0.0.1 -p 6379 set slave-read-only no
OK

プライマリノードにアップグレードした後、slaveへの書き込みを続行します.
In [38]: r2.set('key', 'value')
Out[38]: True

5.マスターを再起動し、slaveをマスターにアップグレードすると、マスターはslaveから分離され、すべてプライマリノードとして存在します(この場合のプライマリノードにはデータがないことに注意してください)
In [41]: r1.get('key')

In [42]: 

6.R 2のdumpデータをR 1にコピーして再起動する:
In [43]: r1.get('key')
Out[43]: 'value'

7.R 2をR 1に新たに設定したslave(slaveデフォルト):
slaveへの書き込み:
In [45]: r2.set('key2', 'value')
ReadOnlyError: You can't write against a read only slave.

8.slave-read-onlyプロパティをプロファイルに書き込む場合:
slaveにデータを書き込むことができますが、masterに同期しません.
In [50]: r2.set('key2', 'value')
Out[50]: True

9.CrashはR 1を落とし、R 2にデータを書きます(slave-read-onlyを消します):
SLAVE ->
    'master_link_status': 'down'

In [75]: r2.set('key2', 'value')
Out[75]: True

マスターを再起動します(この時点でマスターにデータがありません):
In [85]: r2.get('key2')

In [86]: r2.get('key3')

マスターを再起動すると、slaveはマスター状態を同期し、マスターにデータがないため、slaveのデータは同時に削除されることがわかります.
まとめ(一部のテストは書かれていません):
  • slave構成slave-read-only onは、デフォルトのslaveの場合に
  • を直接設定することなく、プライマリノードまたはプロファイルにアップグレードする必要があります.
  • masterとslaveが切断すると心拍数が検出され、新たに接続が確立する.
  • 直接copy DUMPファイルからmaster
  • を再起動できます.
  • Masterが空になるとslave同期データは全て消去.