1. 程式人生 > >Mysql Fabric HA配置測試

Mysql Fabric HA配置測試

MySQL FabricOracle官方推出的原生mysql高可用性系統,它可以簡化管理MySQL資料庫群,它提供兩大特性,一是通過故障檢測和故障轉移功能提供了高可用性,一是通過自動資料分片功能實現可擴充套件性。本文件只說明自動故障轉移-高可用性的實現。


一、測試環境

功能

IP

Master

192.168.247.132

3306

Slave

192.168.247.133

3306

Fabric state store

192.168.247.4

3306

Fabric 管理程序

192.168.247.4

32274

系統環境要求如下:

MySQL Servers (version 5.6.10 or later)

         ·Backing store database server

         ·Application database servers

Python 2.6 or 2.7

         ·No support for 3.x yet

python聯結器1.2.1以上

二、下載Fabric

Fabric目前是被打包到了MySQL Utilities中,所以大家下載MySQL Utilities就可以了,下載地址是:,目前版本是:1.5.3,在本例中我們下載的是 mysql-utilities-1.5.3-1.el6.noarch.rpm

Mysql-python聯結器下載地址:http://dev.mysql.com/downloads/connector/python/,本例中我們下載mysql-connector-python-2.0.2-1.el6.noarch.rpm

三、安裝聯結器和MySQL Utilities

rpm包的安裝還是挺簡單的,具體如下:

rpm -ivh mysql-connector-python-2.0.2-1.el6.noarch.rpm

rpm -ivh mysql-utilities-1.5.3-1.el6.noarch.rpm

裝完後執行

mysqlfabric

如果有回顯說明安裝完畢。

四、建立

Backing Store帳號

Backing Store用於儲存整個HA叢集的伺服器等相關配置,它需要一個MySQL例項來儲存這些資訊,這個例項的版本需要跟其它在HA中的MySQL例項版本保持一致,而且必須是5.6.10及更高的版本,我們在本例中選擇192.168.247.43306例項來使用。Fabric管理程序和Backing Store例項可以是在兩臺不同的機器,測試中我們共用192.168.247.4

建立一個帳號來連線Backing StoreMySQL例項,這個帳號需要有對fabric資料庫的管理員級許可權,具體如下:

GRANT ALL ON fabric.* TO [email protected]'%' IDENTIFIED BY '[email protected]';

FLUSH PRIVILEGES;

五、Fabric配置檔案

Fabric配置檔案預設位置是:/etc/mysql/fabric.cfg

修改其中的[storage]部分,具體如下:

[storage]

auth_plugin = mysql_native_password

database = fabric

user = fabric    #連線state store例項fabric庫的使用者名稱

address = 192.168.247.4:3306       #指定state store的mysql例項地址和埠

connection_delay = 1      #連續嘗試連線間隔,單位秒

connection_timeout = 6    #連線超時時間,單位秒

password = [email protected]     #使用者密碼

connection_attempts = 6   #連線嘗試連線的次數

修改其中的[servers]部分,具體如下:

[servers]

password = [email protected]     #連線HA組中例項的使用者密碼

user = fabric    #連線HA組中各例項的使用者名稱

修改其中的[protocol.xmlrpc]部分,具體如下:

[servers]

user = admin     #管理賬號

address = localhost:32274                   #fabric程序的伺服器地址及埠號

password = abc123     #管理賬號密碼

六、填充Backing Store資訊

我們通過執行以下命令來生成fabric資料庫,具體如下:

mysqlfabric manage setup

[INFO] 1421226952.410291 - MainThread - Initializing persister: user(fabric), server (192.168.247.4:3306), database (fabric).

Finishing initial setup

=======================

Password for admin user is not yet set.

Password for admin/xmlrpc:

Repeat Password:

Password set.

Password set.

No result returned

期間會提示Fabric的管理員帳戶admin沒有設定密碼,按提示設定密碼。

連線state store例項可以看到新建立了一個fabfic資料庫及相關儲存配置資訊的表。

mysql> use fabric;

mysql> show tables;

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

| Tables_in_fabric  |

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

| checkpoints       |

| error_log         |

| group_replication |

| group_view        |

| groups            |

| log               |

| machines          |

| permissions       |

| proc_view         |

| providers         |

| role_permissions  |

| roles             |

| servers           |

| shard_maps        |

| shard_ranges      |

| shard_tables      |

| shards            |

| user_roles        |

| users             |

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

七、配置HA中主從MySQL節點帳號

