天天看點

MariaDB 半同步複制

作者:powdba

鏡像下載下傳、域名解析、時間同步請點選

阿裡巴巴開源鏡像站

安裝半同步複制插件

在MariaDB 10.3.3和更高版本中,半同步複制功能内置于MariaDB伺服器中,不再由插件提供。這意味着這些版本不支援安裝插件。

半同步複制插件實際上是兩個不同的插件,一個是主插件,一個是從插件。這兩個插件的共享庫都包含在MariaDB中。盡管預設情況下插件的共享庫随MariaDB一起分發,但是預設情況下,MariaDB并未實際安裝該插件,而MariaDB 10.3.3之前。有兩種方法可用于通過MariaDB安裝插件。

第一種方法可用于安裝插件,而無需重新啟動伺服器。您可以通過執行INSTALL SONAME或INSTALL PLUGIN動态安裝插件。

例如,如果是master:

INSTALL SONAME 'semisync_master’;           

如果是slave:

INSTALL SONAME 'semisync_slave';           

第二種方法可以用來告訴伺服器在啟動時加載插件。可以通過提供--plugin-load或--plugin-load-add選項以這種方式安裝插件。可以将其指定為mysqld的指令行參數,也可以在選項檔案中的相關伺服器選項組中指定。

[mariadb]
...
plugin_load_add = semisync_master           
[mariadb]
...
plugin_load_add = semisync_slave           

解除安裝半同步複制插件

在MariaDB 10.3.3和更高版本中,半同步複制功能内置于MariaDB伺服器中,不再由插件提供。這意味着這些版本不支援解除安裝插件。

可以通過執行UNINSTALL SONAME或UNINSTALL PLUGIN動态解除安裝插件。

UNINSTALL SONAME 'semisync_master’;           
UNINSTALL SONAME 'semisync_slave';           

如果通過在選項檔案中相關伺服器選項組中提供--plugin-load或--plugin-load-add選項來安裝插件,則應删除這些選項以防止下次加載插件伺服器重新啟動。

半同步複制配置參數

