mysql的半同步機制介紹

    mysql主從備份之間存在同步,半同步與異步的方式,對於同步與異步相對而言比較好理解,但是同步存在延遲比較大,效率不高,異步又不能百分百保證數據的一致性。而半同步方式正好是兩者的兼容。

    mysql半同步模式是在mysql5.5版本以後增加的,所謂半同步指當master事物提交後,等待slave接收日誌後才返回給應用層表示成功,事物足夠小,延遲較小的話,通過半同步的模式,犧牲較小的性能就能保證數據不丟失。

    但是半同步的方式也存在着缺陷,完成單條事物增加了額外的開銷,同時延遲的大小也取決於網絡的好壞。

    採用半同步的方式,當slave down機時,master在一次等待超時時,會關閉半同步的特性,切換到異步的方式。master down機後,可能存在一些事務已經在主庫Commit,但是還沒有傳給任何slave,這類事務被稱爲"牆頭事務",“牆頭事務”都是沒有返回給slave的,所以發起事務的應用層並不知道這個事務是否已經完成。這時,如果應用層不做切換,只是等down機的master恢復後,繼續在master進行操作,客戶端會發現前面的"牆頭事務"都已經完成,可以繼續進行後續的業務處理;另一種情況,如果應用層Failover到slave上,應用層會發現前面的“牆頭事務”都沒有成功,則需要重新做這些事務,然後繼續進行後續的業務處理。

    對於slave可以有多個,任何一個slave接收完成日誌後,master就可以返回給應用層了,網絡傳輸在併發線程較多時,一次可能傳輸很多日誌,事務的平均延遲會降低。"牆頭事務"在牆頭上的時候,是可以被讀取的,但是這些事務在上面Failover的場景下,是被認爲沒有完成的。


     (以上內容是跟同事討論時查資料的一點小結,相關理解來自於查找資料)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章