欢迎投稿

今日深度:

Fabric结合GTID实现Mysql复制高可用(1)(3)

三、组维护

1、找出哪些服务器在组中,查看组状态

  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  =   
  6. }  

2、从组中移除mysql实例

有时需要将secondaries离线进行维护,在停止服务之前,需要先从组中移除它,避免fabric错误检查触发任何动作:

# mysqlfabric help group remove

group remove group_id server_id [--synchronous]

Remove a server from a group.

如从my_group组中移除server_uuid为7bd52611-2d44-11e4-af5f-3ecad7c2f82a的实例:

  1. # mysqlfabric group remove my_group 7bd52611-2d44-11e4-af5f-3ecad7c2f82a  
  2. Procedure :  
  3. { uuid        = 07317ba2-497c-43f0-b8a9-e43ef9ded834,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  
  9.  
  10. # mysqlfabric group lookup_servers my_group  
  11. Command :  
  12. { success     = True 
  13.   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''ade3ee53-2d44-11e4-af60-de532998e8a6''mode''READ_ONLY''weight'1.0'address''172.17.0.48:3306'}]  
  14.   activities  =   
  15. }  

然后可以重新添加到组,将自动开启复制:

  1. # mysqlfabric group add my_group 172.17.0.47:3306  
  2. Procedure :  
  3. { uuid        = 39344790-3af8-4049-92a6-669bd2642a1c,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   

查看复制状态:

  1. # mysql -ufabric -pfabric@456 -h172.17.0.47 -e 'show slave status\G'  
  2. *************************** 1. row ***************************  
  3.                Slave_IO_State: Waiting for master to send event  
  4.                   Master_Host: 172.17.0.50 
  5.                   Master_User: fabric  
  6.                   Master_Port: 3306 
  7.                 Connect_Retry: 60 
  8.               Master_Log_File: mysql-bin.000004 
  9.           Read_Master_Log_Pos: 3451 
  10.                Relay_Log_File: d4f404f647b0-relay-bin.000002 
  11.                 Relay_Log_Pos: 408 
  12.         Relay_Master_Log_File: mysql-bin.000004 
  13.              Slave_IO_Running: Yes  
  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: 3451 
  25.               Relay_Log_Space: 619 
  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: 0 
  38.                 Last_IO_Error:   
  39.                Last_SQL_Errno: 0 
  40.                Last_SQL_Error:   
  41.   Replicate_Ignore_Server_Ids:   
  42.              Master_Server_Id: 27 
  43.                   Master_UUID: 19a37552-2d44-11e4-af5c-763d1493518d 
  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:   
  51.      Last_SQL_Error_Timestamp:   
  52.                Master_SSL_Crl:   
  53.            Master_SSL_Crlpath:   
  54.            Retrieved_Gtid_Set:   
  55.             Executed_Gtid_Set: 19a37552-2d44-11e4-af5c-763d1493518d:1-10 
  56.                 Auto_Position: 1 

3、添加一个全新的Mysql实例(实例IP为172.17.0.51)到HA group组

创建数据库复制账号:

  1. # mysql -uroot -padmin@123 -h172.17.0.51 -e "grant replication slave on *.* to fabric@'172.17.0.%' identified by 'fabric@456'"  
  2. # mysql -uroot -padmin@123 -h172.17.0.51 -e "show slave status" 

添加到my_group组:

  1. # mysqlfabric group add my_group 172.17.0.51:3306   
  2. Procedure :  
  3. { uuid        = 45c32c66-6e60-44d8-8406-308de01b1ef9,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  

查看复制状态,fabric已经开启复制:

  1. # mysql -uroot -padmin@123 -h172.17.0.51 -e "show slave status\G"  
  2. *************************** 1. row ***************************  
  3.                Slave_IO_State: Waiting for master to send event  
  4.                   Master_Host: 172.17.0.50 
  5.                   Master_User: fabric  
  6.                   Master_Port: 3306 
  7.                 Connect_Retry: 60 
  8.               Master_Log_File: mysql-bin.000004 
  9.           Read_Master_Log_Pos: 3451 
  10.                Relay_Log_File: 9355b5f279ad-relay-bin.000003 
  11.                 Relay_Log_Pos: 448 
  12.         Relay_Master_Log_File: mysql-bin.000004 
  13.              Slave_IO_Running: Yes  
  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: 3451 
  25.               Relay_Log_Space: 4169 
  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: 0 
  38.                 Last_IO_Error:   
  39.                Last_SQL_Errno: 0 
  40.                Last_SQL_Error:   
  41.   Replicate_Ignore_Server_Ids:   
  42.              Master_Server_Id: 27 
  43.                   Master_UUID: 19a37552-2d44-11e4-af5c-763d1493518d 
  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:   
  51.      Last_SQL_Error_Timestamp:   
  52.                Master_SSL_Crl:   
  53.            Master_SSL_Crlpath:   
  54.            Retrieved_Gtid_Set: 19a37552-2d44-11e4-af5c-763d1493518d:1-10 
  55.             Executed_Gtid_Set: 19a37552-2d44-11e4-af5c-763d1493518d:1-10 
  56.                 Auto_Position: 1 

4、关闭primary

primary不能从组中移除,使用group demote关闭在组中的任何primary,不会重新选取一个新master,同时也不会关闭故障检测。

  1. # mysqlfabric group demote my_group  
  2. Procedure :  
  3. { uuid        = 448df7ff-f0b5-4868-be15-8b505ec38c19,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  

查看组状态:所有mysql实例的状态都已经变成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''3ecc746f-2e05-11e4-b448-560d7281695e''mode''READ_ONLY''weight'1.0'address''172.17.0.51: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  =   

5、手动提升一个服务组,选取一个master

当前master是172.17.0.48:

  1. # mysqlfabric group promote my_group  
  2. Procedure :  
  3. { uuid        = d3072441-a023-42bd-8fe8-6746a620189d,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  
  9.  
  10. # mysqlfabric group lookup_servers my_group  
  11. Command :  
  12. { success     = True 
  13.   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''3ecc746f-2e05-11e4-b448-560d7281695e''mode''READ_ONLY''weight'1.0'address''172.17.0.51:3306'}, {'status''SECONDARY''server_uuid''7bd52611-2d44-11e4-af5f-3ecad7c2f82a''mode''READ_ONLY''weight'1.0'address''172.17.0.47:3306'}, {'status''PRIMARY''server_uuid''ade3ee53-2d44-11e4-af60-de532998e8a6''mode''READ_WRITE''weight'1.0'address''172.17.0.48:3306'}]  
  14.   activities  =   

重新选取一个新master:fabric已经自动选取了172.17.0.47作为master

  1. # mysqlfabric group promote my_group  
  2. Procedure :  
  3. { uuid        = c779bfa6-5a57-4d60-9899-d64b85e9bee3,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  
  9.  
  10. # mysqlfabric group lookup_servers my_group  
  11. Command :  
  12. { success     = True 
  13.   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''3ecc746f-2e05-11e4-b448-560d7281695e''mode''READ_ONLY''weight'1.0'address''172.17.0.51:3306'}, {'status''PRIMARY''server_uuid''7bd52611-2d44-11e4-af5f-3ecad7c2f82a''mode''READ_WRITE''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'}]  
  14.   activities  =   
  15. }  

6、移除组(使用group destroy)

如果组没有服务器,是空的,能移除组

  1. # mysqlfabric group create my_test  
  2. Procedure :  
  3. { uuid        = d53ba76d-1ed0-4e9d-96b3-01102b46f0bf,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  
  9.  
  10. # mysqlfabric group destroy my_test  
  11. Procedure :  
  12. { uuid        = 7046fea7-6e87-4dc0-afd4-e21ea399f9c1,  
  13.   finished    = True,  
  14.   success     = True,  
  15.   return      = True,  
  16.   activities  =   
  17. }  

也能强制的移除非空的组(使用--force):

  1. # mysqlfabric group create my_test  
  2. Procedure :  
  3. { uuid        = be15e7bd-e597-4e67-aa4d-4ff34e0d3af8,  
  4.   finished    = True,  
  5.   success     = True,  
  6.   return      = True,  
  7.   activities  =   
  8. }  
  9.  
  10. # mysqlfabric group add my_test 172.17.0.52:3306  
  11. Procedure :  
  12. { uuid        = da981fe4-eeaf-4a3f-a770-d82d60a2ad64,  
  13.   finished    = True,  
  14.   success     = True,  
  15.   return      = True,  
  16.   activities  =   
  17. }  
  18.  
  19. # mysqlfabric group lookup_servers my_test  
  20. Command :  
  21. { success     = True 
  22.   return      = [{'status''SECONDARY''server_uuid''7bd52611-2d44-11e4-af5f-3ecad7c2f82a''mode''READ_ONLY''weight'1.0'address''172.17.0.52:3306'}]  
  23.   activities  =   
  24. }  
  25.  
  26. # mysqlfabric group destroy my_test  
  27. Procedure :  
  28. { uuid        = 63b0ec92-ffa2-4f54-9c21-530b1532d21c,  
  29.   finished    = True,  
  30.   success     = False,  
  31.   return      = GroupError: Group (my_test) is not empty.,  
  32.   activities  =   
  33. }  
  34.  
  35. # mysqlfabric group destroy my_test --force  
  36. Procedure :  
  37. { uuid        = 37c5b49b-c451-41ad-9193-c9e1f06edaa9,  
  38.   finished    = True,  
  39.   success     = True,  
  40.   return      = True,  
  41.   activities  =   

四、总结​

1、使用fabric实现mysql复制高可用,以组为单位对mysql实例进行管理,可以管理多个HA组;

2、当前fabric只能实现自动配置异步复制,不支持半同步复制;

3、mysql实例进行恢复后,fabric不会自动改变实例的状态,需要手工修改;

4、能在线添加和删除mysql实例;

5、fabric state store和fabric note当前是单点,虽然fabric-aware连接器可以缓存路由信息(可以配置ttl值);

6、使用fabric不需要对slave配置vip,不像MHA和MMM等需要对vip进行管理;

7、mysql实例需要指出gtid,也是就要升级到mysql 5.6.10以上版本;
 

参考:

1、http://www.clusterdb.com/mysql-fabric/mysql-fabric-adding-high-availability-to-mysql

2、官档:http://dev.mysql.com/doc/mysql-utilities/1.5/en/fabric-quick-start-replication.html


www.htsjk.Com true http://www.htsjk.com/shujukukf/17659.html NewsArticle 三、组维护 1、找出哪些服务器在组中,查看组状态 #mysqlfabricgrouplookup_serversmy_group Command: {success= True return =[{ 'status' : 'PRIMARY' , 'server_uuid' : '19a37552-2d44-11...
评论暂时关闭