本例中132133例項是需要做成HA的,它們需要建個管理員許可權的帳號,該賬號將用於fabric連線HA中的各例項,以及用於replication。注意帳號名也要跟fabric state store例項保持一致,本例中需要是fabric,具體如下:

GRANT ALL ON *.* TO [email protected]'192.168.247.%' IDENTIFIED BY '[email protected]';

FLUSH PRIVILEGES;

同時,由於fabric是基於GTID主從複製,所以這些例項中必須要啟用GTID,它們的配置檔案要有這些引數:

log-bin

gtid-mode=ON

enforce-gtid-consistency

log_slave_updates

八、啟動fabric

我們用下面的命令來啟動fabric

mysqlfabric manage start
[[email protected] Desktop]# mysqlfabric manage start &
[1] 8131
[[email protected] Desktop]# [INFO] 1421227750.407190 - MainThread - Initializing persister: user (fabric), server (192.168.247.4:3306), database (fabric).
[WARNING] 1421227750.428230 - MainThread - Provider error: No module named novaclient.
[INFO] 1421227750.428522 - MainThread - Loading Services.
[INFO] 1421227750.447799 - MainThread - MySQL-RPC protocol server started, listening on localhost:32275
[INFO] 1421227750.467301 - MainThread - Fabric node starting.
[INFO] 1421227750.470832 - MainThread - Starting Executor.
[INFO] 1421227750.470945 - MainThread - Setting 5 executor(s).
[INFO] 1421227750.471722 - Executor-0 - Started.
[INFO] 1421227750.474404 - Executor-1 - Started.
[INFO] 1421227750.477835 - Executor-2 - Started.
[INFO] 1421227750.480265 - Executor-3 - Started.
[INFO] 1421227750.482358 - MainThread - Executor started.
[INFO] 1421227750.485552 - Executor-4 - Started.
[INFO] 1421227750.527671 - MainThread - Starting failure detector.
[INFO] 1421227750.541374 - XML-RPC-Server - XML-RPC protocol server ('127.0.0.1', 32274) started.
[INFO] 1421227750.541887 - XML-RPC-Server - Setting 1 XML-RPC session(s).
[INFO] 1421227750.542572 - XML-RPC-Session-0 - Started XML-RPC-Session.

九、建立HA伺服器組

這個HA伺服器組,用於把參與HA的所有MySQL例項都填加進來:

mysqlfabric group create mygroup
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                                uuid finished success result
------------------------------------ -------- ------- ------
612e53c8-87b7-4e97-b714-ffbe38a977e0        1       1      1

這樣我們就建立了一個組名為mygroupHA伺服器組。

十、填加HA組的成員

我們首先填加192.168.247.1323306,具體如下:

mysqlfabric group add mygroup 192.168.247.132:3306
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                                uuid finished success result
------------------------------------ -------- ------- ------
a918fe34-2acd-4868-9689-1080be3e9b69        1       1      1

接下來填192.168.247.1333306,具體如下:

mysqlfabric group add mygroup 192.168.247.133:3306
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                                uuid finished success result
------------------------------------ -------- ------- ------
97c06a94-10ad-4897-b40e-5a3e9e56bfa2        1       1      1

如果螢幕回顯示無error,那麼說明成功填加了成員。我們也可以檢視一下mygroup裡面的成員資訊,具體如下:

mysqlfabric group lookup_servers mygroup
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                         server_uuid              address    status      mode weight
------------------------------------ -------------------- --------- --------- ------
032bb536-73af-11e4-ba8b-000c2978e187 192.168.247.132:3306 SECONDARY READ_ONLY    1.0
c505ce10-9bc0-11e4-bfd4-000c290e7abe 192.168.247.133:3306 SECONDARY READ_ONLY    1.0  

可以看到有2個例項,但這2個例項都不是PRIMARY,因為剛新增組成員,是不會自動選舉出PRIMARY的。

十一、選舉一個主庫

選舉的方法也非常簡單,具體如下:

mysqlfabric group promote mygroup
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                                uuid finished success result
------------------------------------ -------- ------- ------
84f51361-83c5-466d-97ae-b6e9e497a4bf        1       1      1

執行成功了,沒有返回error

我們再次檢視一下HA叢集中各伺服器情況:

mysqlfabric group lookup_servers mygroup
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                         server_uuid              address    status       mode weight
------------------------------------ -------------------- --------- ---------- ------
032bb536-73af-11e4-ba8b-000c2978e187 192.168.247.132:3306   PRIMARY READ_WRITE    1.0
c505ce10-9bc0-11e4-bfd4-000c290e7abe 192.168.247.133:3306 SECONDARY  READ_ONLY    1.0

