Mysql Fabric用来管理mysql服务,提供扩展性和容易使用的系统,管理mysql分片和高可用部署(当前实现了两个特性:高可用和使用数据分片的横向扩展,能单独使用或结合使用这两个特性。)。
架构图:
应用请求一个扩展的mysql连接器版本,使用XML-RPC协议访问Fabric,当前可以使用python和J连接器。Fabric管理启动
GTIDs(全局事务标识)的mysql集合,检查和维护服务器之间的一致性。集合中的服务器叫高可用组。不属于Fabric高可用组的成员实例,叫备用存储(backing store)。
Fabric组织服务器在一个组(叫高可用组),管理不同分片或简单提供高可用。例如如果使用标准异步复制,Fabric可以配置自动监控mysql服务状态。如果组中当前master错误,组中有一个服务器能变成master,它选择一个新的服务器做为master。
除了高可用操作如故障转移和切换,Fabric也允许分片操作,如分片创建和移除。
高可用和数据分片在两个层实现:
1、 mysqlfabric进程处理任何管理请求,接收通过mysqlfabric命令行接口或其他支持XML/RPC接口的进程的管理任务。当使用HA特 性,该进程能监控master服务器,当master故障时能进行故障恢复,提升一个slave为新的master。mysql服务器的状态存储在 state store(一个mysql数据库实例),mysqlfabric进程也复制给连接器提供存储路由信息;
2、 应用代码使用mysql连接器访问数据库,从特定程序语言转换指令到Mysql wire protocol,与mysql服务器进程进行通信。Fabric-aware连接器存储从mysql fabric取来的路由信息缓存,使用这些信息发送事务或查询到正确的mysql服务器。当前支持Fabric-aware mysql连接器的有PHP、python和Java。该方法避免了发送所有查询到proxy引起的瓶颈。
高可用:
Mysql Fabric使用HA group管理两个或更多Mysql服务器,在任何时候,仅仅一个服务器为Primary(mysql master),其他服务器为Secondaries(mysql slave)。使用Mysql复制(异步或半同步)允许数据安全的复制。
mysql fabric提供两个HA可用性功能:
1、故障检测和提升
fabric进程监控HA group中的mysql master,如果服务器错误,将选择一个slave并提升到master(HA group中所有其他slave将从新master接收更新);
2、路由数据库请求
当fabric提升一个新的master,更新state store,新的路由信息将收录到连接器,并存储到缓存中。通过这种方式,应用不需要知道拓扑改变和写请求需要发送到不同的目标。
横向扩展-分片:
当因单个Mysql服务器(或HA group)因存储容量或写性能限制,mysql fabric能使用横向扩展数据库服务,分割数据到多个mysql服务器组。每个组可以是单个Mysql实例或HA group。
由管理员决定数据在服务器之间怎样进行分片,创建分片映射。
fabric支持两种shard key方法:
1、HASH
2、RANGE
当应用需要访问分片数据库,需要指定sharding key,Fabric-aware连接器将应用正确的range或hash映射和路由事务到正确分片;
mysql fabric能分离一个存在的分片到两个新的分片和更新state store,同时缓存路由数据到连接器。同时也支持从一个HA group移动分片到另外一个mysql服务组。
一个单事务或查询仅仅访问到单个shard,重要的选择shard keys基于理解数据和应用访问模式。
global tables写到'global group',任何附加或改变到这些表的数据将自动复制到所有其他组。模式改变也属于global group,复制到所有其他服务器,确保一致性。
分片架构图:
Fabric使用python语言编写,包括一个特殊的库实现所有功能。与Fabric交互,一个特殊的工具mysqlfabric提供一套命令,使用它创建和管理组,定义和维护分片等。
Fabric前提需求:
1、Mysql server版本>= 5.6.10,需要支持GTID;
2、Python版本 >= 2.6;
3、python连接器 >= 1.2.1,J连接器 >= 5.1.27;
4、一个mysql实例(mysql版本必须为5.6或以上版本)用于安装backing store,该服务不是Fabric HA组的成员;
5、应用利用Fabric,必须有一个Fabric-aware连接器安装在运行应用的系统上;
安装Mysql Fabric:
环境:
下载Fabric链接:
下载页面:
安装:
配置Mysql Fabric:
1、需要创建一个账号访问backing store,用户账号对数据库fabric必须有完全权限:
要保证用户root@'%'有with grant option授权,不然不能再给其他用户进行授权。
172.17.42.1为运行Fabric Node的服务器IP地址,根据实际情况进行替换,账号和密码也根据实际情况进行替换。
2、对fabric进行管理的所有mysql服务器,需要对所有数据库创建拥有完全权限的用户,Mysql Fabric使用同样的用户帐户访问到所有Mysql服务器进行管理:
建议不要使用root,为fabric创建单独的账号。
3、修改fabric配置文件:
默认配置文件:/usr/local/etc/mysql/fabric.cfg
在[storage]段设置backing store的用户账号和密码;
详细配置文件如下:
4、State store创建fabric数据库和相关表:使用以上授权用户
如果xmlrpc密码没有设置,将提示进行设置。
如果数据库已经存在,将报以下错:
[INFO] 1409095063.460048 - MainThread - Initializing persister: user (fabric), server (172.17.0.49:3306), database (fabric).
Error: ("Command (CREATE DATABASE fabric, ()) failed: 1007 (HY000): Can't create database 'fabric'; database exists", 1007)
5、查看创建的表:
6、开启和停止mysql fabric Nodes:
使用mysqlfabric命令开启和停止mysql fabric节点。
打印日志到标准输出,监听在[protocol.xmlrpm]段定义的端口。放置fabric到后台,使用--daemonize选项(
mysqlfabric manage start --daemonize),将打印日志到syslog(配置文件默认定义在/var/log/fabric.log ).
查看启动的xmlrpm监听端口:
停止fabric:
日志:
[INFO] 1409095626.823267 - XML-RPC-Session-1 - Executor has stopped.
[INFO] 1409095626.823651 - XML-RPC-Session-1 - Fabric node stopped.