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也允许分片操作,如分片创建和移除。

高可用和数据分片在两个层实现:

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. tar xvf mysql-utilities-1.4.4.tgz
  2. cd mysql-utilities-1.4.4
  3. python setup.py install

配置Mysql Fabric:

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

  1. # mysql -uroot -h172.17.0.49 -p
  2. MySQL [(none)]> grant all on fabric.* to [email protected]‘172.17.42.1‘ identified by ‘[email protected]‘;

要保证用户[email protected]‘%‘有with grant option授权,不然不能再给其他用户进行授权。

172.17.42.1为运行Fabric Node的服务器IP地址,根据实际情况进行替换,账号和密码也根据实际情况进行替换。

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

  1. # mysql -uroot -h172.17.0.50 [email protected]
  2. MySQL [(none)]> grant all on *.* to [email protected]‘172.17.42.1‘ identified by ‘[email protected]‘;
  3. # mysql -uroot -h172.17.0.47 [email protected]
  4. MySQL [(none)]> grant all on *.* to [email protected]‘172.17.42.1‘ identified by ‘[email protected]‘;
  5. Query OK, 0 rows affected (0.00 sec)
  6. # mysql -uroot -h172.17.0.48 [email protected]
  7. MySQL [(none)]> grant all on *.* to [email protected]‘172.17.42.1‘ identified by ‘[email protected]‘;
  8. Query OK, 0 rows affected (0.00 sec)

建议不要使用root,为fabric创建单独的账号。

3、修改fabric配置文件:

默认配置文件:/usr/local/etc/mysql/fabric.cfg

在[storage]段设置backing store的用户账号和密码;

详细配置文件如下:

  1. # cat /etc/mysql/fabric.cfg    
  2. [DEFAULT] #如果请求的选项没有在命令行指定,或没有在配置文件找到,Fabric将查看该段的信息
  3. prefix = 
  4. sysconfdir = /etc #配置文件存放目录
  5. logdir = /var/log #日志文件存储位置,绝对路径,由守护进程创建
  6. [storage] #配置backing store相关的选项
  7. address = 172.17.0.49:3306 #指定state store的mysql实例地址和端口
  8. user = fabric #连接到mysql实例的用户名
  9. password = [email protected] #认证密码,也能设置空密码
  10. database = fabric #存储Fabric表的数据库
  11. auth_plugin = mysql_native_password #设置使用的认证插件
  12. connection_timeout = 6 #中断请求之前等待的最大时间,单位秒
  13. connection_attempts = 6 #创建连接的最大尝试次数
  14. connection_delay = 1 #连续尝试创建连接之间的延时时间,默认1s
  15. [servers]
  16. user = fabric
  17. password = 
  18. [protocol.xmlrpc] #该段定义Fabric接收通过XML-RPC协议的请求
  19. address = 0.0.0.0:32274 #标识Fabric使用的主机和端口,接收XML-RPC请求
  20. threads = 5 #XML-RPC会话线程的并发创建数,决定多少并发请求Fabric能接受
  21. user = admin #用户名,认证命令行请求
  22. password = #用户密码,认证命令行请求
  23. disable_authentication = no #是否启用命令行请求需要认证,默认要认证
  24. realm = MySQL Fabric
  25. ssl_ca =  #使用ssl认证方式,指定PEM格式文件,包含信任SSL证书的列表
  26. ssl_cert =  #SSL认证文件,用于创建安全的连接
  27. ssl_key =  #SSL key文件
  28. [executor] #通过XML-RPC接收到的请求,映射到程序能立即执行或通过队列执行者,保证冲突的请求处理按序执行。通常读操作立即执行通过XML-RPC会话线程,写操作通过执行者
  29. executors = 5 #多少线程用于执行者
  30. [logging] #设置Fabric日志信息记录到哪里,如果不是开启为后台进程,将打印日志到标准输出
  31. level = INFO #日志级别,支持DEBUG,INFO,WARNING,ERROR,CRITICAL
  32. url = file:///var/log/fabric.log #存储日志的文件,能为绝对或相对路径(如是相对路径,将参照default段logdir参数指定的日志目录)
  33. [sharding] #Fabric使用mysqldump和mysql客户端程序,执行移动和分离shards,指定程序的路径
  34. mysqldump_program = /usr/bin/mysqldump
  35. mysqlclient_program = /usr/bin/mysql
  36. [statistics]
  37. prune_time = 3600 #删除大于1h的条目
  38.  
  39. [failure_tracking] #连接器和其他外部实体能报告错误,fabric保持跟踪服务器健康状态和采取相应的行为,如提升一个新的master,如果一个服务器时不稳定的,但不是master,将简单的标记为错误。
  40. notifications = 300 #多少次报告错误后,将标志服务器不可用
  41. notification_clients = 50 #多少不同源报告错误
  42. notification_interval = 60 #评估错误数的统计时间
  43. failover_interval = 0 #为了避免整个系统不可用,自上次提升间隔多少秒后,新master才能选取
  44. detections = 3 #为了缓解fabric,提供内建的错误检查,如果错误检查启动监控一个组,需要连续尝试3(默认)次访问当前master都错误后,才能提升新master,
  45. detection_interval = 6 #连续检查之间的间隔时间
  46. detection_timeout = 1 #错误检查程序尝试连接到一个组中服务器的超时时间
  47. prune_time = 3600 #在错误日志中保留多久的错误信息
  48.  
  49. [connector] #Fabric-aware连接器连接到Fabric,获取组、shards、服务器的信息,缓存结果到本地的时长,以提高性能。
  50. ttl = 1 #缓存生存时间,单位s,决定多长时间,连接器考虑一个信息从Fabric获取是有效的
  51. [client]
  52. password = 

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

  1. # mysqlfabric manage setup --param=storage.user=fabric [email protected]
  2. [INFO] 1409095183.577010 - MainThread - Initializing persister: user (fabric), server (172.17.0.49:3306), database (fabric).
  3. Finishing initial setup
  4. =======================
  5. Password for admin user is not yet set.
  6. Password for admin/xmlrpc: 
  7. Repeat Password: 
  8. 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. # mysql -ufabric -h172.17.0.49 [email protected] -e "show tables from fabric";
  2. +-------------------+
  3. | Tables_in_fabric  |
  4. +-------------------+
  5. | checkpoints       | #存储程序执行信息,在crash后,能安全的恢复执行程序
  6. | error_log         | #服务器错误报告信息
  7. | group_replication | #定义复制,global groups和分片组,主要用于shard splitting,moving和global updates?
  8. | group_view        |
  9. | groups            | #包含管理组信息
  10. | log               |
  11. | permissions       | #包含权限信息,访问到不同fabric子系统,当前仅仅定义了core子系统
  12. | proc_view         |
  13. | role_permissions  | #表关联的角色和权限
  14. | roles             | #包含用户角色的信息
  15. | servers           | #包含fabric管理的所有服务器信息
  16. | shard_maps        | #?包含名字和分片属性的映射
  17. | shard_ranges      | #分片索引和使用映射分片key到分片
  18. | shard_tables      | #所有分片的表
  19. | shards            | #存储每个分片标识
  20. | user_roles        |
  21. | users             | #标识用户有什么权限访问到不同子系统的功能
  22. +-------------------+