可見192.168.247.1323306已經被隨機選舉成為Master角色。

十二、啟用故障自動切換

即使Fabric選出了Master角色,但當這個Master宕機時,Fabric並不會自動將Secondary角色切換成Master角色,所以我們需要將HA配置成可以自動切換角色的樣子,具體如下:

mysqlfabric group activate mygroup
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                                uuid finished success result
------------------------------------ -------- ------- ------
9422543d-6847-4242-ba8b-b737544c440        1       1      1

當然,我們也可以使用deactivate命令需求取消Fabric故障自動切換。

十三、測試HA

在這個實驗中,我們將192.168.247.1323306例項停止,再看看Fabric的狀態:

mysqlfabric group lookup_servers mygroup
Password for admin: 
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                         server_uuid              address  status       mode weight
------------------------------------ -------------------- ------- ---------- ------
032bb536-73af-11e4-ba8b-000c2978e187 192.168.247.132:3306  FAULTY READ_WRITE    1.0
c505ce10-9bc0-11e4-bfd4-000c290e7abe 192.168.247.133:3306 PRIMARY READ_WRITE    1.0 

其中192.168.247.1323306例項的狀態已經變成了“FAULTY”,可以看出Fabric自動檢測到了這個故障,並且選舉了slave重新當了primary角色。

重新啟動192.168.247.1323306再檢視HA組狀態:

mysqlfabric group lookup_servers mygroup
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                         server_uuid              address  status       mode weight
------------------------------------ -------------------- ------- ---------- ------
032bb536-73af-11e4-ba8b-000c2978e187 192.168.247.132:3306  FAULTY READ_WRITE    1.0
c505ce10-9bc0-11e4-bfd4-000c290e7abe 192.168.247.133:3306 PRIMARY READ_WRITE    1.0 

可以看到即使132例項已恢復正常,但它在HA組中的狀態不會自動恢復,需要手動改變伺服器狀態,支援的狀態值為primary,secondary,spare,faulty

mysqlfabric server set_status c505ce10-9bc0-11e4-bfd4-000c290e7abe secondary
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
ServerError: Cannot change server's (032bb536-73af-11e4-ba8b-000c2978e187) status from (FAULTY) to (SECONDARY).

我們要把132例項變更成secondary狀態,由上可見,FAULTY狀態不允許直接變更變SECONDARY狀態,必須先變更成spare狀態(避免寫和讀訪問,同時保證當故障切換時不會被選取),然後再變更成secondary。

mysqlfabric server set_status 032bb536-73af-11e4-ba8b-000c2978e187 spare
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                                uuid finished success result
------------------------------------ -------- ------- ------
c66afff7-cb9a-4064-a402-10e0a05b3be2        1       1      1

檢視狀態,132例項已成功更改為spare狀態

mysqlfabric group lookup_servers mygroupFabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                         server_uuid              address  status       mode weight
------------------------------------ -------------------- ------- ---------- ------
032bb536-73af-11e4-ba8b-000c2978e187 192.168.247.132:3306   SPARE    OFFLINE    1.0
c505ce10-9bc0-11e4-bfd4-000c290e7abe 192.168.247.133:3306 PRIMARY READ_WRITE    1.0

再變更為secondary狀態:

mysqlfabric server set_status 032bb536-73af-11e4-ba8b-000c2978e187 secondary
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                                uuid finished success result
------------------------------------ -------- ------- ------
530ad1ce-ba74-4c3d-96a9-9edeb497d5d2        1       1      1

檢視狀態,132例項已成功變為secondary狀態:

mysqlfabric group lookup_servers mygroupFabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
                         server_uuid              address    status       mode weight
------------------------------------ -------------------- --------- ---------- ------
032bb536-73af-11e4-ba8b-000c2978e187 192.168.247.132:3306 SECONDARY  READ_ONLY    1.0
c505ce10-9bc0-11e4-bfd4-000c290e7abe 192.168.247.133:3306   PRIMARY READ_WRITE    1.0

十四、常用相關命令

mysqlfabricgroup create mygroup          #建立HA

mysqlfabricgroup destroy mygroup        #刪除HA

mysqlfabricgroup add mygroup 192.168.247.132:3306     #新增組成員

mysqlfabricgroup remove mygroup c505ce10-9bc0-11e4-bfd4-000c290e7abe   #移出組成員

mysqlfabricgroup lookup_servers mygroup  #檢視組成員

mysqlfabricgroup promote mygroup      #選舉master

mysqlfabric groupactivate mygroup        #啟用自動故障轉移

