官术网_书友最值得收藏!

  • MySQL高可用實踐
  • 王雪迎
  • 1526字
  • 2021-03-26 23:06:32

2.5 配置半同步復制

上一章中我們配置了“一主兩從”的MySQL異步復制,下面在相同環境下配置半同步復制。

2.5.1 安裝插件

半同步復制是使用插件實現的,因此必須將插件安裝到MySQL服務器中才能使用它們。安裝插件后,可通過與之關聯的系統變量來控制它。要使用半同步復制,必須滿足以下要求:

  • 安裝插件需要MySQL服務器支持動態加載。要驗證這一點,檢查have_dynamic_loading系統變量的值是否為YES。MySQL 8默認為YES。
  • 已經啟動了異步復制。
  • 半同步不支持多源復制(“一從多主”的情況)。

安裝設置半同步復制,需要REPLICATION_SLAVE_ADMIN或SUPER權限。MySQL發行版包括主、從端的半同步復制插件文件semisync_master.so和semisync_slave.so,默認位于MySQL安裝目錄下的lib/plugin目錄下,本例中為/usr/local/mysql/lib/plugin。也可以通過設置plugin_dir系統變量的值指定插件目錄位置。

執行下面的SQL語句加載插件:

     -- 在主庫
     install plugin rpl_semi_sync_master soname 'semisync_master.so';
     -- 在每個從庫
     install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

如果安裝插件時Linux上出現類似于下面所示的錯誤,則必須安裝libimf:

     mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
     ERROR 1126 (HY000): Can't open shared library
     '/usr/local/mysql/lib/plugin/semisync_master.so'
     (errno: 22 libimf.so: cannot open shared object file: No such file or directory)

可以通過網址https://dev.mysql.com/downloads/os-linux.html獲取libimf。檢查INFORMATION_SCHEMA.PLUGINS表或使用SHOW PLUGINS語句驗證插件安裝,例如:

檢查相關系統變量的初始值:

主庫的相關系統變量:

  • rpl_semi_sync_master_enabled:主庫是否啟用了半同步復制,默認為OFF。
  • rpl_semi_sync_master_timeout:等待從庫的ACK回復的超時時間,默認為10秒。
  • rpl_semi_sync_master_trace_level:半同步復制時主庫的調試級別。
  • rpl_semi_sync_master_wait_for_slave_count:主庫在超時時間內需要收到多少個ACK回復才認為此次提交成功,否則就降級為異步復制。該變量在MySQL 5.7.3版本才提供,在此之前的版本都默認為收到1個ACK則確認成功,且不可更改。MySQL 5.7.3之后該變量的默認值也是1。
  • rpl_semi_sync_master_wait_no_slave:默認值為ON,當狀態變量Rpl_semi_sync_master_clients中的值小于rpl_semi_sync_master_wait_for_slave_count時,Rpl_semi_sync_master_status依舊為ON,只有當事務提交后等待rpl_semi_sync_master_timeout超時后,Rpl_semi_sync_master_status才會變為OFF,即降級為異步復制;為OFF時,當狀態變量Rpl_semi_sync_master_clients中的值小于rpl_semi_sync_master_wait_for_slave_count時,Rpl_semi_sync_master_status立即顯示為OFF,即立即降級為異步復制。
  • rpl_semi_sync_master_wait_point:控制主庫上commit、接收ACK、返回消息給客戶端的時間點。值為AFTER_SYNC或AFTER_COMMIT。該選項是MySQL 5.7.2版本才引入的,默認值為AFTER_SYNC。此版本之前,等價于使用了AFTER_COMMIT模式。

從庫的相關系統變量:

  • rpl_semi_sync_slave_enabled:從庫是否開啟半同步復制。
  • rpl_semi_sync_slave_trace_level:從庫的調試級別。

2.5.2 啟用半同步復制

安裝半同步復制插件后,默認情況下會禁用它。必須在主庫和從庫都啟用插件才能使用半同步復制。如果僅啟用一側,則復制將是異步的。

1. 啟用半同步復制

以上的啟動方式是在命令行執行的,也可寫在配置文件中:

在有的高可用架構下,master和slave需同時啟動,以便在切換后能繼續使用半同步復制:

2. 重啟從庫上的I/O線程
     stop slave io_thread;
     start slave io_thread;

如果沒有重啟,則默認還是異步復制。重啟后,從庫會在主庫上注冊為啟用半同步復制的從庫角色。

3. 查看半同步是否在運行

這兩個變量常用來監控主從庫是否運行在半同步復制模式下。至此,MySQL半同步復制搭建完畢。

2.5.3 監控半同步復制

半同步復制功能的插件公開了幾個狀態變量,可以檢查這些變量以確定其操作狀態,它們僅當安裝了半同步復制插件以后才可用。

從庫上只有一個半同步復制相關的狀態變量Rpl_semi_sync_slave_status,為ON時表示從庫使用半同步復制,OFF表示從庫使用異步復制。

主庫有14個半同步復制相關的狀態變量:

  • Rpl_semi_sync_master_clients:當前連接了多少個半同步從庫。
  • Rpl_semi_sync_master_net_avg_wait_time:主庫等待從庫回復的平均時間,以微秒為單位。此變量始終為0,不推薦使用,并且將在以后的版本中刪除。
  • Rpl_semi_sync_master_net_wait_time:主庫等待從庫回復的總時間,以微秒為單位。此變量始終為0,不推薦使用,并且將在以后的版本中刪除。
  • Rpl_semi_sync_master_net_waits:主庫等待從庫回復的總次數。
  • Rpl_semi_sync_master_no_times:主庫關閉半同步復制的次數。
  • Rpl_semi_sync_master_no_tx:從庫未成功確認的事務數。
  • Rpl_semi_sync_master_status:為ON時表示主庫使用半同步復制,為OFF時表示主庫使用異步復制。
  • Rpl_semi_sync_master_timefunc_failures:調用gettimeofday等時間函數時主庫失敗的次數。
  • Rpl_semi_sync_master_tx_avg_wait_time:主庫等待一個事務的平均時間,以微秒為單位。
  • Rpl_semi_sync_master_tx_wait_time:主庫等待事務的總時間,以微秒為單位。
  • Rpl_semi_sync_master_tx_waits:主庫等待事務的總次數。
  • Rpl_semi_sync_master_wait_pos_backtraverse:主庫等待事件的二進制日志次數低于之前等待事件的總次數。當事務等待回復的順序與其二進制日志事件的寫入順序不同時,就會發生這種情況。
  • Rpl_semi_sync_master_wait_sessions:當前等待從庫回復的會話數。
  • Rpl_semi_sync_master_yes_tx:從庫成功確認的事務數。
主站蜘蛛池模板: 达尔| 吴旗县| 广德县| 勐海县| 改则县| 固阳县| 哈密市| 威宁| 静安区| 磐石市| 墨竹工卡县| 铁岭县| 怀宁县| 宣恩县| 高安市| 永康市| 同德县| 衡阳县| 丹东市| 武定县| 介休市| 应城市| 安达市| 黔西| 阳泉市| 牡丹江市| 洛浦县| 晋中市| 庆安县| 墨竹工卡县| 磐安县| 赣榆县| 兰溪市| 教育| 岳西县| 大安市| 双鸭山市| 扶沟县| 湛江市| 巴马| 沙田区|