设为首页 收藏本站
查看: 969|回复: 0

[经验分享] MySQL Fabric使用介绍01——高可用性HA

[复制链接]

尚未签到

发表于 2015-12-22 11:44:26 | 显示全部楼层 |阅读模式
  MySQL Fabric使用介绍01——高可用性HA
   
  MySQL FabricMySQL推出的用来管理一“群”服务器的系统,可以非常简单地用来部署管理MySQL的数据分片(Shading)和高可用性(High Availability)功能。
  在这里首先介绍一下高可用性功能的部署和使用。这里用Windows平台的MySQL为例。
一、需要的软件
  使用MySQLFabric功能需要下载如下软件:
   
1、 MySQL server 5.6.10以后的版本,Fabric功能需要GTID来实现。
  http://dev.mysql.com/downloads/mysql/
  为了在本机部署方便,推荐使用压缩版的MySQL,解压后简单配置即可使用,并且安装位置灵活。
2、 MySQL Connectors
  目前Connector/Python 1.2.1以后的版本和Connector/J 5.1.27以后的版本
  支持MySQLFabric
  本例使用Connector/Python
  http://dev.mysql.com/downloads/connector/python/
  选择下载Windows(Architecture Independent), MSI Installer Python 3.4 即可
3、 MySQL Utilities
  MySQL Fabric包含在MySQL Utilities里面,因此需要下载MySQLUtilities
  http://dev.mysql.com/downloads/utilities/
4、 Python
  需要使用Python2.6之后的版本,在Windows使用Python通常需要安装Python
  https://www.python.org/downloads/
  本例使用的是Python3.4.1
   
二、软件安装
  Windows的软件安装都比较简单,除了MySQLServer以外按照安装向导一直下一步即可,需要注意记住安装路径就可以了。
  MySQL Server由于是压缩版的,各位可以把它解压在任何路径下。因为MySQL Fabric是用来管理服务器群的系统,在本例中我们需要使用4MySQLServer实例来模拟4台服务器进行演示,因此将MySQL Server解压后,需要将里面的data文件夹复制3份放到不同的路径下面,详细设置请参照下一节。
   
三、系统环境设置
1、 文件设置
MySQLFabric构成里面需要一个Fabric管理节点,官方称之为backing store.,另外需要3MySQLServer服务器用来构成一主二从的高可用构成,一主二从主要利用了MySQL的复制功能,如果对MySQL的复制功能不了解,请参照
http://dev.mysql.com/doc/refman/5.6/en/replication.html
因此各个文件的路径如下:
1Fabric管理节点(backing storeC:\DEMO\Fabric\MGM  
2)将前一节提到的data文件夹分别复制到下面3个路径,同时分别做成3my.inidata文件夹放在同一路径下
MySQLServer服务器1的数据文件  C:\DEMO\Fabric\HA1\MySQL11\data
MySQLServer服务器2的数据文件  C:\DEMO\Fabric\HA1\MySQL12\data
MySQLServer服务器3的数据文件  C:\DEMO\Fabric\HA1\MySQL13\data
3MySQL Utilities的安装路径为C:\MySQLUtilities
4MySQL Fabric需要一个名为fabric.cfg的设置文件,该文件的路径为
MySQL Utilities的安装路径\etc\mysql 因此本例的路径为
C:\MySQLUtilities\etc\mysql\fabric.cfg
  下面是本例所使用的设置文件,[DEFAULT]里面是基本Fabric的基本信息,包括MySQLutility的安装位置,日志位置等等。[storage]里面是Fabric节点的相关信息,IP地址用户名和使用的fabric数据库名称。[servers]下面的三种用户对应上文提到的各个实例上的三个用户。 [protocol.xmlrpc]
  按照默认的填写即可,需要给出一个管理用户名和密码。
 
  [DEFAULT]
  prefix = C:\MySQLUtilities
  sysconfdir = C:\MySQLUtilities\etc\mysql
  logdir = C:\DEMO\Fabric
   
  [storage]
  address = localhost:3310
  user = root
  password =  
  database = fabric
  auth_plugin = mysql_native_password
  connection_timeout = 6
  connection_attempts = 6
  connection_delay = 1
   
  [servers]
  user = root
  password =  
  unreachable_timeout = 5
   
  backup_user = root
  backup_password =
   
  restore_user = root
  restore_password =  
   
  [protocol.xmlrpc]
  address = localhost:32274
  threads = 5
  user = admin
  password = 123654
  disable_authentication = no
  realm = MySQL Fabric
  ssl_ca =  
  ssl_cert =  
  ssl_key =  
   
  [protocol.mysql]
  address = localhost:32275
  user = admin
  password = 123654
  disable_authentication = no
  ssl_ca =  
  ssl_cert =  
  ssl_key =  
   
  [executor]
  executors = 5
   
  [logging]
  level = INFO
  url = C:\DEMO\Fabric\fabric.log
   
  [sharding]
  mysqldump_program =C:/DEMO/Fabric/MGM/bin/mysqldump.exe
  mysqlclient_program =C:/DEMO/Fabric/MGM/bin/mysql.exe
  prune_limit = 10000
   
  [statistics]
  prune_time = 3600
   
  [failure_tracking]
  notifications = 300
  notification_clients = 50
  notification_interval = 60
  failover_interval = 0
  detections = 3
  detection_interval = 6
  detection_timeout = 1
  prune_time = 3600
   
  [connector]
  ttl = 1
   
  [client]
  password =  
 
 
