打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MySQL高可用方案 – Fabric

与MySQL复制功能共同使用实现高可用性时,MySQLFabric能够提供自动故障检测和故障转移功能。具体包括:

  • 监控主数据库,如果服务器出现故障,MySQL Fabric将选出一个从数据库,并将其升级为新的主数据库。
  • 提供事务处理的自动路径选择以连接到当前主数据库,及从数据库间的查询负载均衡。拓扑及服务器状态对应用透明。

自动数据分片和再分片功能简化了开发运营团队的流程管理工作。这帮助用户能够:

  • 对表分片,实现读写的横向扩展;
  • 选择对哪些表分片,并指定分片键的字段,包括使用基于哈希映射还是基于区间映射;
  • 将现有数据片转移到新的服务器上,或者将这些数据片进一步分成更小的数据片。

对PHP、Python和Java连接器的扩展支持使得事务处理和查询能够直接发送到合适的MySQL服务器上。因为无需代理,不会产生额外延迟。

甲骨文公司MySQL开发副总裁Tomas Ulin表示:“全球很多大型网站和云应用都借助MySQL复制和分片功能来提升高可用性和可扩展性。MySQL Fabric通过自动故障检测和故障转移实现了高可用性以及自动数据分片,并对所有人开放。凭借MySQL Fabric这款整合的开源框架,无论MySQL应用是在内部部署还是云中,甲骨文都能使其轻松并安全地实现横向扩展。”


OK !!! 来动手测试一下吧 !!!


一、实验环境


本例的实验环境是在一台CentOS主机中做的,机器上有3个MySQL实例,分别是3306、3691和3692,我们要做的就是用这3个实例达成HA效果


二、下载


Fabric目前是被打包到了MySQL Utilities中,所以大家下载MySQL Utilities就可以了,下载地址是:http://dev.mysql.com/downloads/utilities/,目前版本是:1.4.4,在本例中我们下载的是 mysql-utilities-1.4.4-1.el6.noarch.rpm。


三、安装MySQL Utilities


rpm包的安装还是挺简单的,具体如下:

rpm -ivh mysql-utilities-1.4.4-1.el6.noarch.rpm
Preparing...                ########################################### [100%]
   
1:mysql-utilities        ########################################### [100%]
[root@<span style="font-size: 12px;">

装完后执行

mysqlfabric

如果有回显说明安装完毕。


四、建立Backing Store账号


Backing Store用于存储整个HA集群的服务器等相关配置,它需要一个MySQL实例来存储这些信息,这个实例的版本需要跟其它在HA中的MySQL实例版本保持一致,而且必须是5.6.10及更高的版本,我们在本例中选择3306实例来使用。


首先,你需要一个账号来连接Backing Store的MySQL实例,这个账号需要有对fabric数据库的管理员级权限,我们在3306端口的实例上建账号,具体如下:

CREATE USER 'fabric'@'10.165.17.175' IDENTIFIED BY 'secret';
GRANT ALL ON fabric
.* TO 'fabric'@'10.165.17.175';

五、Fabric配置文件


Fabric配置文件默认位置是:/etc/mysql/fabric.cfg

修改其中的[storage]部分,具体如下:

[storage]
auth_plugin
= mysql_native_password
database
= fabric
user
= fabric
address
= 10.165.17.175:3306
connection_delay
= 1
connection_timeout
= 6
password
= secret
connection_attempts
= 6

其中address = 10.165.17.175:3306是Backing Store的MySQL实例,password = secret是上一步中建立连接fabric数据库的用户密码。


修改其中的[servers]部分,具体如下:

[servers]
password
= secret
user
= fabric

其中是password = secret 是HA环境中各实例的连接密码。


六、填充Backing Store信息


我们通过Fabric来填充3306端口实例中的fabric数据库,具体如下:

mysqlfabric manage setup
[INFO] 1408115689.486792 - MainThread - Initializing persister: user (fabric), server (10.165.17.175:3306), database (fabric).
Finishing initial setup
=======================
Password for admin user is not yet set.
Password for admin/xmlrpc:
Repeat Password:
Password set.

操作期间会提示Fabric的管理员帐户admin没有设置密码,咱们按提示将密码设置成admin就可以了。


我们再查看3306端口的实例里面发生了什么变化,具体如下:

mysql> show databases;
+--------------------+
| Database    |
+--------------------+
| information_schema |
| 51linux.net        |
| fabric             |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)
mysql
>

可以看到多了一个fabric数据库,它里面存储的就是Fabric的一些配置信息。


七、配置HA中主从MySQL节点账号


本例中3691和3692实例是需要做成HA的,它们也要建个管理员权限的账号,注意,账号名也要跟3306实例保持一致,也需要是fabric,具体如下:

CREATE USER 'fabric'@'10.165.17.175' IDENTIFIED BY 'secret';
GRANT ALL ON
*.* TO 'fabric'@'10.165.17.175';

同时,由于fabric是基于GTID主从复制,所以这些实例中必须要启用GTID,它们的配置文件要有这些参数:

log-bin
gtid
-mode=ON
enforce
-gtid-consistency
log_slave_updates

八、启动fabric


我们用下面的命令来启动fabric:

