[元]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
0.初期の場合各ノードinfoの場合(一部有用な情報):
1.正常な読み書き:
2.プライマリ・スタンバイの正常な接続の下で、デフォルトのslave(slave-read-only onは構成されていません)
slaveに書き込むとエラーが見つかりました
3.Masterフラッシュ:
Crashマスターノードを削除:
プライマリノードを再起動すると、slaveは自動的に新しい接続から確立されます.
4.Crashマスターノード、slaveデフォルト(slave-read-only onを構成しない場合)
マスターがオフになってもslave書き込みはエラーです
slaveをreadonlyに設定し、エラーを検出
slaveのslaveプロパティをオフにし、プライマリノードにアップグレードする必要があります.
プライマリノードにアップグレードした後、slaveへの書き込みを続行します.
5.マスターを再起動し、slaveをマスターにアップグレードすると、マスターはslaveから分離され、すべてプライマリノードとして存在します(この場合のプライマリノードにはデータがないことに注意してください)
6.R 2のdumpデータをR 1にコピーして再起動する:
7.R 2をR 1に新たに設定したslave(slaveデフォルト):
slaveへの書き込み:
8.slave-read-onlyプロパティをプロファイルに書き込む場合:
slaveにデータを書き込むことができますが、masterに同期しません.
9.CrashはR 1を落とし、R 2にデータを書きます(slave-read-onlyを消します):
マスターを再起動します(この時点でマスターにデータがありません):
マスターを再起動すると、slaveはマスター状態を同期し、マスターにデータがないため、slaveのデータは同時に削除されることがわかります.
まとめ(一部のテストは書かれていません): slave構成slave-read-only onは、デフォルトのslaveの場合に を直接設定することなく、プライマリノードまたはプロファイルにアップグレードする必要があります. masterとslaveが切断すると心拍数が検出され、新たに接続が確立する. 直接copy DUMPファイルからmaster を再起動できます. Masterが空になるとslave同期データは全て消去.
試験環境: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のデータは同時に削除されることがわかります.
まとめ(一部のテストは書かれていません):