MySQL分區高可用叢集之Fabric部署使用

來源:互聯網
上載者:User

MySQL分區高可用叢集之Fabric部署使用

Fabric是Oracle公司開發的既有分區又有讀寫分離的MySQL叢集管理工具,雖然個人覺得目前版本還有很多缺陷,但應該會逐步完善,將來會是一個不錯的工具。

第一步:下載並安裝 Fabric

Fabric可以從MySQL官網下載,她屬於MySQL Utilites裡,官方是http://dev.mysql.com/downloads/utilities/

我下載的是源碼版的,mysql-utilities-1.5.6.zip,因為是Python所寫,所以安裝跟C語言的不同:

$ unzip mysql-utilities-1.5.6.zip

$ cd mysql-utilities-1.5.6/

$ python setup.py build

$ sudo python setup.py install

安裝好後,原先的python指令碼去掉了py尾碼,預設放在/usr/local/bin/目錄下,可直接執行。

第一步:部署 MySQL5.6 多執行個體

運行Fabric前,我們要先準備若干各資料庫,根據我們的需要配置不同數量的資料庫,我們先部署基本的讀寫分離的主從方式,Fabric的需要的利用MySQL的GTID特性進行主從複製,因此需要MySQL5.6以上版本,另外由於MariaDB的GTID特性跟MySQL不同,Fabric不支援MariaDB,使用MariaDB的話有報錯。所以只能用MySQL5.6以上版本。

我們至少需要部署3個MySQL執行個體才能看到Fabric的功效,

作用 地址 連接埠 資料檔案路徑 設定檔路徑  
Fabric中繼資料庫 localhost 10000 /dev/shm/data/fa00 fabric/fa00.cnf  
業務資料庫 1 localhost 10011 /dev/shm/data/fa11 fabric/fa11.cnf  
localhost 10012 /dev/shm/data/fa12 fabric/fa12.cnf

TIP:由於我在一台電腦上啟動了很多資料庫,因此將資料檔案都放在了記憶體硬碟中,我的機器預設有的是/dev/shm,其他的機器根據會有所不同,如/run/shm等,這個直接選取無關緊要,只要事先建立父目錄。因為使用記憶體硬碟,MySQL自身的記憶體需求降低,我降低了MySQL需要的記憶體使用量量,這個也根據自己的情況選擇。註:生產環境不可這樣配置。

主從資料庫部署可以參考文章: 和

下面我們還是先修改設定檔,需要修改的內容如下:(以fa00.cnf舉例)

# 請自行調整前面6行的數字,每個資料庫都不能相同,這裡是改了最後兩個00對應的數字。

[client]

port            = 10000

socket          = /tmp/fa00.sock

 

[mysqld]

port            = 10000

socket          = /tmp/fa00.sock

datadir        = /dev/shm/data/fa00

server-id      = 10000

user            = lyw

 

# 主從複製相關

log-bin=mysql-bin

gtid-mode              = on

log-slave-updates      = true

enforce-gtid-consistency= true

# 檔案、記憶體大小,節約記憶體。

innodb_buffer_pool_size = 32M

innodb_log_file_size    = 5M

修改好3個檔案設定檔 fa00.cnf,fa11.cnf,fa12.cnf 後,我們初始化資料,並且啟動,這次我們採用大量操作的方式,減少工作量。在mysql目錄下建立如下指令碼init_start.sh和初始化資料庫檔案fabric.sql,並執行init_start.sh,即可建立所有資料庫,並啟動。

fabric.sql 內容為:

use mysql;

delete from user where user='';

flush privileges;

grant all on *.* to 'fabric'@'%' identified by '123456';

create database lyw;

reset master;

init_start.sh 內容為:

#! /bin/bash

mkdir -p /dev/shm/data

for cnf in `ls fabric/*.cnf`

do

        scripts/mysql_install_db --defaults-file=$cnf

        bin/mysqld --defaults-file=$cnf &

done

# 等待一下,讓mysqld啟動完成,

sleep 3

 

for cnf in `ls fabric/*.cnf`

do

        bin/mysql --defaults-file=$cnf -uroot < fabric.sql

done

準備好指令碼後,執行init_start.sh即完成所有資料庫的初始化和啟動工作,可以啟動mysql用戶端檢查下資料庫是否都初始化好。Fabric不需要主動執行change master to這行sql語句來開啟主從,而是交由Fabric自身去執行。到此資料庫以準備好,接下來開始真正的Fabric配置。

第三步:Fabric 讀寫分離主從配置

fabric的預設設定檔路徑為/usr/local/etc/mysql/fabric.cfg,其他安裝方法會是/etc/mysql/fabric.cfg(其他系統根據自己情況配置)因此為了方便後面的操作,我們還是使用這個設定檔,當然也可以用--config 參數指定設定檔。

fabric.cfg內容如下:

[DEFAULT]

prefix = /usr/local

sysconfdir = /usr/local/etc

