Redisマスターコピーの使用と構成
じっけんかんきょう
単一ノードredisの問題点
1.単一障害
単一ノードredisが異常に終了すると、このシステムのサービスが使用できなくなり、いわゆる「単一障害」が発生します.
2.容量ボトルネック
redisはkey-valueベースのメモリデータベースであり、単一ノードの物理メモリには上限があるため、単一ノードの容量が最大物理メモリより大きくなることはありません.
3.パフォーマンスのボトルネック
単一ノードredisの性能にはボトルネックがあり,大量の同時アプリケーションシーンには対応できない.
以上の問題を解決するためにredisはクラスタソリューションを提供した.今日はredisプライマリ・セカンダリ・レプリケーション・テクノロジーについて説明します.
マスターコピー
redisのレプリケーション機能は、複数のデータベース間のデータ同期をサポートすることです.1つはプライマリ・データベース(master)です.1つはデータベース(slave)から、プライマリ・データベースは読み書き操作を行うことができます.書き込み操作が発生したときに自動的にデータをデータベースから同期します.データベースからは一般的に読み取り専用で、プライマリ・データベースから同期したデータを受信します.1つのプライマリ・データベースには複数のスレーブ・データベースがあります.一方、スレーブ・データベースにはプライマリ・データベースが1つしかありません.
masterとslaveのデータストリームは一方向で、masterからslaveまでしかできません.の利点1.データ・レプリカ・データは複数のマシンに分散され、システムの信頼性が向上し、クラスタ内のどのマシンもデータに影響を与えません.2.拡張リード性能マスタスレーブレプリケーションクラスタでは、masterは一般的にリード要求を受け入れず、ライト要求のみを受け入れ、slaveは各種リード要求を処理する.したがって,クラスタの書き込み性能を大幅に拡張することができ,特に読み書きの少ないアプリケーションシーンに適している. 欠点1.自動フォールトトレランスとリカバリマスターレプリケーションは自動フォールトトレランスとリカバリ機能を備えていないため、ホストスレーブのダウンタイムはフロントエンドの部分的な読み書き要求に失敗し、マシンの再起動または手動でフロントエンドのIPを切り替えるのを待つ必要がある.2.データ整合性ホストがダウンタイムし、ダウンタイム前に一部のデータがタイムリーにスレーブに同期できなかった場合、IPを切り替えた後、データの不一致の問題を導入し、システムの可用性を低下させる.3.コピーオーバーヘッドRedisの主従レプリケーションはフルレプリケーションを採用し、レプリケーション中にホストはforkがサブプロセスを出してメモリにスナップショットを作成し、サブプロセスのメモリスナップショットをファイルとして保存してスレーブに送信する.このプロセスはホストに十分な空きメモリがあることを確保する必要がある.スナップショットファイルが大きいと、クラスタのサービス能力に大きな影響を及ぼし、レプリケーションプロセスは、マシンからクラスタに新たに追加したり、マシンとホストネットワークから切り離して再接続したりするときに行われます.つまり、ネットワークの変動は、ホストとスレーブ間の完全なデータの再作成をもたらし、実際のシステム運営に大きなトラブルをもたらします.4.拡張主従レプリケーションはオンライン拡張をサポートすることが難しく、クラスタ容量が上限に達するとオンライン拡張が複雑になります.この問題を回避するために、メンテナンス担当者はシステムのオンライン化時に十分な空間を確保しなければならない.これは資源に大きな浪費をもたらしている.
プライマリ・スレーブ・レプリケーションの使用
1.構成
redisマスターの一般的な構成項目:
slaveノードredis構成のslaveofプロパティを変更すればよい
マスターノードとslaveノードを起動し、マスターとslaveノードの情報を表示します. master slave
完了後、masterでデータを書き、slaveでデータを読むことで簡単なテストを行うことができます. master slave
2.コマンド
redis-cliでスレーブノードサーバに接続し、次のコマンドを実行します.
このコマンドslaveでmasterと主従関係を確立したり、slaveeofコマンドで主従関係をキャンセルしたりすることができます.
: ubuntu-16.04-x64
master: 192.168.0.101
slave: 192.168.0.120
redis :4.0.9
単一ノードredisの問題点
1.単一障害
単一ノードredisが異常に終了すると、このシステムのサービスが使用できなくなり、いわゆる「単一障害」が発生します.
2.容量ボトルネック
redisはkey-valueベースのメモリデータベースであり、単一ノードの物理メモリには上限があるため、単一ノードの容量が最大物理メモリより大きくなることはありません.
3.パフォーマンスのボトルネック
単一ノードredisの性能にはボトルネックがあり,大量の同時アプリケーションシーンには対応できない.
以上の問題を解決するためにredisはクラスタソリューションを提供した.今日はredisプライマリ・セカンダリ・レプリケーション・テクノロジーについて説明します.
マスターコピー
redisのレプリケーション機能は、複数のデータベース間のデータ同期をサポートすることです.1つはプライマリ・データベース(master)です.1つはデータベース(slave)から、プライマリ・データベースは読み書き操作を行うことができます.書き込み操作が発生したときに自動的にデータをデータベースから同期します.データベースからは一般的に読み取り専用で、プライマリ・データベースから同期したデータを受信します.1つのプライマリ・データベースには複数のスレーブ・データベースがあります.一方、スレーブ・データベースにはプライマリ・データベースが1つしかありません.
masterとslaveのデータストリームは一方向で、masterからslaveまでしかできません.
プライマリ・スレーブ・レプリケーションの使用
1.構成
redisマスターの一般的な構成項目:
slaveof # master ip
masterauth # master
slave-read-only yes #slave
repl-diskless-sync no ##slave-serve-stale-data yes # salve mater , , : slave-serve-stale-data yes,slave client 。 。 slave-serve-stale-data no,slave error“sync with master in progress”。
repl-diskless-sync-delay 5 # , 。 slave
repl-ping-slave-period 10 #slaves ping server。 repl_ping_slave_period 。 10 。 。
repl-timeout 60 # repl_ping_slave_period 。
repl-disable-tcp-nodelay no
repl-backlog-size 1mb #slave master
repl-backlog-ttl 3600 #slave 3600 , 。
slave-priority 100 , 100, , , 。
min-slaves-to-write 3 #
min-slaves-max-lag 10 #
slave-announce-ip 5.5.5.5
slave-announce-port 1234
slaveノードredis構成のslaveofプロパティを変更すればよい
# , redis ,master
bind 0.0.0.0
protected-mode no
# slaveof
slaveof 192.168.0.101 6379
マスターノードとslaveノードを起動し、マスターとslaveノードの情報を表示します.
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.0.120,port=6379,state=online,offset=450,lag=0
master_replid:98964946bd40954a2edc52c72df20ad69ebfac9b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:450
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:450
# Replication
role:slave
master_host:192.168.0.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:520
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:98964946bd40954a2edc52c72df20ad69ebfac9b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:520
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:520
完了後、masterでデータを書き、slaveでデータを読むことで簡単なテストを行うことができます.
127.0.0.1:6379> set key1 test
OK
127.0.0.1:6379> get key1
"test"
2.コマンド
redis-cliでスレーブノードサーバに接続し、次のコマンドを実行します.
127.0.0.1:6379> SLAVEOF 192.168.0.101 6379
このコマンドslaveでmasterと主従関係を確立したり、slaveeofコマンドで主従関係をキャンセルしたりすることができます.
127.0.0.1:6379> SLAVEOF no one