程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql半同步復制(semi_sync_replication)搭建及使用

mysql半同步復制(semi_sync_replication)搭建及使用

編輯:MySQL綜合教程

mysql半同步復制(semi_sync_replication)搭建及使用         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還是會恢復到異步復制。   如何監控半同步復制 安裝的插件提供了大量狀態變量,可以利用這些狀態變量監控半同步復制,簡紹一些最有用的變量,其他變量,可以查詢在線手冊
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     | 
+--------------------------------------------+-------+

 

使用半同步復制,性能也許會受到影響,主要原則是來保證數據完整性,在這裡完整性才是最重要的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved