程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Fabric結合GTID實現Mysql復制高可用(1)

Fabric結合GTID實現Mysql復制高可用(1)

編輯:MySQL綜合教程

Fabric結合GTID實現Mysql復制高可用(1)


mysql版本:Percona server 5.6.19-67.0 Percona Server (GPL), Release 67.0, Revision 618

Mysql安裝參考:http://my.oschina.net/anthonyyau/blog/284092

Fabric State store安裝參考:http://my.oschina.net/anthonyyau/blog/307165

半同步復制參考:http://my.oschina.net/anthonyyau/blog/269800

環境:

4個服務器實例運行Percona server 5.6.19-67.0,fabric node安裝在單獨的服務器,每個Mysql實例在一台服務器上;

fabric為啟用復制的3個mysql實例提供高可用,應用使用fabric-aware的連接器路由事務和SQL語句到合適的服務器,透明的進行讀和寫操作;

當前僅僅支持異步primary backup復制(半同步復制需要手工完成)。primary處理所有寫操作,Secondaries使用mysql復制從primary同步,可以進行讀操作。

服務器信息:

一、mysql實例和fabric state store准備

Mysql安裝好後,每個fabric管理的實例需要開啟gtid、二進制日志(不需要啟動復制,由fabric完成,但是不支持配置異步復制),將以下配置放到[mysqld]段下面:

  1. log-bin=mysql-bin  
  2. binlog_format=ROW 
  3. server-id = 29 #保證每個mysql實例唯一  
  4. log-slave-updates=true 
  5. gtid-mode=on 
  6. enforce-gtid-consistency=true 
  7. sync-master-info=1 

數據庫用戶賬號准備:

1、超級管理員賬號,本例使用root@'172.17.42.1',密碼為admin@123;

2、fabric管理mysql實例的賬號,本例使用fabric@'172.17.42.1',密碼為fabric@456;

3、mysql復制專用賬號,本例使用fabric@'172.17.0.%',密碼為fabric@456,需要與fabric管理mysql的賬號密碼一致;

查看mysqlfabric命令幫助:

mysqlfabric help:顯示簡短的語法信息和幫忙命令

mysqlfabric help commands: 列出所有可用命令和描述

mysqlfabric help groups: 列出可用命令組

mysqlfabric help [group] [command]: 提供命令的詳細幫助信息

二、使用Fabric創建mysql復制高可用組

1、創建組

  1. # mysqlfabric group create my_group  
  2. Password for admin:   
  3. Procedure :  
  4. { uuid        = 3f7e82bc-4291-4002-8688-1929fc63ed3e,  
  5.   finished    = True,  
  6.   success     = True,  
  7.   return      = True,  
  8.   activities  =   

要輸入xml-rpc密碼,可以將密碼指定到fabric的配置文件,或者設置disable_authentication = yes,需要重啟fabric(先mysqlfabric manage stop,然後修改配置文件,不然將報"Permission denied."錯誤)。

2、添加mysql實例到組

  1. # mysqlfabric group add my_group 172.17.0.50:3306  
  2. Procedure :  
  3. { uuid        = 6e69a5a7-667b-4e63-92c3-2f9f4269d633,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  
  9.  
  10. # mysqlfabric group add my_group 172.17.0.47:3306  
  11. Procedure :  
  12. { uuid        = 70a66b03-a16d-426d-a711-8f13da78fc8d,  
  13.   finished    = True,  
  14.   success     = True,  
  15.   return      = True,  
  16.   activities  =   
  17. }  
  18.  
  19. # mysqlfabric group add my_group 172.17.0.48:3306  
  20. Procedure :  
  21. { uuid        = 15a2e1ad-b726-4fa8-bdf3-a1701e870166,  
  22.   finished    = True,  
  23.   success     = True,  
  24.   return      = True,  
  25.   activities  =   

添加實例到組錯誤:

  1. # mysqlfabric --param=servers.user=fabric --param=servers.password=fabric@456 group add my_group 172.17.0.50:3306  
  2. Password for admin:   
  3. Procedure :  
  4. { uuid        = d2c0d969-5b8a-40c2-ba7a-1bc963c08824,  
  5.   finished    = True,  
  6.   success     = False,  
  7.   return      = ServerError: Error accessing server (172.17.0.50:3306).,  
  8.   activities  =   

日志:

  1. [DEBUG] 1409151193.274349 - Executor-4 - Statement (BEGIN, Params(()).  
  2. [DEBUG] 1409151193.274764 - Executor-4 - Executing _add_server  
  3. [DEBUG] 1409151193.274849 - Executor-4 - Statement (SELECT group_id, description, master_uuid, master_defined, status FROM groups WHERE group_id = %s, Params(('my_group',)).  
  4. [DEBUG] 1409151193.275494 - Executor-4 - Start executing function: discover_uuid((), {'connection_timeout': 5, 'address': '172.17.0.50:3306'}).  
  5. [DEBUG] 1409151193.276136 - Executor-4 - Error executing function: discover_uuid.  
  6. [DEBUG] 1409151193.276203 - Executor-4 - _add_server failed, executing compensation  
  7. [DEBUG] 1409151193.276255 - Executor-4 - Error accessing server (172.17.0.50:3306).  
  8. [DEBUG] 1409151193.276308 - Executor-4 - Statement (ROLLBACK, Params(()).  
  9. [DEBUG] 1409151193.276664 - Executor-4 - Complete job (60b0fa1f-3a39-43f3-aa71-46ea732aae84, 946e0199-53ca-4fdc-9b49-f134d44db476, mysql.fabric.services.server._add_server, Error). 

將密碼寫到fabric配置文件是可以,使用命令行參數不能覆蓋配置文件參數,暫時沒有找到是什麼原因。

3、查看組中信息

可以看到所有實例的狀態都是SECONDARY

  1. # mysqlfabric group lookup_servers my_group  
  2. Command :  
  3. { success     = True 
  4.   return      = [{'status': 'SECONDARY', 'server_uuid': '19a37552-2d44-11e4-af5c-763d1493518d', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '172.17.0.50:3306'}, {'status': 'SECONDARY', 'server_uuid': '7bd52611-2d44-11e4-af5f-3ecad7c2f82a', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '172.17.0.47:3306'}, {'status': 'SECONDARY', 'server_uuid': 'ade3ee53-2d44-11e4-af60-de532998e8a6', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '172.17.0.48:3306'}]  
  5.   activities  =   

4、查看組健康詳細信息

  1. # mysqlfabric group health my_group  
  2. Command :  
  3. { success     = True 
  4.   return      = {'19a37552-2d44-11e4-af5c-763d1493518d': {'status': 'SECONDARY', 'is_alive': True, 'threads': {'is_configured': False}}, '7bd52611-2d44-11e4-af5f-3ecad7c2f82a': {'status': 'SECONDARY', 'is_alive': True, 'threads': {'is_configured': False}}, 'ade3ee53-2d44-11e4-af60-de532998e8a6': {'status': 'SECONDARY', 'is_alive': True, 'threads': {'is_configured': False}}}  
  5.   activities  =   

5、提升和降級master服務

創建高可用組後,fabric沒有意識到任何復制拓撲。需要提升一個為primary,降級剩余的服務器自動為secondaries(slaves)。

查看命令幫助:

# mysqlfabric help group promote

group promote group_id [--slave_id=NONE] [--update_only] [--synchronous]

如果只是想更新state store,跳過復制配置,使用--update_only參數。

如果slave沒有提供,將選擇一個最好的候選者,候選者必須開啟二進制日志,同時跟master屬於同一個組,跟master延時小。進行故障切換操作,選擇這個候選者,同時將其他slave指向到新的master,同時更新state store。

提升一個mysql實例為master:

  1. # mysqlfabric group promote my_group  
  2. Procedure :  
  3. { uuid        = 21eb4d58-d7ec-41eb-a0e5-560eb5976272,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   

執行同樣的命名將設置不同的服務器為primary,同時降級當前primary並選取一個新的。如果當前primary錯誤,執行同樣的命令能手動觸發選取一個新的primary。

一個標記位"faulty"狀態的服務器不能提升為secondary或primary,需要先轉換成"spare"狀態。使用命令mysqlfabric server set_status <server-address> spare

如果直接從"faulty"轉換成"secondary"將報錯:

  1. # mysqlfabric server set_status 3ecc746f-2e05-11e4-b448-560d7281695e secondary  
  2. Procedure :  
  3. { uuid        = 06d0acb1-ad01-483b-a1d4-e13c4b775fcd,  
  4.   finished    = True,  
  5.   success     = False,  
  6.   return      = ServerError: Cannot change server's (3ecc746f-2e05-11e4-b448-560d7281695e) status from (FAULTY) to (SECONDARY).,  
  7.   activities  =   

查看組狀態和驗證是否復制正常:

  1. # mysqlfabric group lookup_servers my_group  
  2. Command :  
  3. { success     = True 
  4.   return      = [{'status': 'PRIMARY', 'server_uuid': '19a37552-2d44-11e4-af5c-763d1493518d', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '172.17.0.50:3306'}, {'status': 'SECONDARY', 'server_uuid': '7bd52611-2d44-11e4-af5f-3ecad7c2f82a', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '172.17.0.47:3306'}, {'status': 'SECONDARY', 'server_uuid': 'ade3ee53-2d44-11e4-af60-de532998e8a6', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '172.17.0.48:3306'}]  
  5.   activities  =   

使用show slave status查看slave狀態:

  1. # mysql -ufabric -pfabric@456 -h172.17.0.47 -e "show slave status\G;"  
  2. *************************** 1. row ***************************  
  3.                Slave_IO_State: Connecting to master  
  4.                   Master_Host: 172.17.0.50  
  5.                   Master_User: fabric  
  6.                   Master_Port: 3306  
  7.                 Connect_Retry: 60  
  8.               Master_Log_File:   
  9.           Read_Master_Log_Pos: 4  
  10.                Relay_Log_File: d4f404f647b0-relay-bin.000001  
  11.                 Relay_Log_Pos: 4  
  12.         Relay_Master_Log_File:   
  13.              Slave_IO_Running: Connecting  
  14.             Slave_SQL_Running: Yes  
  15.               Replicate_Do_DB:   
  16.           Replicate_Ignore_DB:   
  17.            Replicate_Do_Table:   
  18.        Replicate_Ignore_Table:   
  19.       Replicate_Wild_Do_Table:   
  20.   Replicate_Wild_Ignore_Table:   
  21.                    Last_Errno: 0  
  22.                    Last_Error:   
  23.                  Skip_Counter: 0  
  24.           Exec_Master_Log_Pos: 0  
  25.               Relay_Log_Space: 151  
  26.               Until_Condition: None  
  27.                Until_Log_File:   
  28.                 Until_Log_Pos: 0  
  29.            Master_SSL_Allowed: No  
  30.            Master_SSL_CA_File:   
  31.            Master_SSL_CA_Path:   
  32.               Master_SSL_Cert:   
  33.             Master_SSL_Cipher:   
  34.                Master_SSL_Key:   
  35.         Seconds_Behind_Master: 0  
  36. Master_SSL_Verify_Server_Cert: No  
  37.                 Last_IO_Errno: 1045  
  38.                 Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60  retries: 31  
  39.                Last_SQL_Errno: 0  
  40.                Last_SQL_Error:   
  41.   Replicate_Ignore_Server_Ids:   
  42.              Master_Server_Id: 0  
  43.                   Master_UUID:   
  44.              Master_Info_File: /usr/local/Percona-Server-5.6.19-rel67.0-618.Linux.x86_64/data/master.info  
  45.                     SQL_Delay: 0  
  46.           SQL_Remaining_Delay: NULL  
  47.       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it  
  48.            Master_Retry_Count: 86400  
  49.                   Master_Bind:   
  50.       Last_IO_Error_Timestamp: 140827 16:42:50  
  51.      Last_SQL_Error_Timestamp:   
  52.                Master_SSL_Crl:   
  53.            Master_SSL_Crlpath:   
  54.            Retrieved_Gtid_Set:   
  55.             Executed_Gtid_Set: 7bd52611-2d44-11e4-af5f-3ecad7c2f82a:1-6  
  56.                 Auto_Position: 1 

看到連接錯誤:

因fabric使用其連接管理mysql實例的用戶配置slave,所有需要重新授權slave訪問master:

  1. # mysql -uroot -padmin@123 -h172.17.0.50 -e "grant replication slave on *.* to fabric@'172.17.0.%' identified by 'fabric@456'"   
  2. # mysql -uroot -padmin@123 -h172.17.0.47 -e "grant replication slave on *.* to fabric@'172.17.0.%' identified by 'fabric@456'"   
  3. # mysql -uroot -padmin@123 -h172.17.0.48 -e "grant replication slave on *.* to fabric@'172.17.0.%' identified by 'fabric@456'"  

授權後重新查看slave狀態:看到連接正常,復制正常工作

  1.  
  2. # mysql -ufabric -pfabric@456 -h172.17.0.48 -e 'show slave status\G'  
  3. *************************** 1. row ***************************  
  4.                Slave_IO_State: Waiting for master to send event  
  5.                   Master_Host: 172.17.0.50  
  6.                   Master_User: fabric  
  7.                   Master_Port: 3306  
  8.                 Connect_Retry: 60  
  9.               Master_Log_File: mysql-bin.000004  
  10.           Read_Master_Log_Pos: 3451  
  11.                Relay_Log_File: e294ab366580-relay-bin.000003  
  12.                 Relay_Log_Pos: 448  
  13.         Relay_Master_Log_File: mysql-bin.000004  
  14.              Slave_IO_Running: Yes  
  15.             Slave_SQL_Running: Yes  
  16.               Replicate_Do_DB:   
  17.           Replicate_Ignore_DB:   
  18.            Replicate_Do_Table:   
  19.        Replicate_Ignore_Table:   
  20.       Replicate_Wild_Do_Table:   
  21.   Replicate_Wild_Ignore_Table:   
  22.                    Last_Errno: 0  
  23.                    Last_Error:   
  24.                  Skip_Counter: 0  
  25.           Exec_Master_Log_Pos: 3451  
  26.               Relay_Log_Space: 4169  
  27.               Until_Condition: None  
  28.                Until_Log_File:   
  29.                 Until_Log_Pos: 0  
  30.            Master_SSL_Allowed: No  
  31.            Master_SSL_CA_File:   
  32.            Master_SSL_CA_Path:   
  33.               Master_SSL_Cert:   
  34.             Master_SSL_Cipher:   
  35.                Master_SSL_Key:   
  36.         Seconds_Behind_Master: 0  
  37. Master_SSL_Verify_Server_Cert: No  
  38.                 Last_IO_Errno: 0  
  39.                 Last_IO_Error:   
  40.                Last_SQL_Errno: 0  
  41.                Last_SQL_Error:   
  42.   Replicate_Ignore_Server_Ids:   
  43.              Master_Server_Id: 27  
  44.                   Master_UUID: 19a37552-2d44-11e4-af5c-763d1493518d  
  45.              Master_Info_File: /usr/local/Percona-Server-5.6.19-rel67.0-618.Linux.x86_64/data/master.info  
  46.                     SQL_Delay: 0  
  47.           SQL_Remaining_Delay: NULL  
  48.       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it  
  49.            Master_Retry_Count: 86400  
  50.                   Master_Bind:   
  51.       Last_IO_Error_Timestamp:   
  52.      Last_SQL_Error_Timestamp:   
  53.                Master_SSL_Crl:   
  54.            Master_SSL_Crlpath:   
  55.            Retrieved_Gtid_Set: 19a37552-2d44-11e4-af5c-763d1493518d:1-10  
  56.             Executed_Gtid_Set: 19a37552-2d44-11e4-af5c-763d1493518d:1-10  
  57.                 Auto_Position: 1  
  58.  
  59. # mysql -ufabric -pfabric@456 -h172.17.0.47 -e 'show slave status\G'  
  60. *************************** 1. row ***************************  
  61.                Slave_IO_State: Waiting for master to send event  
  62.                   Master_Host: 172.17.0.50  
  63.                   Master_User: fabric  
  64.                   Master_Port: 3306  
  65.                 Connect_Retry: 60  
  66.               Master_Log_File: mysql-bin.000004  
  67.           Read_Master_Log_Pos: 3451  
  68.                Relay_Log_File: d4f404f647b0-relay-bin.000004  
  69.                 Relay_Log_Pos: 448  
  70.         Relay_Master_Log_File: mysql-bin.000004  
  71.              Slave_IO_Running: Yes  
  72.             Slave_SQL_Running: Yes  
  73.               Replicate_Do_DB:   
  74.           Replicate_Ignore_DB:   
  75.            Replicate_Do_Table:   
  76.        Replicate_Ignore_Table:   
  77.       Replicate_Wild_Do_Table:   
  78.   Replicate_Wild_Ignore_Table:   
  79.                    Last_Errno: 0  
  80.                    Last_Error:   
  81.                  Skip_Counter: 0  
  82.           Exec_Master_Log_Pos: 3451  
  83.               Relay_Log_Space: 1205  
  84.               Until_Condition: None  
  85.                Until_Log_File:   
  86.                 Until_Log_Pos: 0  
  87.            Master_SSL_Allowed: No  
  88.            Master_SSL_CA_File:   
  89.            Master_SSL_CA_Path:   
  90.               Master_SSL_Cert:   
  91.             Master_SSL_Cipher:   
  92.                Master_SSL_Key:   
  93.         Seconds_Behind_Master: 0  
  94. Master_SSL_Verify_Server_Cert: No  
  95.                 Last_IO_Errno: 0  
  96.                 Last_IO_Error:   
  97.                Last_SQL_Errno: 0  
  98.                Last_SQL_Error:   
  99.   Replicate_Ignore_Server_Ids:   
  100.              Master_Server_Id: 27  
  101.                   Master_UUID: 19a37552-2d44-11e4-af5c-763d1493518d  
  102.              Master_Info_File: /usr/local/Percona-Server-5.6.19-rel67.0-618.Linux.x86_64/data/master.info  
  103.                     SQL_Delay: 0  
  104.           SQL_Remaining_Delay: NULL  
  105.       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it  
  106.            Master_Retry_Count: 86400  
  107.                   Master_Bind:   
  108.       Last_IO_Error_Timestamp:   
  109.      Last_SQL_Error_Timestamp:   
  110.                Master_SSL_Crl:   
  111.            Master_SSL_Crlpath:   
  112.            Retrieved_Gtid_Set: 19a37552-2d44-11e4-af5c-763d1493518d:1-10  
  113.             Executed_Gtid_Set: 19a37552-2d44-11e4-af5c-763d1493518d:1-10  
  114.                 Auto_Position: 1 


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