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链接:
http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-utilities-1.4.4.tgz
下载页面:
http://dev.mysql.com/downloads/tools/utilities
安装:

1
2
3
tar xvf mysql-utilities-1.4.4.tgz
cd mysql-utilities-1.4.4
python setup.py install

配置Mysql Fabric:

1、需要创建一个账号访问backing store,用户账号对数据库fabric必须有完全权限:

1
2
# mysql -uroot -h172.17.0.49 -p
   MySQL [(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地址,根据实际情况进行替换,账号和密码也根据实际情况进行替换。

2、对fabric进行管理的所有mysql服务器,需要对所有数据库创建拥有完全权限的用户,Mysql Fabric使用同样的用户帐户访问到所有Mysql服务器进行管理:

1
2
3
4
5
6
7
8
# mysql -uroot -h172.17.0.50 -padmin@123
   MySQL [(none)]> grant all on *.* to fabric@'172.17.42.1' identified by 'fabric@456';
   # mysql -uroot -h172.17.0.47 -padmin@123
   MySQL [(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@123
   MySQL [(none)]> grant all on *.* to fabric@'172.17.42.1' identified by 'fabric@456';
   Query OK, 0 rows affected (0.00 sec)  

建议不要使用root,为fabric创建单独的账号。
3、修改fabric配置文件:
默认配置文件:/usr/local/etc/mysql/fabric.cfg
在[storage]段设置backing store的用户账号和密码;

详细配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
         
   
         
# 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 = fabric
password =
[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 Fabric
ssl_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,CRITICAL
url = file:///var/log/fabric.log #存储日志的文件,能为绝对或相对路径(如是相对路径,将参照default段logdir参数指定的日志目录)
[sharding] #Fabric使用mysqldump和mysql客户端程序,执行移动和分离shards,指定程序的路径
mysqldump_program = /usr/bin/mysqldump
mysqlclient_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都错误后,才能提升新master,
detection_interval = 6 #连续检查之间的间隔时间
detection_timeout = 1 #错误检查程序尝试连接到一个组中服务器的超时时间
prune_time = 3600 #在错误日志中保留多久的错误信息
[connector] #Fabric-aware连接器连接到Fabric,获取组、shards、服务器的信息,缓存结果到本地的时长,以提高性能。
ttl = 1 #缓存生存时间,单位s,决定多长时间,连接器考虑一个信息从Fabric获取是有效的
[client]
password = 

4、State store创建fabric数据库和相关表:使用以上授权用户

1
2
3
4
5
6
7
8
# 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)

5、查看创建的表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
         
   
         
# 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             | #标识用户有什么权限访问到不同子系统的功能
+-------------------+

6、开启和停止mysql fabric Nodes:

使用mysqlfabric命令开启和停止mysql fabric节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
         
   
         
# 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监听端口:

1
2
# netstat -ntlp|grep python
    tcp        0      0 0.0.0.0:32274           0.0.0.0:*               LISTEN      15713/python   

停止fabric:

1
2
3
4
5
6
7
# mysqlfabric manage stop
   Password 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.

参考:
1、<< MySQL Fabric  A Guide to Managing MySQL High  Availability and Scaling Out >>、<<MySQL Fabric  >>
2、官方手册: http://dev.mysql.com/doc/mysql-utilities/1.5/en/fabric.html
原文地址:http://www.sxt.cn/u/324/blog/3014

转载于:https://www.cnblogs.com/thrillerz/p/4213318.html

Mysql Fabric实现学习笔记相关推荐

  1. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  2. mysql性能优化-学习笔记

    mysql性能优化-学习笔记

  3. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  4. mysql root密码忘记2018_MySQL数据库之2018-03-28设置及修改mysql用户密码学习笔记

    本文主要向大家介绍了MySQL数据库之2018-03-28设置及修改mysql用户密码学习笔记 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 退出mysql方法 quit或者e ...

  5. mysql的sqlyog学习笔记(查询部分)(代码用命令行显示 )

    索引 语言 查询 基础查询 select 查询列表 from 表名; 查询函数(调用函数,获取返回值) 起别名 +的作用 distinct的使用(去重) 查看表的结构 条件查询 按关系表达式筛选 按逻 ...

  6. mysql中depart_mysql 学习笔记

    1)net stop mysql net start mysql 2)c:\mysql\bin\mysqladmin flush-privileges      3)登陆mysql后,用flush p ...

  7. 如何查看mysql my.ini_MySQL学习笔记(一)

    MySQL  学习笔记 一.安装 Typical:经典安装 Custom:自定义安装 Complete: 完全安装 二.修改编码方式 [mysqld] myini:character-set-serv ...

  8. mysql over rank_SQL学习笔记 - 窗口函数OVER

    Window Function 窗口函数 Perform calculations on an already generated result set ( a window).(在已生成的结果集上执 ...

  9. MySQL快速上手[学习笔记](三)

    前言: 课程:<三大主流数据库快速上手>(点击跳转官方课程,b站有资源,可自搜) 笔记(点击跳转豆丁网) 此处是个人学习笔记,用作回顾用途 目录: 七.函数 八.视图 九.触发器 十.存储 ...

  10. MySQL快速上手[学习笔记](二)

    前言: 课程:<三大主流数据库快速上手>(点击跳转官方课程,b站有资源,可自搜) 笔记(点击跳转豆丁网) 此处是个人学习笔记,用作回顾用途 目录: 四.索引 五.增删改 六.SQL语句 四 ...

最新文章

  1. 在?三缺一,来斗个地主——肝个斗地主案例(java)
  2. 知识驱动的推荐系统:现状与展望
  3. 智能交通系统无人机派罚单,人脸成为下一个人牌号,人工智能下谁敢犯规
  4. linux 内核 netfilter 网络过滤模块 (4)-期望连接
  5. 为什么我使用了索引,查询还是慢?
  6. coreldraw 复制填充渐变色
  7. Java Web专题(一)
  8. Python程序开发——第三章 列表与元组
  9. linux运维和3dmax哪个简单,牛逼运维常用的工具系列-2
  10. Java基本数据类型及所占字节大小
  11. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
  12. [剑指offer][JAVA]面试题第[31]题[栈的压入、弹出序列][栈]
  13. mysql触发器的简单入门(二)
  14. MySQL的crash-safe原理详解
  15. 30 天精通 RxJS(29):30 天感言
  16. android版本大于26,装包的API等级(targetSdkVersion)必须等于或高于26,请从新打包上传...
  17. NVIDIA下载老版本驱动/CUDA/Video Codec SDK的链接
  18. Flask + PostgreSQL部署在Heroku上的薅羊毛线报网站
  19. 虚拟地址空间和物理地址空间
  20. java计算机毕业设计济南旅游网站源码+mysql数据库+系统+lw文档+部署

热门文章

  1. 比特币 POW 白皮书 区块篡改成功的概率计算详解
  2. 关于常量池的一些整理
  3. 基于springboot的学生选课系统
  4. java ssh2连接_通过JCraft的jsch包基于SSH2协议实现连接linux服务器提供终端操作的java工具实现类SftpUtil...
  5. php 面向对象编程(class)之从入门到崩溃 高级篇
  6. Redis基本命令及相关用法
  7. 九、Oracle学习笔记:聚合函数
  8. CSS3 box-shadow 设置元素阴影、text-shadow 设置文本阴影
  9. Windows 安装 Oracle Java JDK
  10. 阶段3 2.Spring_10.Spring中事务控制_3 作业-基于注解的AOP实现事务控制及问题分析_下...