SSDB 主從同步和複製的設定與監控


設定

對於舊版, 你必須透過 slaveof.ip 指定master 的IP 位址, 但對於新版本(1.9 .2+), 你可以透過 slaveof.host 指定master 的主機名稱(網域).

主-從

#server 1

replication:
    slaveof:

#server 2

replication:
    slaveof:        id: svc_1
    # sync|mirror, default is sync    type: sync    # use ip for older version    #ip: 127.0.0.1    # use host since 1.9.2
    host: localhost
    port: 8888


主-主

#server 1

replication:
    slaveof:        id: svc_2
    # sync|mirror, default is sync    type: mirror    # use ip for older version    #ip: 127.0.0.1    # use host since 1.9.2
    host: localhost
    port: 8889


server 2

replication:
    slaveof:        id: svc_1
    # sync|mirror, default is sync    type: mirror    # use ip for older version    #ip: 127.0.0.1    # use host since 1.9.2
    host: localhost
    port: 8888


多主

在一組一共包含n 個實例的SSDB 實例群中, 每一個實例必須slaveof 其餘的n-1 實例.

replication:
    slaveof:        id: svc_1
    # sync|mirror, default is sync    type: mirror    # use ip for older version    #ip: 127.0.0.1    # use host since 1.9.2
    host: localhost
    port: 8888
slaveof:
    id: svc_2    # sync|mirror, default is sync    type: mirror    # use ip for older version    #ip: 127.0.0.1    # use host since 1.9.2
    host: localhost
    port: 8889# ... more slaveof


監控同步狀態

info 指令傳回的資訊

ssdb 127.0.0.1:8899> infobinlogs    capacity : 10000000    min_seq  : 1    max_seq  : 74replication    client 127.0.0.1:55479        type     : sync        status   : SYNC        last_seq : 74replication    slaveof 127.0.0.1:8888        id         : svc_2        type       : sync        status     : SYNC        last_seq   : 10023        copy_count : 0        sync_count : 44

binlogs

目前實例的寫入操作狀態.

  • capacity: binlog 佇列的最大長度
  • min_seq: 目前佇列中的最小binlog 序號
  • max_seq: 目前佇列中的最大binlog 序號

#replication

#

可以有多條 replication 記錄. 每一則表示一個連接進來的slave(client), 或一個目前伺服器所連接的master(slaveof ).

  • slaveof|client host:port, 遠端master/slave 的host:port.
  • type: 類型, sync|mirror.
  • status: 目前同步狀態, DISCONNECTED|INIT|OUT_OF_SYNC|COPY|SYNC.
  • last_seq: 上一條發送或收到的binlog 的序號.
  • slaveof.id: master 的id(這是從slave's 角度來看的, 你永遠不需要在master 上配置它自己的id).
  • slaveof.copy_count: 在全量同步時, 已經複製的key 的數量.
  • slaveof.sync_count: 發送或收到的binlog 的數量.

關於status:

  • DISCONNECTED: 與master 斷開了連接, 一般是網路中斷.
  • INIT: 初始化狀態.
  • OUT_OF_SYNC: 由於短時間內在master 有大量寫入操作, 導致binlog 佇列淘汰, slave 遺失同步點, 只好重新複製全部的資料.
  • COPY: 正在複製基準資料的過程中, 新的寫入操作可能無法及時地同步.
  • #SYNC:同步狀態是健康的.

判斷同步狀態

對於masterbinlogs.max_seq 是指目前實例上的最新一次的寫(寫/更新/刪除)操作的序號, replication.client.last_seq 是指已發送給slave 的最新一條binlog 的序號.

#所以, 如果你想判斷主從同步是否已經同步到位(即時更新), 那麼就判斷 binlogs.max_seq 和 replication.client.last_seq 是否相等.