mysqlfabric manage start
[INFO] 1408116209.229260 - MainThread - Initializing persister: user (fabric), server (10.165.17.175:3306), database (fabric).
[INFO] 1408116209.233982 - MainThread - Loading Services.
[INFO] 1408116209.253620 - MainThread - Fabric node starting.
[INFO] 1408116209.261853 - MainThread - Starting Executor.
[INFO] 1408116209.262001 - MainThread - Setting 5 executor(s).
[INFO] 1408116209.262691 - Executor-0 - Started.
[INFO] 1408116209.264825 - Executor-1 - Started.
[INFO] 1408116209.266648 - Executor-2 - Started.
[INFO] 1408116209.268395 - Executor-3 - Started.
[INFO] 1408116209.269961 - MainThread - Executor started.
[INFO] 1408116209.273374 - MainThread - Starting failure detector.
[INFO] 1408116209.274144 - Executor-4 - Started.
[INFO] 1408116209.275816 - XML-RPC-Server - XML-RPC protocol server ('127.0.0.1', 32274) started.
[INFO] 1408116209.276112 - XML-RPC-Server - Setting 5 XML-RPC session(s).
[INFO] 1408116209.276654 - XML-RPC-Session-0 - Started XML-RPC-Session.
[INFO] 1408116209.278426 - XML-RPC-Session-1 - Started XML-RPC-Session.
[INFO] 1408116209.280368 - XML-RPC-Session-2 - Started XML-RPC-Session.
[INFO] 1408116209.281599 - XML-RPC-Session-3 - Started XML-RPC-Session.
[INFO] 1408116209.282699 - XML-RPC-Session-4 - Started XML-RPC-Session.

九、建立HA服务器组


这个HA服务器组,用于把参与HA的所有MySQL实例都填加进来:

mysqlfabric group create my_group
Password for admin:
Procedure :
{ uuid        = 292621fd-cddc-4cbb-8c0d-d8a264156679,
  finished    
= True,
  success    
= True,
 
return      = True,
  activities  
=
}

这样我们就创建了一个组名为my_group的HA服务器组。


十、填加HA组的成员


我们首先填加3691,具体如下:

mysqlfabric group add my_group 10.165.17.175:3691
Password for admin:
Procedure :
{ uuid        = 8d1c11f8-adc4-4321-8307-6296caeb07c1,
  finished    
= True,
  success    
= True,
 
return      = True,
  activities  
=
}

接下来填3692,具体如下:

mysqlfabric group add my_group 10.165.17.175:3692
Password for admin:
Procedure :
{ uuid        = b1fa3cb9-b86f-4b1a-88cb-e84babb2ab02,
  finished    
= True,
  success    
= True,
 
return      = True,
  activities  
=
}

如果屏幕回显示无error,那么说明成功填加了成员。我们也可以查看一下my_group里面的成员信息,具体如下:

mysqlfabric group lookup_servers my_group
Password for admin:
Command :
{ success     = True
 
return      = [{'status': 'SECONDARY', 'server_uuid': '6914a176-2370-11e4-af48-00163e004141', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '10.165.17.175:3691'}, {'status': 'SECONDARY', 'server_uuid': 'a8a69428-2366-11e4-af09-00163e004141', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '10.165.17.175:3692'}]
  activities  
=
}

大家可以看到,这2个实例都不是PRIMARY,说明刚刚搭建完的环境,系统是不会选举出PRIMARY的。


十一、选举一个主库


选举的方法也非常简单,具体如下:

mysqlfabric group promote my_group
Password for admin:
Procedure :
{ uuid        = 529380b9-10ef-409f-a1a9-9430ab9845a3,
  finished    
= True,
  success    
= True,
 
return      = True,
  activities  
=
}

可见执行成功了,并没有返回error。


接下来我们再次验证一下HA集群中各服务器情况。

mysqlfabric group lookup_servers my_group
Password for admin:
Command :
{ success     = True
 
return      = [{'status': 'SECONDARY', 'server_uuid': '6914a176-2370-11e4-af48-00163e004141', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '10.165.17.175:3691, {'status': 'PRIMARY', 'server_uuid': 'a8a69428-2366-11e4-af09-00163e004141', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.165.17.175:3692}]
  activities  
=
}

可见Fabric已经随机选举了一个Master角色。


十二、激活故障自动切换


即使Fabric选出了Master角色,但当这个Master宕机时,Fabric并不会自动将Secondary角色切换成Master角色,所以我们需要将HA配置成可以自动切换角色的样子,具体如下:

mysqlfabric group activate my_group
Password for admin:
Procedure :
{ uuid        = 518b7dad-06a4-45a8-bfd5-241396706b88,
  finished    
= True,
  success    
= True,
 
return      = True,
  activities  
=
}

当然,我们也可以依据具体需求取消Fabric故障自动切换。


十三、测试HA


在这个实验中,我们将3691实例停止,再看看Fabric的状态:

mysqlfabric group lookup_servers my_group
Password for admin:
Command :
{ success     = True
 
return      = [{'status': 'PRIMARY', 'server_uuid': '6914a176-2370-11e4-af48-00163e004141', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.165.17.175:3691}, {'status': 'FAULTY', 'server_uuid': 'a8a69428-2366-11e4-af09-00163e004141', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.165.17.175:3692}]
  activities  
=
}

其中3692实例的状态已经变成了“FAULTY”,可以看出Fabric自动检测到了这个故障,并且选举了slave重新当了primary角色。我不得不说就是这个功能,是它吸引我的原因之一。


十四、后续学习


关于后续的学习,大家要看看官网的用户手册,里面还有很多HA维护的方法,如增减节点等问题,同时目前Fabric也提供了phtyon和Java的API,可以供软件开发人员直接使用,以后的软件开发人员,不是再直接连接到MySQL实例,而是连接到Fabric,由Fabric来统一分发请求,这有些象MySQL Proxy,但它的应用前景要比MySQL Proxy更宽更广。

http://p.primeton.com/articles/53f5e4f6e138233dba000062


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MySQL在大型网站的应用架构演变
MySQL 数据库的高可用性分析
27.主库出问题了,从库怎么办undefined
hibernate id Generator
MySQL关于分库分表及其平滑扩容方案实例讲解
图解MySQL | [原理解析] MySQL使用固定的server_id导致数据丢失
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服