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:同步狀態是健康的.
判斷同步狀態
對於master, binlogs.max_seq
是指目前實例上的最新一次的寫(寫/更新/刪除)操作的序號, replication.client.last_seq
是指已發送給slave 的最新一條binlog 的序號.
#所以, 如果你想判斷主從同步是否已經同步到位(即時更新), 那麼就判斷 binlogs.max_seq
和 replication.client.last_seq
是否相等.