6、开启和停止mysql fabric Nodes:

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

  1. # mysqlfabric manage start
  2. [INFO] 1409095475.657850 - MainThread - Initializing persister: user (fabric), server (172.17.0.49:3306), database (fabric).
  3. [INFO] 1409095475.661201 - MainThread - Loading Services.
  4. [INFO] 1409095475.672051 - MainThread - Fabric node starting.
  5. [INFO] 1409095475.731098 - MainThread - Starting Executor.
  6. [INFO] 1409095475.731155 - MainThread - Setting 5 executor(s).
  7. [INFO] 1409095475.731395 - Executor-0 - Started.
  8. [INFO] 1409095475.731866 - Executor-1 - Started.
  9. [INFO] 1409095475.732208 - Executor-2 - Started.
  10. [INFO] 1409095475.732892 - Executor-3 - Started.
  11. [INFO] 1409095475.733379 - Executor-4 - Started.
  12. [INFO] 1409095475.733472 - MainThread - Executor started.
  13. [INFO] 1409095475.738050 - MainThread - Starting failure detector.
  14. [INFO] 1409095475.738533 - XML-RPC-Server - XML-RPC protocol server (‘0.0.0.0‘, 32274) started.
  15. [INFO] 1409095475.738774 - XML-RPC-Server - Setting 5 XML-RPC session(s).
  16. [INFO] 1409095475.739004 - XML-RPC-Session-0 - Started XML-RPC-Session.
  17. [INFO] 1409095475.739263 - XML-RPC-Session-1 - Started XML-RPC-Session.
  18. [INFO] 1409095475.739442 - XML-RPC-Session-2 - Started XML-RPC-Session.
  19. [INFO] 1409095475.739922 - XML-RPC-Session-3 - Started XML-RPC-Session.
  20. [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. # netstat -ntlp|grep python
  2. tcp        0      0 0.0.0.0:32274           0.0.0.0:*               LISTEN      15713/python   

停止fabric:

  1. # mysqlfabric manage stop
  2. Password for admin: #输入xmlrpc的密码
  3. Command :
  4. { success     = True
  5.   return      = True
  6.   activities  = 
  7. }

日志:

[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

时间: 2024-09-28 12:26:44

Mysql Fabric实现学习笔记(转载)的相关文章

MySql学习笔记(转载)

/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld --skip-grant-tables-- 修改root密码密码加密函数password()update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- /* 数据库操

Mysql(个人学习笔记20170321-20170328)

Mysql(个人学习笔记20170321-20170328) 数据库定义:按数据结构组织,存储,管理数据的仓库 常见数据库:Mysql,Oracle,Sql server 数据库由二维表组成,表格由若干记录,每条记录由若干字段组成 理解为Excel的话 列为字段,行为记录 设计数据库步骤 1,确定功能列表 2,确定可见数据参数类型 常用类型有 Int 整数型 Float 小数 Varchar(长度) char(长度) 字符串 (赋值需要单引号) 区别:varchar 长度可变,不足位数自动取消,

MYSQL数据库基础学习笔记

一.mysql的安装与初始化: 安装mysql命令: yum install -y mysql-server mysql mysql-devel 初始化: service mysqld start   //第一次启动mysqld服务会自动初始化: 创建用户并初始化密码: mysqladmin -u root passwd '密码' 登陆mysql: mysql -u root -p 退出mysql: quit.exit 设置mysqld服务自启动: chkconfig mysqld on mys

MYSQL视图的学习笔记

MYSQL视图的学习笔记,学至Tarena金牌讲师何山,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表.视图就像一个窗口(数据展示的窗口),通过这个窗口,可以看到系统专门提供的数据(也可以查看到数据表的全部数据),使用视图就可以不用看到数据表中的所有数据,而是只想得到所需的数据. 在数据库中,只存放了视图的定义,并没有存放视图的数据,数据还是存储在原来的表里,视图的数据是依赖原来表中的

Python装饰器的学习笔记(转载)

Python装饰器的学习笔记 2017-05-18 程序员共读 来自:标点符的<Python装饰器的学习笔记> 链接:http://www.biaodianfu.com/python-decorator.html 原文:http://stackoverflow.com/questions/739654/how-to-make-a-chain-of-function-decorators-in-python#answer-1594484 装饰器(decorator)是一种高级Python语法.可

mysql基础命令学习笔记

这里不会涉及一些mysql数据库安装之类的知识,但是会将自己学习以及使用mysql一些最常用的mysql语句总结到本篇文章,作为自己的学习记录和笔记.基本的环境为CentOS 6.5 数据库为mysql5.6.30. 1.启动和停止Mysql服务 1.  /etc/init.d/mysql restar   #重启 2.  /etc/init.d/mysql stop     #停止 3.  /etc/init.d/mysql start    #启动 4.  /etc/init.d/mysql

Mysql 数据库基础 学习笔记

数据库基础 数据库是存储数据的仓库,实现数据共享,减少数据冗余,采用特定的数据类型,具有较高的数据独立性,具有数据控制功能. 表 ,是一个二维数组,用来存储数据和操作数据的逻辑结构. 数据类型,整数数据类型,浮点数数据类型,精确小数类型,二进制数据类型,日期/时间数据类型,字符串数据类型. 主键 用于唯一标示表中的每条记录.可以定义一列或多了主键.主键不能相同. 数据库技术构成   硬件,软件共同构成 数据库系统,数据库,数据库管理系统(DBMS),数据库应用程序. SQL 语言  结构化查询语

各种mysql视频的学习笔记

打开二进制日志(二进制日志内容:更改数据库的操作) 在/etc/mysql/my.cnf中 将log_bin这一行的注释去掉就开启了后面的是保存的路径 下面的expire_logs_days是过多久,Mysql自动删除二进制日志 max_binlog_size为最大二进制日志大小 注意重启mysql后刚刚的修改才生效 shell>sudo service mysql stop shell>sudo service mysql start 然后登入mysql 每次登陆后都会生成二进制日志 我的二

mysql性能优化学习笔记(1)优化目的、方向及数据库准备

前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlercn老师所讲的<性能优化之mysql优化>,根据老师所讲的内容整理所得. 一.为什么需要优化mysql数据库  1.避免出现页面访问错误          由于数据库连接超时产生的5xx错误          由于慢查询造成页面无法加载          由于阻塞造成数据无法提交       2.增