mysqlfabric group deactivatemygroup           #禁用自動故障轉移

mysqlfabric serverset_status server_uuid status #變更伺服器狀態

mysqlfabrichelp manage   #manage命令幫助

mysqlfabrichelp group     #group命令幫助

mysqlfabrichelp server      #server命令幫助

總結:

1.      程式必須通過Fabric-aware connectors來實現路由,目前只支援PHP,Python 和Java;

2.      mysql例項進行恢復後,fabric不會自動改變例項的狀態,需要手工修改;

3.      fabric state store和fabric note當前是單點,mysqlfabric程序本身不提供容錯,出現故障時需要重啟,當mysql fabric不可用時,fabric-aware聯結器能夠通過本地的cache繼續路由操作(配置ttl值);

4.      基於GTID的複製本身存在一些限制。

附兩個測試指令碼:

1.建立表測試指令碼:

#test.py

import sys

import mysql.connector

from mysql.connector import fabric

def main():

   try:

       conn = mysql.connector.connect(

           fabric ={"host":"localhost","port":32274,"username":"admin",

                     "password":"abc123"},

           user = 'root',database = 'test',password = 'abc123',autocommit =True

       )

   except Exception,e:

       print e

       sys.exit(1)

   else:

       conn.set_property(mode=fabric.MODE_READWRITE,group="mygroup")

       cur = conn.cursor()

       cur.execute(

           "CREATE TABLE IF NOT EXISTS t1 ("

       " id INT,"

       " first_name varchar(40),"

       " last_name varchar(40)"

       ")"

       ) 

   finally:

       conn.close()

if __name__ == '__main__':

   main() 

2.插入資料測試指令碼:

#test2.py

import sys

import mysql.connector

from mysql.connector import fabric

defadd_subscriber(conn,id,first_name,last_name):

   conn.set_property(group="mygroup",mode=fabric.MODE_READWRITE)

   cur = conn.cursor()

   cur.execute(

       "INSERT INTO t1 VALUES (%s,%s,%s)",

                 (id,first_name,last_name)

    )

def main():

   try:

       conn = mysql.connector.connect(

           fabric ={"host":"localhost","port":32274,"username":"admin",

                     "password":"abc123"},

           user="root",database="test",password="abc123",autocommit=True

       )

   except Exception,e:

       print e

       sys.exit(1)

   else:

       #conn.set_property(group="mygroup",mode=fabric.MODE_READWRITE)

       add_subscriber(conn, 1, "Tom", "Jerry")

       add_subscriber(conn, 2, "Jack", "Tom")

       add_subscriber(conn, 3, "Lily", "Lee")

   finally:

       conn.close()

if __name__ == '__main__':

   main()

相關推薦

Mysql Fabric HA配置測試

MySQL Fabric是Oracle官方推出的原生mysql高可用性系統,它可以簡化管理MySQL資料庫群,它提供兩大特性,一是通過故障檢測和故障轉移功能提供了高可用性,一是通過自動資料分片功能實現可擴充套件性。本文件只說明自動故障轉移-高可用性的實現。 一、測試環境

VCSA 6.5 HA 配置之五:故障轉移測試

center style justify 接著上篇文章配置完成VCSA的高可用後,其是否真的能實現高可用的效果,本篇文章將會一探究竟手動故障切換在vCenter HA配置頁面可以看到當前的主動節點、被動節點和見證節點;在例行維護或者其他時候可以手動執行故障切換通過右上方的"啟動故障切換" ,在一般

測試MySQL Fabric用於replication的實驗

        今天測試了MySQL Fabric用於replication的實驗,感覺MySQL的官方文件說的不是很清楚,特別是Fabric的配置檔案解釋的不清楚。習慣了Oracle的官方文件的條理清晰。測試過程如下: == centos 6.3_x86 == no

mysql 雙主配置 基於docker 測試 及資料恢復測試

基於docker 1.10.3 映象地址:https://hub.docker.com/_/mysql/ docker 相關的我就不介紹了,如果不是docker 也沒有關係,自己裝兩個mysql  命

Linux 首先基本包安裝(vim啊什麼的),源,源優化,專案架構介紹, (LNMuWsgi)Django專案相關軟體mysql,redies,python(相關模組)安裝配置測試

內容 補充: 檢視已啟動服務的埠 netstat -tulnp |grep 80(方式1) ss -tulnp|grep 80(方式2) 前期鋪墊: 1. Linux要能上網 2. 掌握Linux軟體包安裝方法 2.1 rpm包管理 軟體包格式:名字-版本-平臺-rpm 建議

