Redisマスターコピーの使用と構成


じっけんかんきょう
    : 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.データ・レプリカ・データは複数のマシンに分散され、システムの信頼性が向上し、クラスタ内のどのマシンもデータに影響を与えません.2.拡張リード性能マスタスレーブレプリケーションクラスタでは、masterは一般的にリード要求を受け入れず、ライト要求のみを受け入れ、slaveは各種リード要求を処理する.したがって,クラスタの書き込み性能を大幅に拡張することができ,特に読み書きの少ないアプリケーションシーンに適している.
  • 欠点1.自動フォールトトレランスとリカバリマスターレプリケーションは自動フォールトトレランスとリカバリ機能を備えていないため、ホストスレーブのダウンタイムはフロントエンドの部分的な読み書き要求に失敗し、マシンの再起動または手動でフロントエンドのIPを切り替えるのを待つ必要がある.2.データ整合性ホストがダウンタイムし、ダウンタイム前に一部のデータがタイムリーにスレーブに同期できなかった場合、IPを切り替えた後、データの不一致の問題を導入し、システムの可用性を低下させる.3.コピーオーバーヘッドRedisの主従レプリケーションはフルレプリケーションを採用し、レプリケーション中にホストはforkがサブプロセスを出してメモリにスナップショットを作成し、サブプロセスのメモリスナップショットをファイルとして保存してスレーブに送信する.このプロセスはホストに十分な空きメモリがあることを確保する必要がある.スナップショットファイルが大きいと、クラスタのサービス能力に大きな影響を及ぼし、レプリケーションプロセスは、マシンからクラスタに新たに追加したり、マシンとホストネットワークから切り離して再接続したりするときに行われます.つまり、ネットワークの変動は、ホストとスレーブ間の完全なデータの再作成をもたらし、実際のシステム運営に大きなトラブルをもたらします.4.拡張主従レプリケーションはオンライン拡張をサポートすることが難しく、クラスタ容量が上限に達するとオンライン拡張が複雑になります.この問題を回避するために、メンテナンス担当者はシステムのオンライン化時に十分な空間を確保しなければならない.これは資源に大きな浪費をもたらしている.

  • プライマリ・スレーブ・レプリケーションの使用
    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ノードの情報を表示します.
  • master
    # 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
    
  • slave
    # 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でデータを読むことで簡単なテストを行うことができます.
  • master
    127.0.0.1:6379> set key1  test 
    OK
    
  • slave
    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