天天看點

OB有問必答 | OceanBase主備怎麼同步?是強一緻嗎?

ORACLE的Dataguard架構裡主備是靠同步Redo日志或歸檔日志,同步的粒度是執行個體級别。OceanBase叢集裡機器通常沒有主備之說,資料同步是發生在每個分區的主副本到備副本之間的。不同分區的主備同步是獨立進行的。同一個分區(資料)的主副本位置不是固定的(但受政策控制),隻會出現在其中一個Zone的其中一台機器上,但是不同分區的主副本是可以位于不同Zone或者不同機器上。

假設叢集總共隻有三台機器(節點),有三個分區,每個分區有三個副本。很顯然每個機器上都有每個分區的副本。但是三個分區的主副本的位置并不固定。它們可以都在其中一台機器上,這就跟傳統dataguard架構很像,純粹的一主兩備;它們也可以在三台機器上。每個分區的主副本都要把clog同步給自己的備副本,三台機器之間都會有資料同步流。這點不同于ORACLE的dataguard架構,也不同于MySQL的Master-Master雙向同步。

主副本跟備副本之間的同步協定不是異步同步,也不是全同步,而是Paxos協定。分區的所有副本(包括主副本自身)會在clog落盤成功後發起投票,當多數派副本都表決clog落盤成功後,業務事務在主副本送出傳回。這樣一個機制保證以後如果任何一個成員副本出現故障時,都能從多數派副本中找到完整的clog并應用在新的主副本上,進而保證資料跟故障前完全一緻。