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