1 複習ha相關 + weekend110的hive的元資料庫mysql方式安裝配置(完全正確配法)(CentOS版本)(包含解除安裝系統自帶的MySQL

本博文的主要內容是:   .複習HA相關   .MySQL資料庫   .先在MySQL資料庫中建立hive資料庫   .hive的配置 以下是Apache Hadoop HA的總結。分為hdfs HA和yarn HA。      以上,是參考《

openstack HA配置-Mysql

概念 環境準備 兩個控制節點 host: controller1 IP: 192.168.0.20 host: controller2 IP: 192.168.0.21 hosts檔案 分別在controller1和controll

VCSA 6.5 HA配置 之三 :準備工作

vmware vcenter ha 高可用 vcsa 接著上一篇文章部署完成VCSA 6.5後,還需要做一些準備工作才能開啟高可用功能,本篇文章主要就講述如何為vCenter 高可用進行準備工作配置vCenter HA網絡從vCenter HA的架構圖中可以看出對於vCenter HA的高

mysql主從同步配置

這就是 sla star 失敗 有效 bin roo orm 相同 文件同步 rsync同步http://www.cnblogs.com/itech/archive/2009/08/10/1542945.html 在當前的生產工作中,大多數應用的mysql主從同步都是異步的

Mac下安裝MySQL(含配置

.tar.gz 界面 take 8.4 通過 -1 pass 查看 pack 首先需要下載 MySQL Community Server 下載地址:https://dev.mysql.com/downloads/mysql/ 進入MySQL的下載界面(https:

Wowza 部署 安裝 配置 測試 直播

provider vid cdata desc stc ini cal 127.0.0.1 spa 下載,最好用快的IP下好後傳到需要的節點上,下面鏈接不能下載的情況下百度谷歌必應找資源,jdk舊版在oracle需登錄方可下載 JDK1.6 wget -c http:/

mysql定時任務配置

通過 start mysq tro 註釋 否則 執行 存儲過程 time 做項目有時會遇到一些狀態需要每天定時去維護,我的方案是寫成sql語句或者存儲過程,再配置mysql調度器讓數據庫每天去執行。廢話不多說,直接進去正文: 假如當前時間是2016-12-28 12:05:

[flask實踐] 解決qq郵箱/mysql的相關配置問題

信息 fig config connect 我們 web服務 哪些 流程 點擊 筆者經過flask web(Miguel著,封面是一條狗)一書的學習,打算實現一個旅遊類網站,在此過程中發現,相對於書中的flasky博客程序,需要作出一些改變: 1. 註冊郵箱:國內要使用12

Mysql安裝與配置調優

mysql clas -c 丟失 mysql命令行 其中 oot grep art 一、安裝apt-get install mysql-server 需要設置賬號密碼 apt-get isntall mysql-client apt-get libmysqlclient-d

Hadoop-HA配置詳細步驟

eno col ice nbsp 版本 files tab des frame 1. HA服務器配置 對hdfs做高可用 1.1服務器詳情 服務器:centos7 Hadoop:2.6.5 Jdk:1.8 共四臺服務器 192.168.1.111 node1 192

Mysql MHA(GTID)配置(實操)

.sql 後臺 trigger pat log-bin global ges disable 監測 實現環境   centos6.7   MYSQL5.6.36   主:192.168.1.191   從1:192.168.1.145   從2:192.168.1.146

阿裏雲服務器 ECS 部署lamp:centos+apache+mysql+php安裝配置方法 (centos7)

ever linux 命令 port server sel kcon linu 開機 阿裏雲服務 阿裏雲服務器 ECS 部署lamp:centos+apache+mysql+php安裝配置方法 (centos7) 1.效果圖 1 2. 部署步驟 1 1. mysql安裝附加

mysql 安裝與配置

配置 sql數據庫 def 移除 logs mys l數據庫 mysql數據庫 cnblogs 查資料發現是CentOS 7 版本將MySQL數據庫軟件從默認的程序列表中移除,用mariadb代替了。 有兩種解決辦法: 安裝mariadb [[email prot

MySQL(一)安裝配置

ins 解決 互聯 更改 then ip地址 con 裝配 數據庫操作 1、安裝配置 cd d:\mysql\bin mysqld --initialize--insecure # 初始化服務器 mysqld # 啟動服務器 mysqld --

【CentOS6.5】MySQL安裝和配置

配置 entos alt tro images .com centos ges mys 1./etc/my.cnf 這是mysql的主配置文件 2、數據存放位置 3、錯誤存放位置 【CentOS6.5】MySQL安裝和配置