MySQL Fabric使用介绍01——高可用性HA

MySQL Fabric使用介绍01——高可用性HA

 

MySQL Fabric是MySQL推出的用来管理一“群”服务器的系统,可以非常简单地用来部署管理MySQL的数据分片(Shading)和高可用性(High Availability)功能。

在这里首先介绍一下高可用性功能的部署和使用。这里用Windows平台的MySQL为例。

一、需要的软件

使用MySQL的Fabric功能需要下载如下软件:

 

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以后的版本

支持MySQL
Fabric,

本例使用Connector/Python

http://dev.mysql.com/downloads/connector/python/

选择下载Windows
(Architecture Independent), MSI Installer Python 3.4 即可

3、 MySQL Utilities

MySQL Fabric包含在MySQL Utilities里面,因此需要下载MySQL
Utilities

http://dev.mysql.com/downloads/utilities/

4、 Python

需要使用Python2.6之后的版本,在Windows使用Python通常需要安装Python

https://www.python.org/downloads/

本例使用的是Python3.4.1

 

二、软件安装

Windows的软件安装都比较简单,除了MySQL
Server以外按照安装向导一直下一步即可,需要注意记住安装路径就可以了。

MySQL Server由于是压缩版的,各位可以把它解压在任何路径下。因为MySQL Fabric是用来管理服务器群的系统,在本例中我们需要使用4个MySQL
Server实例来模拟4台服务器进行演示,因此将MySQL Server解压后,需要将里面的data文件夹复制3份放到不同的路径下面,详细设置请参照下一节。

 

三、系统环境设置

1、 文件设置

MySQL
Fabric构成里面需要一个Fabric管理节点,官方称之为backing store.,另外需要3个MySQL
Server服务器用来构成一主二从的高可用构成,一主二从主要利用了MySQL的复制功能,如果对MySQL的复制功能不了解,请参照

http://dev.mysql.com/doc/refman/5.6/en/replication.html

因此各个文件的路径如下:

1)Fabric管理节点(backing store)C:\DEMO\Fabric\MGM

2)将前一节提到的data文件夹分别复制到下面3个路径,同时分别做成3个my.ini与data文件夹放在同一路径下

MySQL
Server服务器1的数据文件  C:\DEMO\Fabric\HA1\MySQL11\data

MySQL
Server服务器2的数据文件  C:\DEMO\Fabric\HA1\MySQL12\data

MySQL
Server服务器3的数据文件  C:\DEMO\Fabric\HA1\MySQL13\data

3)MySQL Utilities的安装路径为C:\MySQLUtilities

4)MySQL 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使用的均为管理节点的MySQL,datadir是上面各个实例的数据文件位置)

# 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 which
will be copied to the

# *** default location during install, and will be
replaced if you

# *** upgrade to a newer version of MySQL.

 

[mysqld]

 

# Remove leading # and set to the amount of RAM for
the most important data

# cache in MySQL. Start at 70% of total RAM for
dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

 

# Remove leading # to turn on a very important data
integrity 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 as
required.

 basedir =
C:\DEMO\Fabric\MGM

 datadir =
C:\DEMO\Fabric\HA1\MySQL11\data

 port = 3311

 server_id = 11

 

 

# Remove leading # to set options mainly useful for
reporting servers.

# The server defaults are faster for transactions
and fast SELECTs.

# Adjust sizes as needed, experiment to find the
optimal values.

# 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节点的数据安装,正常需要执行如下命令:>mysqlfabric
manage setup --param=storage.user=fabric --param=storage.password=secret

但是本例中只使用了一个用户因此变成:

> C:\MySQLUtilities\mysqlfabric
manage 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_group
localhost:3311

C:\MySQLUtilities\mysqlfabric group add my_group
localhost:3312

C:\MySQLUtilities\mysqlfabric group add my_group
localhost:3313

这四条命令的意思为建立一个名为my_group的群,然后向此群中加入3个服务器,localhost:3311即为服务器的地址。

建立好组群之后需要让Fabric来挑选一台服务器作为主服务器:

C:\MySQLUtilities\mysqlfabric group promote
my_group

执行成功之后,可以选择执行下面的命令来让Fabric在主服务器发生故障时,自动进行切换

C:\MySQLUtilities\mysqlfabric group activate
my_group

可以通过mysqlfabric
group lookup_servers my_group 来查看该群的服务器状态。

至此,一个高可用的可以自动切换的MySQL主从服务器群就设置好了,大家可以使用下面的Pyhson代码来进行测试一下了。另外需要注意的一点是,当要对群里面的服务器进行停机维护的时候需要先将其从群主里面摘除,然后再进行维护,如果不这样Fabric将会认为该服务器已经坏掉,会自动切换。去除服务器可以执行下面的命令:

C:\MySQLUtilities\mysqlfabric group demote my_group

