mysql 半同步複製(semi_sync_replication)搭建及使用
阿新 • • 發佈:2019-01-23
google為mysql開發了一個補丁一個基於半同步的補丁,應用與mysql5.0。回來mysql打上了該補丁,並在5.5版本中使用。半同步複製的理念是什麼呢?在資料庫更改操作執行前,確保更改操作至少被寫入一臺slave磁碟中,意味著著對於每一個連線,最多隻有一個事務會由於master崩潰丟失。主要是保證資料完整性,防止事務的丟失。
半同步配置
前提主從複製環境已搭建好(省略)
master操作
安裝外掛
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.21 sec)
mysql> show variables like 'rpl_%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_recovery_rank | 0 |
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
5 rows in set (0.00 sec)
設定變數,啟用半同步複製
mysql> set global rpl_semi_sync_master_enabled=on ;
Query OK, 0 rows affected (0.02 sec)
slave 操作
安裝外掛
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.06 sec)
mysql> show variables like 'rpl_semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | OFF |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.00 sec)
啟用半同步複製
mysql> set global rpl_semi_sync_slave_enabled=on ;
Query OK, 0 rows affected (0.00 sec)
rpl_semi_sync_master_enabled和rpl_semi_sync_slave_enabled也可以配置在master和slave的配置檔案中,這樣伺服器重啟也生效。
這樣一個半同步複製就配置完成。配置完slave,我們需要考慮如下兩個問題
1 如果所有slave崩潰怎麼辦?這時將沒有slave通知master,事務已寫入中繼日誌中。
2 如果所有的slave斷開怎麼辦?在這種情況下,沒有slave通知master處於安全考慮而傳送事務。
還有兩個引數解決以上情況
rpl_semi_sync_master_timeout=milliseconds
防止半同步複製在沒有收到確認的情況下,傳送堵塞可以使用rpl-semi-sync-mastertimeout=milliseconds選項設定計數器。master在超時之前沒有收到確認,將恢復到非同步複製,繼續執行半同步沒有進行的操作
通過 set global rep-semi-sync-master-timeout=milliseconds 設定。需要注意的是作為伺服器變數,伺服器重啟此值不被儲存
rpl-semi-sync-master-wait-no-slave=on/off
如果一個事務被提交,而master沒有slave連線,這時slave不可能將事務傳送到其他地方儲存,預設情況下,master會在時間限制範圍內急性等待slave的,並確認該事務被正確寫入磁碟上。此種情況下,master還是會恢復到非同步複製。
如何監控半同步複製
安裝的外掛提供了大量狀態變數,可以利用這些狀態變數監控半同步複製,簡紹一些最有用的變數,其他變數,可以查詢線上手冊(http://dev.mysql.com/doc/refman/5.5/en/replication-semisync-interface.html)
rpl_semi_sync_master-clients
此狀態變數報告了支援和主從半同步複製已連線的slave數量
rpl_semi_sync_master_status
master的半同步複製狀態 1是活動狀態,0是非活動狀態。要麼是沒有被啟用,或是因為已恢復到非同步複製
使用show status命令或通過information_schema模式下的global_status來查詢這些狀態變數。
mysql> show status like 'rpl_semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
使用半同步複製,效能也許會受到影響,主要原則是來保證資料完整性,在這裡完整性才是最重要的。
半同步配置
前提主從複製環境已搭建好(省略)
master操作
安裝外掛
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.21 sec)
mysql> show variables like 'rpl_%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_recovery_rank | 0 |
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
5 rows in set (0.00 sec)
設定變數,啟用半同步複製
mysql> set global rpl_semi_sync_master_enabled=on ;
Query OK, 0 rows affected (0.02 sec)
slave 操作
安裝外掛
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.06 sec)
mysql> show variables like 'rpl_semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | OFF |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.00 sec)
啟用半同步複製
mysql> set global rpl_semi_sync_slave_enabled=on ;
Query OK, 0 rows affected (0.00 sec)
rpl_semi_sync_master_enabled和rpl_semi_sync_slave_enabled也可以配置在master和slave的配置檔案中,這樣伺服器重啟也生效。
這樣一個半同步複製就配置完成。配置完slave,我們需要考慮如下兩個問題
1 如果所有slave崩潰怎麼辦?這時將沒有slave通知master,事務已寫入中繼日誌中。
2 如果所有的slave斷開怎麼辦?在這種情況下,沒有slave通知master處於安全考慮而傳送事務。
還有兩個引數解決以上情況
rpl_semi_sync_master_timeout=milliseconds
防止半同步複製在沒有收到確認的情況下,傳送堵塞可以使用rpl-semi-sync-mastertimeout=milliseconds選項設定計數器。master在超時之前沒有收到確認,將恢復到非同步複製,繼續執行半同步沒有進行的操作
通過 set global rep-semi-sync-master-timeout=milliseconds 設定。需要注意的是作為伺服器變數,伺服器重啟此值不被儲存
rpl-semi-sync-master-wait-no-slave=on/off
如果一個事務被提交,而master沒有slave連線,這時slave不可能將事務傳送到其他地方儲存,預設情況下,master會在時間限制範圍內急性等待slave的,並確認該事務被正確寫入磁碟上。此種情況下,master還是會恢復到非同步複製。
如何監控半同步複製
安裝的外掛提供了大量狀態變數,可以利用這些狀態變數監控半同步複製,簡紹一些最有用的變數,其他變數,可以查詢線上手冊(http://dev.mysql.com/doc/refman/5.5/en/replication-semisync-interface.html)
rpl_semi_sync_master-clients
此狀態變數報告了支援和主從半同步複製已連線的slave數量
rpl_semi_sync_master_status
master的半同步複製狀態 1是活動狀態,0是非活動狀態。要麼是沒有被啟用,或是因為已恢復到非同步複製
使用show status命令或通過information_schema模式下的global_status來查詢這些狀態變數。
mysql> show status like 'rpl_semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
使用半同步複製,效能也許會受到影響,主要原則是來保證資料完整性,在這裡完整性才是最重要的。