您好,欢迎访问一九零五行业门户网

MySQL原生HA方案 – Fabric体验之旅

还在为mysql ha方案的选型头疼吗?现在不用了,自从2014年5月28日oracle发布fabric之后,一切都变得如此简单。因为是原生的官方产品,可以放心使用,由于这款产品大力的增强了ha效率,可以看出oracle对云计算的支持力度,说明oracle这个大象也可跳舞,而且还
还在为mysql ha方案的选型头疼吗?现在不用了,自从2014年5月28日oracle发布fabric之后,一切都变得如此简单。因为是原生的官方产品,可以放心使用,由于这款产品大力的增强了ha效率,可以看出oracle对云计算的支持力度,说明oracle这个大象也可跳舞,而且还挺灵活的。
官方对fabric的介绍主要是它提供了mysql的ha和sharding方案,本文主要讨论fabric在mysql ha方面的表现以及搭建部署流程。我的团队试着搭建了一下,简直无法再简单了,这对于dba来说绝对是一个大福音,这个产品在接下来的几年中必然会被大量应用到生产环境中去,我的团队对这个产品的未来充满信心。
接下来我们将循序渐进的带领大家感受fabric带来的乐趣。
一、实验环境
本例的实验环境是在一台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。
三、安装mysqlutilities
rpm包的安装还是挺简单的,具体如下:
rpm -ivh mysql-utilities-1.4.4-1.el6.noarch.rpmpreparing... ########################################### [100%] 1:mysql-utilities ########################################### [100%][root@
装完后执行
mysqlfabric
如果有回显说明安装完毕。
四、建立backingstore帐号
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_passworddatabase = fabricuser = fabricaddress = 10.165.17.175:3306connection_delay = 1connection_timeout = 6password = secretconnection_attempts = 6
其中address = 10.165.17.175:3306是backing store的mysql实例,password =secret是上一步中建立连接fabric数据库的用户密码。
修改其中的[servers]部分,具体如下:
[servers]password = secret user = fabric
其中是password = secret 是ha环境中各实例的连接密码。
六、填充backingstore信息
我们通过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-bingtid-mode=onenforce-gtid-consistencylog_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_grouppassword 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:3691password 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:3692password for admin: procedure :{ uuid = b1fa3cb9-b86f-4b1a-88cb-e84babb2ab02, finished = true, success = true, return = true, activities = }
如果屏幕回显示无error,那么说明成功填加了成员。我们也可以查看一下my_group里面的成员信息,具体如下:
mysqlfabric group lookup_servers my_grouppassword 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_grouppassword for admin: procedure :{ uuid = 529380b9-10ef-409f-a1a9-9430ab9845a3, finished = true, success = true, return = true, activities = }
可见执行成功了,并没有返回error。
接下来我们再次验证一下ha集群中各服务器情况。
mysqlfabric group lookup_servers my_grouppassword 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_grouppassword 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_grouppassword 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更宽更广。
作者简介:
盘古,目前主要推动公益性it项目的发展,51linux.net联合创建人,该网站主要为那些学习linux或数据库技术的同学提供免费linux服务器。
免费订阅“csdn云计算(左)和csdn大数据(右)”微信公众号,实时掌握第一手云中消息,了解最新的大数据进展!
csdn发布虚拟化、docker、openstack、cloudstack、数据中心等相关云计算资讯,     分享hadoop、spark、nosql/newsql、hbase、impala、内存计算、流计算、机器学习和智能算法等相关大数据观点,提供云计算和大数据技术、平台、实践和产业信息等服务。
其它类似信息

推荐信息