5)此外,包括Fabric管理节点在内,所有的MySQL实例均需要配置文件my.ini,这个文件的位置可以由用户自行决定,只需在启动MySQL服务的时候指定该文件位置即可。本例使用与data文件夹平行的路径,
例如: C:\DEMO\Fabric\HA1\MySQL11\my.ini
启动MySQL实例的命令为:  
>mysqld–defaults-file= C:\DEMO\Fabric\HA1\MySQL11\my.ini
各个实例的配置文件请参照下例,注意更改一下端口号和服务器ID和文件路径即可:
basedir使用的均为管理节点的MySQLdatadir是上面各个实例的数据文件位置)
  # For advice on how to change settings please see
  #http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
  # *** DO NOT EDIT THIS FILE. It's a template whichwill be copied to the
  # *** default location during install, and will bereplaced if you
  # *** upgrade to a newer version of MySQL.
   
  [mysqld]
   
  # Remove leading # and set to the amount of RAM forthe most important data
  # cache in MySQL. Start at 70% of total RAM fordedicated server, else 10%.
  # innodb_buffer_pool_size = 128M
   
  # Remove leading # to turn on a very important dataintegrity option: logging
  # changes to the binary log between backups.
   log_bin
   gtid_mode=ON
   log-slave-updates  
   enforce-gtid-consistency
   
  # These are commonly set, remove the # and set asrequired.
   basedir =C:\DEMO\Fabric\MGM
   datadir =C:\DEMO\Fabric\HA1\MySQL11\data
   port = 3311
   server_id = 11
   
   
  # Remove leading # to set options mainly useful forreporting servers.
  # The server defaults are faster for transactionsand fast SELECTs.
  # Adjust>
  # join_buffer_size = 128M
  # sort_buffer_size = 2M
  # read_rnd_buffer_size = 2M  
   
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
   
 
2、 数据库设置
  Fabric的使用需要4种数据库用户,分别是:Backing store user Server user Backup userRestore user。各个用户的权限不一样,详情请参照
  http://dev.mysql.com/doc/mysql-utilities/1.6/en/fabric-create-user.html
  除了管理节点用户需要在管理节点实例上建立,其余的3个用户需要在每台实例上分别建立。如果处于对fabric进行功能验证的目的,用一个统一的用户即可本例使用安装后默认的root
  用户设置好之后需要进行Fabric节点的数据安装,正常需要执行如下命令:>mysqlfabricmanage setup --param=storage.user=fabric --param=storage.password=secret
  但是本例中只使用了一个用户因此变成:
  > C:\MySQLUtilities\mysqlfabricmanage setup --param=storage.user=root
   
  正常安装后,查看名为fabric的数据库即可看到如下结构:
+-------------------+

|      Tables       |

+-------------------+

| checkpoints       |

| error_log         |

| group_replication |

| groups            |

| permissions       |

| role_permissions  |

| roles             |

| servers           |

| shard_maps        |

| shard_ranges      |

| shard_tables      |

| shards            |

| user_roles        |

| users             |

+-------------------+

   
   