logdir = /var/log

# storage 配置的是fabric中繼資料存放區的資料庫

[storage]

address = localhost:10000

user = fabric

password = 123456

database = fabric

auth_plugin = mysql_native_password

connection_timeout = 6

connection_attempts = 6

connection_delay = 1

 

[servers]

user = fabric

password = 123456

backup_user = fabric_backup

backup_password = secret

restore_user = fabric_restore

restore_password = secret

unreachable_timeout = 5

 

# fabric對外的協議,這裡是xmlrpc協議

[protocol.xmlrpc]

address = localhost:32274

threads = 5

user = admin

password = 123456

disable_authentication = yes

realm = MySQL Fabric

ssl_ca =

ssl_cert =

ssl_key =

 

# fabric對外的協議,這裡是mysql協議,能用mysql串連,但是不能跟普通資料庫一樣操作

[protocol.mysql]

address = localhost:32275

user = admin

password = 123456

disable_authentication = yes

ssl_ca =

ssl_cert =

ssl_key =

 

[executor]

executors = 5

 

[logging]

level = INFO

url = file:///var/log/fabric.log

 

[sharding]

mysqldump_program = /usr/bin/mysqldump

mysqlclient_program = /usr/bin/mysql

 

[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


配置好後,需要初始化fabric的中繼資料
 

$ mysqlfabric manage setup

。。。。。。

Finishing initial setup

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

Password for admin user is not yet set.

Password for admin/xmlrpc:                這裡需要設定admin的密碼

Repeat Password:                          重複輸入密碼

Password set.

Password set.

這時fa00這個資料庫已經有了fabric的中繼資料,我們可以用mysql用戶端查看。

然後啟動

$ mysqlfabric manage start


自此雖然啟動了fabric,但是還沒有和前面配置的後兩個業務資料庫產生聯絡,接下來我們需要用命令列建立聯絡。我先看一下mysqlfabric的分組相關協助,

$ mysqlfabric help group

Commands available in group 'group' are:

    group activate group_id  [--synchronous]

    group description group_id  [--description=NONE] [--synchronous]

    group deactivate group_id  [--synchronous]

    group create group_id  [--description=NONE] [--synchronous]

    group remove group_id server_id  [--synchronous]

    group add group_id address  [--timeout=NONE] [--update_only] [--synchronous]

    group health group_id 

    group lookup_servers group_id  [--server_id=NONE] [--status=NONE] [--mode=NONE]

    group destroy group_id  [--synchronous]

    group demote group_id  [--update_only] [--synchronous]

    group promote group_id  [--slave_id=NONE] [--update_only] [--synchronous]

    group lookup_groups  [--group_id=NONE]


我們首先需要建立一個組group-1:

$ mysqlfabric group create group-1

然後將兩個業務資料庫10011和10012放入這個組中:

$ mysqlfabric group add group-1 127.0.0.1:10011

$ mysqlfabric group add group-1 127.0.0.1:10012


然後可以查看這時group-1這個組的狀態

$ mysqlfabric group lookup_servers group-1

Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e

Time-To-Live: 1

 

                        server_uuid        address    status      mode weight

------------------------------------ --------------- --------- --------- ------

d4919ca2-754a-11e5-8a5e-34238703623c 127.0.0.1:10011 SECONDARY READ_ONLY    1.0

d6597f06-754a-11e5-8a5e-34238703623c 127.0.0.1:10012 SECONDARY READ_ONLY    1.0

從status 和 mode 這兩個欄位可以看出,這個時候剛加入的兩個伺服器還沒有正式生效,都是作為從庫唯讀身份,兩個庫還沒有建立實質的聯絡,我們需要將其中一個資料庫提升為可寫的主:

$ mysqlfabric group promote group-1

 

$ mysqlfabric group lookup_servers group-1

Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e

Time-To-Live: 1

                        server_uuid        address    status      mode weight

------------------------------------ --------------- --------- ---------- ------

d4919ca2-754a-11e5-8a5e-34238703623c 127.0.0.1:10011 SECONDARY  READ_ONLY    1.0

d6597f06-754a-11e5-8a5e-34238703623c 127.0.0.1:10012  PRIMARY READ_WRITE    1.0

用promote命令提升後,其中一台會被提升為主要資料庫,其他的都為從。主從也可以通過mysql用戶端查看,在從庫執行下面的命令顯示如下,主庫執行則沒有資訊

mysql> show slave status \G;

*************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event

                  Master_Host: 127.0.0.1

                  Master_User: fabric

                  Master_Port: 10012

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 151

              Relay_Log_File: lyw-hp-relay-bin.000002

                Relay_Log_Pos: 361

        Relay_Master_Log_File: mysql-bin.000001

            Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

                          。。。。。。


至此主從方式以基本可用,我們迫不及待地想要嘗試下用戶端如何使用了。官方提供python和java兩種客戶的,因此如果用Fabric,業務語言最好是這兩種。

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.