C:\MySQLUtilities\mysqlfabric group remove my_group
98d34488-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 need
to keep track of what we have executed in order to,

    # at
least, read our own updates from a slave.

    cur.execute("SELECT @@global.gtid_executed")

    for row
in 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

    # reading
anything.

    cur.execute(

        "SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('%s', 0)" %

        (gtid_executed, )

    )

    for row
in 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 row
in cur:

        print
("Retrieved", row)

 

# Address of the Fabric, not the host we are going
to 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 EXISTS
employees")

cur.execute("USE employees")

cur.execute("DROP TABLE IF EXISTS
employees")

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 ,

然后执行 >python
test_fabric_query.py

结果为 (u'John',
u'Doe')

时间: 2024-10-18 18:20:37

MySQL Fabric使用介绍01——高可用性HA的相关文章

Mysql 优化详细介绍

Mysql 优化详细介绍 MySQL 提供了很多参数进行服务器的设置, MySQL 在安装的时候提供几个默认的参数文件供选择,分别是: my-small.cnf . my-medium.cnf . my-large.cnf . my-huge.cnf . my-innodb-heavy-4G.cnf ,从文件名我们可以看出该配置文件适合的应用规模.通常情况下,我们可以选择使用接近自己的系统规模的配置文件,但是系统默认的参数在不同的生产环境可能不能完全满足实际的应用需求,我们可以再按照实际情况对部

VMware vSphere 5.1群集详解(一) 介绍vSphere高可用性

关于作者 Duncan Epping 是VMware 技术市场部首席架构师,Dun是vSphere HA和VMware vCloud云套件的架构设计师,是VMware公司首批认证的设计专家(VCDX 007)- -(这里就不多译) Tim2009认为这是VMware虚拟化方面的一本专业好书,故使用google.有道.大学英语结合虚拟化项目实践翻译成中文,希望有用. 知识点 这本书是关于VMware产品的,仅代表个人观点,文章中的内容没有经过VMware公司的核准,也没有必要体现VMware的观点

甲骨文宣布MySQL Fabric全面上市

北京,http://www.aliyun.com/zixun/aggregation/33721.html">2014年5月28日--为了满足当下对Web及云应用需求,甲骨文宣布推出MySQL Fabric.MySQL Fabric是一款可简化管理MySQL数据库群的整合式系统.该产品通过故障检测和故障转移功能提供了高可用性,同时通过自动数据分片功能实现可扩展性. 为持续推动MySQL的创新,甲骨文宣布MySQL Fabric全面上市.MySQL Fabric是一开源框架,能够管理MySQ

MySQL默认数据库介绍

MySQL默认数据库介绍 大家在学习MySQL时,安装后都会发现里边已经自带了几个默认的数据库,我装的MySQL5.5里边自带六个数据库 网上查了一些资料对这几个数据库的功能做一下学习. 1.information_schema 这个库中有很多的表 information_schema数据库表说明: SCHEMATA表:提供了当前mysql实例中所有数据库的信息.是show databases的结果取之此表. TABLES表:提供了关于数据库中的表的信息(包括视图).详细表述了某个表属于哪个sc

MySQL Semisynchronous Replication介绍

  这篇文章主要介绍了MySQL Semisynchronous Replication介绍,本文讲解了Semisynchronous Replication 定义.,需要的朋友可以参考下 前言 MySQL 5.5版本之前默认的复制是异步(Asynchronous )模式的, MySQL 5.5 以plugins的方式提供了Semisynchronous Replication 模式.在介绍 semi sync 之前,我们先了解:半同步 Asynchronous 和 同步 Synchronous

【JavaScript】DOM节点常用方法介绍01

DOM节点常用方法介绍01 1.查找元素节点 1.1getElementById()       寻找一个有着给定 id 属性值的元素,返回值是一个有着给定id属性值的元素节点.如果不存在这样的元素,它返回null. var oElement = document.getElementById ( sID )      该方法只能用于document对象 例子: <pre name="code" class="html"><!DOCTYPE htm

Mysql Explain 详细介绍_Mysql

Mysql Explain 这里做一个资料的全面整理. 一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二.explain输出解释 +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | typ

什么是高可用性(HA)?HA是什么

本文讲的是什么是高可用性(HA)?HA是什么,[IT168 资讯]高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性.它与被认为是不间断操作的容错技术有所不同.HA系统是目前企业防止核心计算机系统因故障停机的最有效手段. 高可用性(HA)的功能 1.软件故障监测与排除 2.备份和数据保护 3.管理站能够监视各站点的运行情况,能随时或定时报告系统运行状况,故障能及时报告和告警,并有必要的控制

MySQL数据库引擎介绍、区别、创建和性能测试的深入分析_Mysql

数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎:     ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数.因此,ISAM执