四、高可用性功能测试
1、 启动所有的MySQL实例:
  C:\DEMO\Fabric\MGM\bin\mysqld--defaults-file=C:\DEMO\Fabric\MGM\my.ini
  C:\DEMO\Fabric\MGM\bin\mysqld--defaults-file=C:\DEMO\Fabric\HA1\MySQL11\my.ini
  C:\DEMO\Fabric\MGM\bin\mysqld--defaults-file=C:\DEMO\Fabric\HA1\MySQL12\my.ini
  C:\DEMO\Fabric\MGM\bin\mysqld--defaults-file=C:\DEMO\Fabric\HA1\MySQL13\my.ini
   
2、 建立高可用群
  C:\MySQLUtilities\mysqlfabric group create my_group
  C:\MySQLUtilities\mysqlfabric group add my_grouplocalhost:3311
  C:\MySQLUtilities\mysqlfabric group add my_grouplocalhost:3312
  C:\MySQLUtilities\mysqlfabric group add my_grouplocalhost:3313
  这四条命令的意思为建立一个名为my_group的群,然后向此群中加入3个服务器,localhost:3311即为服务器的地址。
  建立好组群之后需要让Fabric来挑选一台服务器作为主服务器:
  C:\MySQLUtilities\mysqlfabric group promotemy_group
  执行成功之后,可以选择执行下面的命令来让Fabric在主服务器发生故障时,自动进行切换
  C:\MySQLUtilities\mysqlfabric group activatemy_group
  可以通过mysqlfabricgroup lookup_servers my_group 来查看该群的服务器状态。
  至此,一个高可用的可以自动切换的MySQL主从服务器群就设置好了,大家可以使用下面的Pyhson代码来进行测试一下了。另外需要注意的一点是,当要对群里面的服务器进行停机维护的时候需要先将其从群主里面摘除,然后再进行维护,如果不这样Fabric将会认为该服务器已经坏掉,会自动切换。去除服务器可以执行下面的命令:
  C:\MySQLUtilities\mysqlfabric group demote my_group
  C:\MySQLUtilities\mysqlfabric group remove my_group98d34488-c956-11e4-a915-f82fa8e5f8eb
  后面的一长串是UUID各位在添加服务器的时候就会看到,删除服务器的时候选定对应的UUID即可。
   
  import mysql.connector
  from mysql.connector import fabric
   
  def add_employee(conn, emp_no, first_name,last_name):
      conn.set_property(group="my_group",mode=fabric.MODE_READWRITE)
      cur =conn.cursor()
      cur.execute("USE employees")
      cur.execute(
          "INSERT INTO employees VALUES (%s, %s, %s)",
          (emp_no, first_name, last_name)
          )
      # We needto keep track of what we have executed in order to,
      # atleast, read our own updates from a slave.
      cur.execute("SELECT @@global.gtid_executed")
      for rowin cur:
          print("Transactions executed on the master", row[0])
          return row[0]
   
  def find_employee(conn, emp_no, gtid_executed):
      conn.set_property(group="my_group", mode=fabric.MODE_READONLY)
      cur =conn.cursor()
      #Guarantee that a slave has applied our own updates before
      # readinganything.
      cur.execute(
          "SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('%s', 0)" %
          (gtid_executed, )
      )
      for rowin cur:
          print("Had to synchronize", row, "transactions.")
      cur.execute("USE employees")
      cur.execute(
          "SELECT first_name, last_name FROM employees "
          "WHERE emp_no = %s", (emp_no, )
          )
      for rowin cur:
          print("Retrieved", row)
   
  # Address of the Fabric, not the host we are goingto connect to.
  conn = mysql.connector.connect(
      fabric={"host" : "localhost", "port" :32274,
              "username": "admin", "password" :"123654"
             },
      user="root",  
  #    password="123654",  
                autocommit=True
      )
   
  conn.set_property(group="my_group",mode=fabric.MODE_READWRITE)
  cur = conn.cursor()
  cur.execute("CREATE DATABASE IF NOT EXISTSemployees")
  cur.execute("USE employees")
  cur.execute("DROP TABLE IF EXISTSemployees")
  cur.execute(
      "CREATE TABLE employees ("
      "   emp_no INT, "
      "   first_name CHAR(40),"
      "   last_name CHAR(40)"
      ")"
      )
   
  gtid_executed = add_employee(conn, 12,"John", "Doe")
  find_employee(conn, 12, gtid_executed)
   
  各位可以将上面的代码保存为test_fabric_query.py   
  然后执行 >pythontest_fabric_query.py
  结果为 (u'John',u'Doe')

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-154731-1-1.html 上篇帖子: mysql cluster 7.38 集群安装 rpm安装方式 下篇帖子: mysql5.6的online ddl功能测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表