Mysql Fabric实现学习笔记

Mysql Fabric用来管理mysql服务,提供扩展性和容易使用的系统,管理mysql分片和高可用部署(当前实现了两个特性:高可用和使用数据分片的横向扩展,能单独使用或结合使用这两个特性。)。

架构图:


应用请求一个扩展的mysql链接器版本,使用XML-RPC协议访问Fabric,当前可使用python和J链接器。Fabric管理启动 GTIDs(全局事务标识)的mysql集合,检查和维护服务器之间的一致性。集合中的服务器叫高可用组。不属于Fabric高可用组的成员实例,叫备用存储(backing store)。

Fabric组织服务器在一个组(叫高可用组),管理不一样分片或简单提供高可用。例如若是使用标准异步复制,Fabric能够配置自动监控mysql服务状态。若是组中当前master错误,组中有一个服务器能变成master,它选择一个新的服务器作为master。

除了高可用操做如故障转移和切换,Fabric也容许分片操做,如分片建立和移除。

高可用和数据分片在两个层实现:
一、mysqlfabric进程处理任何管理请求,接收经过mysqlfabric命令行接口或其余支持XML/RPC接口的进程的管理任务。当使用HA特性,该进程能监控master服务器,当master故障时能进行故障恢复,提高一个slave为新的master。mysql服务器的状态存储在state store(一个mysql数据库实例),mysqlfabric进程也复制给链接器提供存储路由信息;

二、应用代码使用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可用性功能:
一、故障检测和提高
fabric进程监控HA group中的mysql master,若是服务器错误,将选择一个slave并提高到master(HA group中全部其余slave将重新master接收更新);

二、路由数据库请求
当fabric提高一个新的master,更新state store,新的路由信息将收录到链接器,并存储到缓存中。经过这种方式,应用不须要知道拓扑改变和写请求须要发送到不一样的目标。



横向扩展-分片:
当因单个Mysql服务器(或HA group)因存储容量或写性能限制,mysql fabric能使用横向扩展数据库服务,分割数据到多个mysql服务器组。每一个组能够是单个Mysql实例或HA group。


由管理员决定数据在服务器之间怎样进行分片,建立分片映射。

fabric支持两种shard key方法:
一、HASH
二、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前提需求:
一、Mysql server版本>= 5.6.10,须要支持GTID;
二、Python版本 >=    2.6;
三、python链接器 >=    1.2.1,J链接器 >=    5.1.27;
四、一个mysql实例(mysql版本必须为5.6或以上版本)用于安装backing store,该服务不是Fabric HA组的成员;
五、应用利用Fabric,必须有一个Fabric-aware链接器安装在运行应用的系统上;

安装Mysql Fabric:
环境:


下载Fabric连接:

下载页面:

安装:
    
    
    
    
    
tar xvf mysql-utilities-1.4.4.tgzcd mysql-utilities-1.4.4python setup.py install

配置Mysql Fabric:
一、须要建立一个帐号访问backing store,用户帐号对数据库fabric必须有彻底权限:
    
    
    
    
    
# mysql -uroot -h172.17.0.49 -pMySQL [(none)]> grant all on fabric.* to fabric@'172.17.42.1' identified by 'fabric@123';

要保证用户root@'%'有with grant option受权,否则不能再给其余用户进行受权。
172.17.42.1为运行Fabric Node的服务器IP地址,根据实际状况进行替换,帐号和密码也根据实际状况进行替换。

二、对fabric进行管理的全部mysql服务器,须要对全部数据库建立拥有彻底权限的用户,Mysql Fabric使用一样的用户账户访问到全部Mysql服务器进行管理:
    
    
    
    
    
# mysql -uroot -h172.17.0.50 -padmin@123MySQL [(none)]> grant all on *.* to fabric@'172.17.42.1' identified by 'fabric@456';# mysql -uroot -h172.17.0.47 -padmin@123MySQL [(none)]> grant all on *.* to fabric@'172.17.42.1' identified by 'fabric@456';Query OK, 0 rows affected (0.00 sec)# mysql -uroot -h172.17.0.48 -padmin@123MySQL [(none)]> grant all on *.* to fabric@'172.17.42.1' identified by 'fabric@456';Query OK, 0 rows affected (0.00 sec)