半同步複制參數設定。為避免主庫高可用切換之後,需要在半同步複制的主從角色之間來回切換配置,在主庫與備主之間設定相同的半同步複制參數即可(即,同時啟用主庫端和從庫端的半同步複制插件),在my.cnf的[mysqld]标簽下添加如下參數設定

  • rpl_semi_sync_master=semisync_master.so
    • 指定半同步複制在master上使用的庫檔案名稱,不需要使用路徑,該參數為mysqld啟動參數,并非system variables,在my.cnf中不需要指定,隻需要在安裝插件庫時使用INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';語句安裝過這個庫即可。
    • 預設ON,MariaDB 10.3.3移除
  • rpl_semi_sync_slave=semisync_slave.so
    • 指定半同步複制在slave上使用的庫檔案名稱,不需要使用路徑,該參數為mysqld啟動參數,并非system variables,在my.cnf中不需要指定,隻需要在安裝插件庫時使用INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';語句安裝過這個庫即可。使用plugin_load參數在mysqld啟動時自動加載半同步複制插件,無需人工安裝(注意,該參數必須放在所有半同步複制配置參數之前,否則半同步複制相關的參數無法識别)。
  • rpl_semi_sync_master_enabled=1
    • 半同步複制插件主庫端開關參數。
    • 動态變量,預設值為OFF,布爾型值。
  • rpl_semi_sync_master_timeout=10000
    • 當參數rpl_semi_sync_master_enabled 開啟時,該參數控制主庫使用半同步複制機制把binlog發送到slave之後,等待從庫ACK接收确認包的時間,如果在這個逾時時間之内收到slave的接收确認包,則繼續使用半同步複制機制同步下一個事務的binlog到從庫,如果在這個逾時時間之内未收到任何slave的接收确認包,則主庫自動切換為異步複制。
    • 發生逾時時,Rpl_semi_sync_master_status狀态變量也将切換為OFF。
    • 全局變量,動态變量,預設為10000,表示10S(10000毫秒),整型值。
  • rpl_semi_sync_master_wait_no_slave=OFF
    • 控制在rpl_semi_sync_master_timeout 逾時周期内,如果連接配接主庫的從庫數量降到0值,主庫是否要繼續等待從庫的接收确認包。
    • 為ON值時,表示在rpl_semi_sync_master_timeout 逾時周期内,如果連接配接主庫的從庫數量降到0值,主庫仍然繼續等待從庫的接收确認包。
    • 為OFF值時,表示在rpl_semi_sync_master_timeout 逾時周期内,如果連接配接主庫的從庫數量降到0值,主庫不繼續等待從庫的接收确認包,直接切換為異步複制。
    • 全局變量,動态變量,預設值為ON,布爾型值。
  • rpl_semi_sync_master_wait_point=AFTER_SYNC
    • 此變量控制半同步複制中主庫在發起事務commit操作之後在什麼節點等待從庫接收binlog的ACK确認。
    • AFTER_SYNC(預設值):主庫将每個事務寫入二進制日志,并将二進制日志sync到磁盤。在sync binlog之後,主庫等待從庫該事務的ack确認。在收到任意一個(5.7中可以使用參數rpl_semi_sync_master_wait_for_slave_count來設定必須要接收到多少個從庫的ack确認之後才執行後續的動作,預設值為1,與5.7之前的版本相同)從庫的确認後,主人将在存儲引擎層送出事務,并将事務送出結果傳回給用戶端。
    • AFTER_COMMIT:主庫将每個事務寫入二進制日志,并sync二進制日志到磁盤,同時在存儲引擎層送出事務。主庫在存儲引擎層送出事務之後再等待從庫該事務的ACK确認。在收到從庫ACK确認後,主庫傳回結果給用戶端。
    • 全局變量,動态變量,枚舉類型,有效值為:AFTER_SYNC和AFTER_COMMIT,預設值為AFTER_SYNC,10.1.3版本引入。
  • rpl_semi_sync_slave_delay_master
    • 僅在需要确認時寫入主庫的資訊檔案。
    • 全局變量,動态變量,預設值為OFF,布爾型值。
  • rpl_semi_sync_slave_enabled=1
    • 半同步複制插件從庫端開關參數。
  • rpl_semi_sync_slave_kill_conn_timeout
    • mysql連接配接逾時,該連接配接用于終止從io_thread在master上的連接配接。執行停止slave時,此逾時起作用。
    • 全局變量,動态變量,預設值為OFF,整型值。MariaDB 10.3.3引入。
  • rpl_semi_sync_master_trace_level=32
    • 在master控制半同步複制中的debug資訊跟蹤等級,要能使用該參數的功能,則需要主庫安裝并啟用了半同步複制插件。
    • 有如下4個等級
      • 1:general 等級,如:記錄時間函數失效。
      • 16:detail 等級,記錄更加詳細的資訊。
      • 32:net wait等級,記錄包含有關網絡等待的更多資訊。
      • 64:function等級,記錄包含有關function進入和退出的更多資訊。
    • 全局變量,動态變量,預設值為32,整型。
  • rpl_semi_sync_slave_trace_level=32
    • 參考主庫的rpl_semi_sync_master_trace_level參數解釋部分。

      半同步複制關鍵狀态變量

  • Rpl_semi_sync_master_clients
    • 目前處于半同步複制狀态的從庫數量。
  • Rpl_semi_sync_master_net_avg_wait_time
    • 主庫等待從庫回複ACK确認消息的平均時間(以微秒為機關)。
  • Rpl_semi_sync_master_net_wait_time
    • 主庫等待從庫回複ACK确認消息的總時間(以微秒為機關)。
  • Rpl_semi_sync_master_net_waits
    • 主庫等待從庫回複ACK确認消息的總次數。
  • Rpl_semi_sync_master_no_times
    • 主庫端檢測半同步複制插件被關閉的次數,如果不斷增長,則說明主從之間的複制網絡可能不穩定。
  • Rpl_semi_sync_master_no_tx
    • 主庫端檢測半同步複制中從庫未成功接收 slave ACK送出的事務數量,如果持續增長或者頻繁檢測到非零值,說明半同步複制被降級為了異步複制或主從之間的複制網絡不穩定。
  • Rpl_semi_sync_master_status
    • 半同步複制目前是否在主庫上正常運作。如果正常運作,則該值為ON,否則為OFF。
  • Rpl_semi_sync_master_timefunc_failures
    • 主庫調用gettimeofday()等時間函數時發生失敗的次數。
  • Rpl_semi_sync_master_tx_avg_wait_time
    • 主庫端檢測半同步複制事務的平均ACK時間(機關為毫秒),如果該延遲逐漸增加,則說明主從之間的複制網絡可能不穩定、從庫的負載可能在持續增加導緻響應ACK變慢。
  • Rpl_semi_sync_master_tx_wait_time
    • 主庫等待事務(所有事務的ACK确認消息)的總時間(機關為微秒)。
  • Rpl_semi_sync_master_tx_waits
    • 主庫等待事務(所有事務的ACK确認消息)的總次數。
  • Rpl_semi_sync_master_wait_pos_backtraverse
    • 主庫等待的二進制坐标低于之前等待事件的事件總次數。當事務開始等待回複(ACK确認消息)的順序與其二進制日志事件的寫入順序不同時,就會發生這種情況。
  • Rpl_semi_sync_master_wait_sessions
    • 主庫等待從庫回複(ACK确認消息)的會話數量。
  • Rpl_semi_sync_master_yes_tx
    • 主庫成功接收到 slave 的 ACK的事務送出數量(主庫使用半同步複制送出的次數)。
  • Rpl_semi_sync_slave_status
    • 半同步複制目前是否在從庫上正常運作。如果插件已啟用且從I/O線程正在運作,則此狀态變量值為ON,否則為OFF。
提供全面,高效和穩定的系統鏡像、應用軟體下載下傳、域名解析和時間同步服務。”