mysql5.5.9半同步複製功能部署

babyyellow發表於2011-02-18
原創文章,轉載請註明出處:


1.mysql5.5.9 半同步複製功能:


    mysql5.5 版本支援半同步複製功能(Semisynchronous Replication),但

還不是原生的支援,是透過plugin來支援的,並且預設是沒有安裝這個外掛的。

    不論是二進位制釋出的,還是自己原始碼編譯的,都會預設生成這個外掛,
一個是針對master 的一個是針對slave的,在使用之前需要先安裝這倆plugins


首先先檢查 mysql是否支援動態新增外掛,

mysql.sock@mysql> select @@have_dynamic_loading ;                      
+------------------------+
| @@have_dynamic_loading |
+------------------------+
| YES                    |
+------------------------+
1 row in set (0.00 sec)

支援動態增減外掛,

新增外掛:


mysql.sock@(none)> install plugin rpl_semi_sync_master soname

'semisync_master.so' ;
Query OK, 0 rows affected (0.00 sec)


mysql.sock@(none)> install plugin rpl_semi_sync_slave soname

'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)


新增完外掛後,系統會預設的增加了幾個系統引數
mysql.sock@(none)> show global variables like 'rpl_semi_sync%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| 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    |
| rpl_semi_sync_slave_enabled        | OFF   |
| rpl_semi_sync_slave_trace_level    | 32    |
+------------------------------------+-------+
6 rows in set (0.00 sec)

這些引數是可以動態修改的

rpl_semi_sync_master_enabled  :
啟動master 支援半同步複製。

 rpl_semi_sync_master_timeout  :
主庫等待半同步複製資訊返回的超時間隔,預設10秒

rpl_semi_sync_master_trace_level  :
監控等級:
1 = general level (for example, time function failures)

16 = detail level (more verbose information)

32 = net wait level (more information about network waits)

64 = function level (information about function entry and exit)


rpl_semi_sync_master_wait_no_slave :

是否允許master 每個事物提交後都要等待slave 的receipt訊號。
預設為on ,每一個事務都會等待,如果slave當掉後,當slave追趕上master的日誌時

,可以自動的切換為半同步方式,如果為off,則slave追趕上後,也不會彩玉半同步的

方式複製了,需要手工發動。

rpl_semi_sync_slave_enabled  :
啟動slave 支援半同步複製。

rpl_semi_sync_slave_trace_level  :
監控等級,同 上面的rpl_semi_sync_master_trace_leve。




相應的系統的狀態變數:

mysql.sock@mysql> show global status like 'rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 902   |
| Rpl_semi_sync_master_net_wait_time         | 902   |
| Rpl_semi_sync_master_net_waits             | 1     |
| 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      | 501   |
| Rpl_semi_sync_master_tx_wait_time          | 501   |
| Rpl_semi_sync_master_tx_waits              | 1     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 1     |
| Rpl_semi_sync_slave_status                 | OFF   |
+--------------------------------------------+-------+
15 rows in set (0.00 sec)


 Rpl_semi_sync_master_clients   :
記錄支援半同步的slave的個數。

Rpl_semi_sync_master_net_avg_wait_time :
master 等待slave 回覆的平均等待時間。 單位毫秒.

| Rpl_semi_sync_master_net_wait_time :
master 總的等待時間。

Rpl_semi_sync_master_net_waits :
master 等待slave 回覆的的總的等待次數。

Rpl_semi_sync_master_no_times :
master 關閉半同步複製的次數。

Rpl_semi_sync_master_no_tx :
master 沒有收到slave的回覆而提交的次數,(應該可以理解為master 等待超時的次

數)

Rpl_semi_sync_master_status :
標記master現在是否是半同步複製狀態。

Rpl_semi_sync_master_timefunc_failures :
The number of times the master failed when calling time functions such as

gettimeofday().

Rpl_semi_sync_master_tx_avg_wait_time :
master 花在每個事務上的平均等待時間。

Rpl_semi_sync_master_tx_wait_time :
master 總的等待次數。


Rpl_semi_sync_master_wait_pos_backtraverse:
我理解的意思就是後來的先到了,而先來的還沒有到的次數。
The total number of times the master waited for an event with binary

coordinates lower than events waited for previously. This can occur when

the order in which transactions start waiting for a reply is different from

the order in which their binary log events are written.


Rpl_semi_sync_master_wait_sessions:
當前有多少個session 因為slave 的回覆而造成等待。



Rpl_semi_sync_master_yes_tx :
master 成功接收到slave的回覆的次數。


Rpl_semi_sync_slave_status :
標記slave 是否在半同步狀態。



========================================================
配置半同步的步驟就很簡單了:


1.先按照我們一般的配置非同步複製的方式 建立好複製。


2. 啟動非同步方式複製。

3.當slave追趕上master的狀態時,停止slave :

4. 修改主從庫的半同步的引數:
 
    主庫執行:
    set global rpl_semi_master_enabled=1;

    set global rpl_semi_sync_master_timeout=1000; 

    從庫執行 ;
    set global rpl_semi_slave_enabled=1;

5. 從庫啟動slave:

    start slave;


6.檢視引數,根據複製的狀態調整global rpl_semi_sync_master_timeout的值。





 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-687487/,如需轉載,請註明出處,否則將追究法律責任。

相關文章