建议不要使用root,为fabric建立单独的帐号。

三、修改fabric配置文件:
默认配置文件:/usr/local/etc/mysql/fabric.cfg
在[storage]段设置backing store的用户帐号和密码;
详细配置文件以下:
    
    
    
    
    
  1. 执行移动和分离shards,指定程序的路径
  2. 条目
  3. 提高新master,
# cat /etc/mysql/fabric.cfg    [DEFAULT] #若是请求的选项没有在命令行指定,或没有在配置文件找到,Fabric将查看该段的信息prefix = sysconfdir = /etc #配置文件存放目录logdir = /var/log #日志文件存储位置,绝对路径,由守护进程建立[storage] #配置backing store相关的选项address = 172.17.0.49:3306 #指定state store的mysql实例地址和端口user = fabric #链接到mysql实例的用户名password = fabric@123 #认证密码,也能设置空密码database = fabric #存储Fabric表的数据库auth_plugin = mysql_native_password #设置使用的认证插件connection_timeout = 6 #中断请求以前等待的最大时间,单位秒connection_attempts = 6 #建立链接的最大尝试次数connection_delay = 1 #连续尝试建立链接之间的延时时间,默认1s[servers]user = fabricpassword = [protocol.xmlrpc] #该段定义Fabric接收经过XML-RPC协议的请求address = 0.0.0.0:32274 #标识Fabric使用的主机和端口,接收XML-RPC请求threads = 5 #XML-RPC会话线程的并发建立数,决定多少并发请求Fabric能接受user = admin #用户名,认证命令行请求password = #用户密码,认证命令行请求disable_authentication = no #是否启用命令行请求须要认证,默认要认证realm = MySQL Fabricssl_ca =  #使用ssl认证方式,指定PEM格式文件,包含信任SSL证书的列表ssl_cert =  #SSL认证文件,用于建立安全的链接ssl_key =  #SSL key文件[executor] #经过XML-RPC接收到的请求,映射到程序能当即执行或经过队列执行者,保证冲突的请求处理按序执行。一般读操做当即执行经过XML-RPC会话线程,写操做经过执行者executors = 5 #多少线程用于执行者[logging] #设置Fabric日志信息记录到哪里,若是不是开启为后台进程,将打印日志到标准输出level = INFO #日志级别,支持DEBUG,INFO,WARNING,ERROR,CRITICALurl = file:///var/log/fabric.log #存储日志的文件,能为绝对或相对路径(如是相对路径,将参照default段logdir参数指定的日志目录)[sharding] #Fabric使用mysqldump和mysql客户端程序,mysqldump_program = /usr/bin/mysqldumpmysqlclient_program = /usr/bin/mysql[statistics]prune_time = 3600 #删除大于1h的
[failure_tracking] #链接器和其余外部实体能报告错误,fabric保持跟踪服务器健康状态和采起相应的行为,如提高一个新的master,若是一个服务器时不稳定的,但不是master,将简单的标记为错误。notifications = 300 #多少次报告错误后,将标志服务器不可用notification_clients = 50 #多少不一样源报告错误notification_interval = 60 #评估错误数的统计时间failover_interval = 0 #为了不整个系统不可用,自上次提高间隔多少秒后,新master才能选取detections = 3 #为了缓解fabric,提供内建的错误检查,若是错误检查启动监控一个组,须要连续尝试3(默认)次访问当前master都错误后,才能detection_interval = 6 #连续检查之间的间隔时间detection_timeout = 1 #错误检查程序尝试链接到一个组中服务器的超时时间prune_time = 3600 #在错误日志中保留多久的错误信息
[connector] #Fabric-aware链接器链接到Fabric,获取组、shards、服务器的信息,缓存结果到本地的时长,以提升性能。ttl = 1 #缓存生存时间,单位s,决定多长时间,链接器考虑一个信息从Fabric获取是有效的[client]password = 

四、State store建立fabric数据库和相关表:使用以上受权用户
    
    
    
    
    
