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> info
binlogs
capacity : 10000000
min_seq : 1
max_seq : 74
replication
client 127.0.0.1:55479
type : sync
status : SYNC
last_seq : 74
replication
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
是否相等.