MySQL的半同步複製
MySQL5.5 除了支援內建的非同步複製機制,還提供了介面支援半同步複製的機制。
非同步複製的缺點:
MySQL複製預設是非同步複製,Master將事件寫入binlog,但並不知道Slave是否或何時已經接收且已處理。在非同步複製的機制的情況下,如果Master當機,事務在Master上已提交,但很可能這些事務沒有傳到任何的Slave上。假設有Master->Salve故障轉移的機制,此時Slave也可能會丟失事務。
半同步複製的概念:
i.
當Slave主機連線到Master時,能夠檢視其是否處於半同步複製的機制。
ii.
當Master上開啟半同步複製的功能時,至少應該有一個Slave開啟其功能。此時,一個執行緒在Master上提交事務將受到阻塞,直到得知一個已開啟半同步複製功能的Slave已收到此事務的所有事件,或等待超時。
iii.
當一個事務的事件都已寫入其relay-log中且已重新整理到磁碟上,Slave才會告知已收到。
iv.
如果等待超時,也就是Master沒被告知已收到,此時Master會自動轉換為非同步複製的機制。當至少一個半同步的Slave趕上了,Master與其Slave自動轉換為半同步複製的機制。
v.
半同步複製的功能要在Master,Slave都開啟,半同步複製才會起作用;否則,只開啟一邊,它依然為非同步複製。
同步,非同步,半同步複製的比較:
同步複製:Master提交事務,直到事務在所有的Slave都已提交,此時才會返回客戶端,事務執行完畢。缺點:完成一個事務可能會有很大的延遲。
非同步複製:當Slave準備好才會向Master請求binlog。缺點:不能保證一些事件都能夠被所有的Slave所接收。
半同步複製:半同步複製工作的機制處於同步和非同步之間,Master的事務提交阻塞,只要一個Slave已收到該事務的事件且已記錄。它不會等待所有的Slave都告知已收到,且它只是接收,並不用等其完全執行且提交。
半同步複製的控制變數,狀態監控變數:
控制變數
Variable Name | Variable Scope | Dynamic Variable | Type | Default | Effect Host |
rpl_semi_sync_master_enabled | Global | Yes | boolean | OFF | Master |
rpl_semi_sync_slave_enabled | Global | Yes | boolean | OFF | Slave |
rpl_semi_sync_master_timeout | Global | Yes | numeric | 10000 | Master |
解釋:
rpl_semi_sync_master_enabled是控制Master是否開啟半同步,開啟或不開啟,將其設定為ON或OFF(1or0).
rpl_semi_sync_master_timeout是控制Master等待多長時間被告知Slave已收到,也就是所謂的超時時間。
rpl_semi_sync_slave_enabled是控制Slave是否開啟半同步,開啟或不開啟,將其設定為ON或OFF(1or0)。
監控半同步複製的狀態變數(幾個常用的)
Rpl_semi_sync_master_clients:檢視有多少個開啟半同步複製的外掛的Slave
Rpl_semi_sync_master_status:檢視在Master上半同步複製是否正在執行,其值為ON時,說明Master已啟用半同步且已被告知有Slave收到;其值為OFF時,說明Master沒啟用半同步或是沒被告知,由於timeout等原因。
Rpl_semi_sync_master_no_tx:檢視有多少事務沒有用半同步複製的機制進行復制。
Rpl_semi_sync_master_yes_tx:檢視有多少事務是透過半同步複製機制成功複製。
Rpl_semi_sync_slave_status:檢視Slave上半同步複製是否正常執行,其值為ON時,說明Slave正透過半同步複製且Slave I/O正在執行;為OFF時,反之。
說明關於其它的請參閱:http://dev.mysql.com/doc/refman/5.5/en/index.html
半同步複製的安裝,配置
環境要求:
i.
MySQL5.5或以上版本
ii.
在MySQL上安裝外掛需要資料庫支援動態載入。檢查是否支援,用如下檢測:
mysql> show global variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
1 row in set (0.00 sec)
iii.半同步複製是基於複製的環境。也就是說配置半同步複製前,已有複製的環境。
安裝:
在Master上執行:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
各個Slave上執行:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
如果不清楚Plugin的目錄,用如下查詢:
mysql> show global variables like 'plugin_dir';
+---------------+----------------------------------+
| Variable_name | Value |
+---------------+----------------------------------+
| plugin_dir | /opt/usr/local/mysql/lib/plugin/ |
+---------------+----------------------------------+
檢查Plugin是否已正確安裝:
mysql> show plugins;
or
mysql> select * from information_schema.plugins;
配置:
在Master上執行:
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = N;
在Slave上執行:
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
說明:
如果在一個正在執行的Slave上開啟半同步複製的功能,必須先停止Slave I/O,將其啟用半同步後,再開啟Slave I/O.
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
如果不這樣做,Slave還是會以非同步的方式進行復制。
正如大家所知,如果不將變數的設定寫到配置檔案,下次重啟資料庫,將失效。寫入配置檔案:
Master上:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second
Slave上:
[mysqld]
rpl_semi_sync_slave_enabled=1
總結:半同步複製個人感覺是維持資料完整性,安全性的的一個策略,雖會損失一點效能,還是值得的。配置很簡單,關鍵是理解其工作機制。
mysql半同步複製機制和oracle DG的最大高可用模式有異曲同工之妙,mysql的同步機制則和 oracle DG的最大保護模式相似,mysql非同步機制和oracle DG最大效能模式相似
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29989552/viewspace-1982404/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 半同步複製MySql
- MySQL半同步複製MySql
- MySQL的非同步複製和半同步複製MySql非同步
- mysql 5.7半同步複製MySql
- 【MySQL】半同步與增強半同步複製MySql
- MySQL 8 複製(二)——半同步複製MySql
- mysql半同步複製的設定MySql
- MySQL主從複製之半同步複製MySql
- Mysql5.7半同步複製MySql
- mysql5.5中的半同步複製MySql
- MySQL 半同步複製+MMM架構MySql架構
- MySQL半同步複製--after_rollbackMySql
- mysql5.5半同步複製探究MySql
- MySQL主從複製、半同步複製和主主複製MySql
- MySQL的主從複製、半同步複製、主主複製詳解MySql
- MySQL5.7主從複製-半同步複製搭建MySql
- mysql線上建立半同步複製的從庫MySql
- MySQL主從複製、半同步複製和主主複製概述MySql
- 半同步複製報錯mysql8.0.25MySql
- MySQL半同步複製--after_commitMySqlMIT
- mysql5.5.9半同步複製功能部署MySql
- 配置mysql5.5主從複製、半同步複製、主主複製MySql
- MySQL 5.5半同步複製的配置與監控MySql
- MySQL增強(Loss-less)半同步複製MySql
- MySQL5.5半同步複製實現原理MySql
- #MySQL# mysql5.7新特性之半同步複製MySql
- MySQL5.7半同步複製報錯案例分析MySql
- MySQL 5.5 Semi-sync 半同步複製測試MySql
- MySQL(二):主從複製結構、半同步複製、雙主複製結構、利用SSL實現安全的MySQL主從複製MySql
- 主從複製、雙主複製及半同步複製、以及基於SSL的複製
- MySQL 5.5 主從複製非同步、半同步以及注意事項詳解MySql非同步
- MySQL中的半同步複製(r11筆記第65天)MySql筆記
- MySQL 5.7半同步複製after sync和after commit詳解MySqlMIT
- MySQL 8 複製(一)——非同步複製MySql非同步
- Mysql半同步複製模式說明及配置示例 - 運維小結MySql模式運維
- MySQL主從複製之非同步複製MySql非同步
- Mariadb之半同步複製叢集配置
- MySQL半同步複製資料最終一致性驗證MySql