# mysqlfabric manage setup --param=storage.user=fabric --param=storage.password=fabric@123[INFO] 1409095183.577010 - MainThread - Initializing persister: user (fabric), server (172.17.0.49:3306), database (fabric).Finishing initial setup=======================Password for admin user is not yet set.Password for admin/xmlrpc: Repeat Password: Password set.

若是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)

五、查看建立的表:
    
    
    
    
    
# mysql -ufabric -h172.17.0.49 -pfabric@123 -e "show tables from fabric";+-------------------+| Tables_in_fabric  |+-------------------+| checkpoints       | #存储程序执行信息,在crash后,能安全的恢复执行程序| error_log         | #服务器错误报告信息| group_replication | #定义复制,global groups和分片组,主要用于shard splitting,moving和global updates| group_view        | | groups            | #包含管理组信息| log               || permissions       | #包含权限信息,访问到不一样fabric子系统,当前仅仅定义了core子系统| proc_view         || role_permissions  | #表关联的角色和权限| roles             | #包含用户角色的信息| servers           | #包含fabric管理的全部服务器信息| shard_maps        | #​包含名字和分片属性的映射| shard_ranges      | #分片索引和使用映射分片key到分片| shard_tables      | #全部分片的表| shards            | #存储每一个分片标识| user_roles        | | users             | #标识用户有什么权限访问到不一样子系统的功能+-------------------+

六、开启和中止mysql fabric Nodes:
使用mysqlfabric命令开启和中止mysql fabric节点。
    
    
    
    
    
# mysqlfabric manage start[INFO] 1409095475.657850 - MainThread - Initializing persister: user (fabric), server (172.17.0.49:3306), database (fabric).[INFO] 1409095475.661201 - MainThread - Loading Services.[INFO] 1409095475.672051 - MainThread - Fabric node starting.[INFO] 1409095475.731098 - MainThread - Starting Executor.[INFO] 1409095475.731155 - MainThread - Setting 5 executor(s).[INFO] 1409095475.731395 - Executor-0 - Started.[INFO] 1409095475.731866 - Executor-1 - Started.[INFO] 1409095475.732208 - Executor-2 - Started.[INFO] 1409095475.732892 - Executor-3 - Started.[INFO] 1409095475.733379 - Executor-4 - Started.[INFO] 1409095475.733472 - MainThread - Executor started.[INFO] 1409095475.738050 - MainThread - Starting failure detector.[INFO] 1409095475.738533 - XML-RPC-Server - XML-RPC protocol server ('0.0.0.0', 32274) started.[INFO] 1409095475.738774 - XML-RPC-Server - Setting 5 XML-RPC session(s).[INFO] 1409095475.739004 - XML-RPC-Session-0 - Started XML-RPC-Session.[INFO] 1409095475.739263 - XML-RPC-Session-1 - Started XML-RPC-Session.[INFO] 1409095475.739442 - XML-RPC-Session-2 - Started XML-RPC-Session.[INFO] 1409095475.739922 - XML-RPC-Session-3 - Started XML-RPC-Session.[INFO] 1409095475.740434 - XML-RPC-Session-4 - Started XML-RPC-Session.

打印日志到标准输出,监听在[protocol.xmlrpm]段定义的端口。放置fabric到后台,使用--daemonize选项( mysqlfabric manage start --daemonize),将打印日志到syslog(配置文件默认定义在/var/log/fabric.log ).

查看启动的xmlrpm监听端口:
    
    
    
    
    
# netstat -ntlp|grep pythontcp        0      0 0.0.0.0:32274           0.0.0.0:*               LISTEN      15713/python   

中止fabric:
    
    
    
    
    
# mysqlfabric manage stopPassword for admin: #输入xmlrpc的密码Command :{ success     = True  return      = True  activities  = }

日志:
[INFO] 1409095626.823267 - XML-RPC-Session-1 - Executor has stopped.
[INFO] 1409095626.823651 - XML-RPC-Session-1 - Fabric node stopped.

参考:
一、<< MySQL Fabric  A Guide to Managing MySQL High  Availability and Scaling Out >>、<<MySQL Fabric  >>




相关文章
相关标签/搜索