如何實現mysql主從服務器的半同步複製

如何實現mysql主從服務器的半同步複製

mysql的主從架構和主主架構中,雖然這兩種架構實現了mysql服務器的負載均衡,但卻沒有提高讀寫速度,且在這構架複製時,由於主服務器和從服務器都是獨立的,所以異步複製很難保證數據的完整一致性,對於此mysql添加了半同步複製,在mysql5.5的版本之後都是支持此功能的,但默認用的是異步複製

 

半同步複製模式簡單介紹:根據名字可以,它不能達到同步複製,但卻優於異步複製。主服務器有多個從服務器,主服務會等待其中一臺數據寫入成功,完成一致性之後,在執行其它數據寫入,。但主服務器也不能一直在等待,所以又規定了超時時間,當超過時間之後,半同步複製則切換到異步複製。直到至少有一臺從服務器於主服務的數據一致,纔再次進入半同步複製

 

下面就介紹如何實現半同步複製

請大家在實現下面功能之前,請確保自己的mysql已經是主從架構的服務器,如果不會配置主從服務器,請看我博客中的其它文章,裏面有講解的

 

1、確保mysql支持半同步複製

mysql的安裝目錄下執行下面的操作

[root@mail mysql]# ls lib/plugin/             

semisync_master.so semisync_slave.so            若有這兩個文件則說明支持半同步複製

                                                          如果沒有則需要使用更高版本的mysql5.5以上的都支持,

 

2、在主、從服務器上個安裝模塊,並設定其值

在主服務器上

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; 

                                                 安裝主服務器半同步模塊

mysql> set global rpl_semi_sync_master_enabled=1;    啓動半同步器模塊

mysql> set global rpl_semi_sync_master_timeout=1000;   設定超時時間,默認單位是毫秒

在從服務器上

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';   安裝從服務器半同步模塊

mysql> set global rpl_semi_sync_slave_enabled=1;           啓動半同步模塊

mysql> stop slave;                                   關閉從服務器

mysql> start slave;                                   開啓從服務器

 

3、驗證半同步複製是否開啓

在從服務器上驗證

mysql> show global status like 'rpl_semi%';

+----------------------------+-------+

| Variable_name            | Value |

+----------------------------+-------+

| Rpl_semi_sync_slave_status | ON  |       當顯示是on時,則說明已經開啓半同步模式

     

+----------------------------+-------+

1 row in set (0.00 sec)                     

在主服務器上驗證

mysql> show global status like 'rpl_semi%';

+--------------------------------------------+-------+

| Variable_name                        | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients                    | 1 |  值爲1,說明有一個半同步從服務器

| 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 |   on時是半同步模式,off是異步模式

| Rpl_semi_sync_master_timefunc_failures | 0 | 

| Rpl_semi_sync_master_tx_avg_wait_time | 0 | 事務因開啓Semi_sync平均需要額外等待的時間

| Rpl_semi_sync_master_tx_wait_time    | 0 |  事務因開啓Semi_sync,需要額外等待的時間

| 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 |  顯示從服務器確認的成功提交數

+--------------------------------------------+-------+

14 rows in set (0.02 sec)

如果你也能看見上述內容,則恭喜你半同步複製已經配置完成。

 

 

爲了讓mysql在重啓之後還支持半同步複製,則需要在配置文件中寫入一下內容

在主、從服務器上的的my.cnf中編輯:

在主服務器上

[mysqld]  

rpl_semi_sync_master_enabled=1  

rpl_semi_sync_master_timeout=1000 

在從服務器上

[mysqld]  

rpl_semi_sync_slave_enabled=1  

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章