mysqlMHA集群如何實(shí)現(xiàn)搭建

下文主要給大家?guī)鞰ySQL MHA集群如何實(shí)現(xiàn)搭建,希望mysql MHA集群如何實(shí)現(xiàn)搭建能夠帶給大家實(shí)際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。                                                          

員工經(jīng)過長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、電商網(wǎng)站開發(fā),小程序開發(fā),軟件定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

  MHA集群介紹與安裝

MHA ( Master High Availability )

– 由日本 DeNA 公司 youshimaton (現(xiàn)就職于 Facebook 公司)開發(fā)

– 是一套優(yōu)秀的作為 MySQL 高可用性環(huán)境下故障切換和主從提升的高可用軟件。

– 目前在 MySQL 高可用方面是一個(gè)相對(duì)成熟的解決方案。

– 在 MySQL 故障切換過程中, MHA 能做到在 0~30 秒之內(nèi)自動(dòng)完成數(shù)據(jù)庫(kù)的故障切換操作

– 并且在進(jìn)行故障切換的過程中, MHA 能在最大程度上保證數(shù)據(jù)的一致性,以達(dá)到真正意義上的高可用。

MHA 組成

? MHA Manager (管理節(jié)點(diǎn))

– 可以單獨(dú)部署在一臺(tái)獨(dú)立的機(jī)器上管理多個(gè) master-slave 集群,也可以部署在一臺(tái) slave 節(jié)點(diǎn)上。

? MHA Node (數(shù)據(jù)節(jié)點(diǎn))

– 運(yùn)行在每臺(tái) MySQL云服務(wù)器上。

MHA 工作過程

? MHA Manager 會(huì)定時(shí)探測(cè)集群中的 master 節(jié)點(diǎn),當(dāng) master 出現(xiàn)故障時(shí),它可以自動(dòng)將最新數(shù)據(jù)的 slave 提升為新的 master ,然后將所有其他的 slave重新指向新的 master 。整個(gè)故障轉(zhuǎn)移過程對(duì)應(yīng)用程序完全透明。

– ( 1 )從宕機(jī)崩潰的 master 保存二進(jìn)制日志事件( binlog events)

– ( 2 )識(shí)別含有最新更新的 slave

– ( 3 )應(yīng)用差異的中繼日志( relay log )到其他的 slave

– ( 4 )應(yīng)用從 master 保存的二進(jìn)制日志事件( binlog events )

– ( 5 )提升一個(gè) slave 為新的 master ;

– ( 6 )使其他的 slave 連接新的 master 進(jìn)行復(fù)制;

mysql MHA集群如何實(shí)現(xiàn)搭建

master51

    |

    |

|     |         |         |       |

slave52    slave53   slave54     slave55      mgm56

備用主     備用主                            Manager

一、配置所有數(shù)據(jù)節(jié)點(diǎn)主機(jī)之間可以互相以ssh密鑰對(duì)方式認(rèn)證登陸

1.1 在每一臺(tái)數(shù)據(jù)庫(kù)云服務(wù)器創(chuàng)建密鑰對(duì),然后把公鑰拷貝給其他4臺(tái)數(shù)據(jù)庫(kù)云服務(wù)器

[root@51 mysql]# ssh-keygen  創(chuàng)建密鑰對(duì)

[root@51 ~]# for i in 192.168.4.{52..56}; ssh-copy-id $i //同樣拷貝公鑰給其他4臺(tái)數(shù)據(jù)庫(kù)云服務(wù)器

1.2 配置manager56主機(jī) 無密碼ssh登錄 所有數(shù)據(jù)節(jié)點(diǎn)主機(jī)

[root@56 ~]#ssh-keygen  //創(chuàng)建密鑰對(duì)

[root@56 ~]#for i in 192.168.4.{51..55}; do  ssh-copy-id $i; done

二、安裝軟件包

2.1 在所有主機(jī)(51-56)上安裝perl軟件包(在此我以51為例)

[root@51 ]# yum -y install perl-*.rpm

2.2 在所有數(shù)據(jù)節(jié)點(diǎn)主機(jī)上[51-56]安裝mha_node軟件包

[root@51 mha-soft-student]# yum -y  install perl-DBD-mysql perl-DBI

[root@56 mha-soft-student]# rpm -ivh  mha4mysql-node-0.56-0.el6.noarch.rpm

2.3 只在管理 "主機(jī)56" 上安裝mha_manager軟件包

[root@56 mha-soft-student]# yum -y  install    perl-ExtUtils-     perl-CPAN

2.4 [root@56 mha-soft-student]# tar  -zxvf  mha4mysql-manager-0.56.tar.gz

[root@56 mha-soft-student]# cd mha4mysql-manager-0.56/

[root@56 mha4mysql-manager-0.56]# perl  Makefile.PL

[root@56 mha4mysql-manager-0.56]# make && make install

三、配置主從同步,要求如下:

51 主庫(kù)           開半同步復(fù)制

52 從庫(kù)(備用主庫(kù))  開半同步復(fù)制

53 從庫(kù)(備用主庫(kù))  開半同步復(fù)制

54 從庫(kù) 不做備用主庫(kù)所以不用開半同步復(fù)制

55 從庫(kù) 不做備用主庫(kù)所以不用開半同步復(fù)制

56 管理主機(jī)

3.1 配置主庫(kù)51

[root@51 ~]# vim /etc/my.cnf

[mysqld]

plugin-load =                     "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl-semi-sync-master-enabled = 1

rpl-semi-sync-slave-enabled = 1

server_id=51

log-bin=master51

binlog-format="mixed"

:wq

[root@51 ~]# systemctl restart mysqld

[root@51 ~]# ls /var/lib/mysql/master51.*

/var/lib/mysql/master51.000001  /var/lib/mysql/master51.index

[root@51 ~]# mysql -uroot -p123456

mysql> grant replication slave on . to harry@"%" identified by "123456";

Query OK, 0 rows affected, 1 warning (10.00 sec)

mysql> set global relay_log_purge=off;  // 不自動(dòng)刪除本機(jī)的中繼日志文件

Query OK, 0 rows affected (0.00 sec)

mysql> show master status;

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

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| master51.000001 |      438 |              |                  |                   |

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

mysql> quit

3.2、備用master52的配置

[root@52 ~]# vim /etc/my.cnf

[mysqld]

plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl-semi-sync-master-enabled = 1

rpl-semi-sync-slave-enabled = 1

server_id=52

log-bin=master52

binlog-format="mixed"

[root@52 ~]# ls /var/lib/mysql/master52.*

/var/lib/mysql/master52.000001  /var/lib/mysql/master52.index

[root@52 ~]# mysql -uroot -p123456

mysql> grant replication slave on . to harry@"%" identified by "123456";

Query OK, 0 rows affected, 1 warning (10.00 sec)

mysql> set global relay_log_purge=off;  // 不自動(dòng)刪除本機(jī)的中繼日志文件

Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_host="192.168.4.51", \

-> master_user="harry", \

-> master_password="123456", \

-> master_log_file="master51.000001", \

-> master_log_pos=438;

Query OK, 0 rows affected, 2 warnings (0.04 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.4.51

Master_User: harry

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master51.000001

Read_Master_Log_Pos: 438

Relay_Log_File: 52-relay-bin.000002

Relay_Log_Pos: 319

Relay_Master_Log_File: master51.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3.3、備用master53的配置

[root@53 ~]# vim /etc/my.cnf

plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl-semi-sync-master-enabled = 1

rpl-semi-sync-slave-enabled = 1

server_id=53

log-bin=master53

binlog-format="mixed"

[root@53 ~]# systemctl restart mysqld

[root@53 ~]# ls /var/lib/mysql/master53.*

/var/lib/mysql/master53.000001  /var/lib/mysql/master53.index

[root@53 ~]# mysql -uroot -p123456

mysql> grant replication slave on . to harry@"%" identified by "123456";

Query OK, 0 rows affected, 1 warning (10.00 sec)

mysql> set global relay_log_purge=off;  // 不自動(dòng)刪除本機(jī)的中繼日志文件

Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_host="192.168.4.51", \

-> master_user="harry", \

-> master_password="123456", \

-> master_log_file="master51.000001", \

-> master_log_pos=438;

Query OK, 0 rows affected, 2 warnings (0.04 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

1. row

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.4.51

Master_User: harry

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master51.000001

Read_Master_Log_Pos: 438

Relay_Log_File: 53-relay-bin.000002

Relay_Log_Pos: 319

Relay_Master_Log_File: master51.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

......

mysql> quit;

3.4、配置從云服務(wù)器54

[root@54 ~]# vim /etc/my.cnf

[mysqld]

server_id=54

:wq

[root@54 ~]# systemctl restart mysqld

mysql> change master to master_host="192.168.4.51", \

-> master_user="harry", \

-> master_password="123456", \

-> master_log_file="master51.000001", \

-> master_log_pos=438;

Query OK, 0 rows affected, 2 warnings (0.13 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

1. row

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.4.51

Master_User: harry

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master51.000001

Read_Master_Log_Pos: 438

Relay_Log_File: 54-relay-bin.000002

Relay_Log_Pos: 319

Relay_Master_Log_File: master51.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3.5、配置從云服務(wù)器55

[root@55 ~]# vim /etc/my.cnf

server_id=55

:wq

[root@55 ~]# systemctl restart mysqld

[root@55 ~]# mysql -uroot -p123456

mysql> change master to master_host="192.168.4.51", \

-> master_user="harry",

-> master_password="123456", \

-> master_log_file="master51.000001", \

-> master_log_pos=438;

Query OK, 0 rows affected, 2 warnings (0.04 sec)

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;

1. row

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.4.51

Master_User: harry

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master51.000001

Read_Master_Log_Pos: 438

Relay_Log_File: 55-relay-bin.000002

Relay_Log_Pos: 319

Relay_Master_Log_File: master51.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3.6.2在客戶端測(cè)試主從同步配置

3.6.1  在主庫(kù)51上添加訪問數(shù)據(jù)的授權(quán)用戶

[root@51 ~]# mysql -uroot -p123456

mysql> grant all on  gamedb.* to admin@"%" identified by "123456";

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create database gamedb;

Query OK, 1 row affected (0.06 sec)

mysql> create table  gamedb.t1 (id int);

mysql> insert into gamedb.t1 values(222);

Query OK, 1 row affected (0.03 sec)

mysql> insert into gamedb.t1 values(222);

Query OK, 1 row affected (0.04 sec)

然后在從庫(kù)上查看

3.6.3  在客戶端使用授權(quán)用戶連接從庫(kù)52-55,也能看到同樣的庫(kù)表及記錄

[root@52 ~]# mysql -uroot -p123456

mysql> select * from gamedb.t1;

+------+

| id   |

+------+

|  222 |

|  222 |

+------+

四、編輯管理主機(jī)(56)主配置文件

[root@56 mha-soft-student]# cp mha4mysql-manager-0.56/bin/* /usr/local/bin/

[root@56 mha-soft-student]# mkdir /etc/mha_manager/

[root@56 mha-soft-student]# cp mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/mha_manager/

[root@56 ]# vim /etc/mha_manager/app1.cnf

[server default]

manager_workdir=/etc/mha_manager

manager_log=/etc/mha_manager.log

master_ip_failover_script=/usr/local/bin/master_ip_failover

ssh_user=root

ssh_port=22

repl_user=harry  //主從同步用戶名

repl_password=123456  //主從同步密碼

user=root  //連接數(shù)據(jù)庫(kù)用戶名

password=123456  //連接數(shù)據(jù)庫(kù)密碼

[server1]

hostname=192.168.4.51

candidate_master=1   // 設(shè)置為候選 master

port=3306

[server2]

hostname=192.168.4.52

candidate_master=1

port=3306

[server3]

hostname=192.168.4.53

candidate_master=1

port=3306

[server4]

hostname=192.168.4.54

no_master=1  // 不競(jìng)選 master

port=3306

[server5]

hostname=192.168.4.55

no_master=1

port=3306

在管理節(jié)點(diǎn)上 通過 master_check_ssh 做 ssh 檢查

[root@56 mha_manager]# masterha_check_ssh --conf /etc/mha_manager/app1.cnf

測(cè)試主從同步狀態(tài)

**檢查主從同步時(shí)把a(bǔ)pp1.cnf文件中的此配置項(xiàng)#master_ip_failover_script=/usr/local/bin/master_ip_failover注釋掉,不然檢查失敗。

[root@56 mha_manager]# vim /etc/mha_manager/app1.cnf

  #master_ip_failover_script=/usr/local/bin/master_ip_failover

[root@56 ~]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf

四、測(cè)試高可用集群配置

4.1 在主庫(kù)上手動(dòng)部署vip 地址   192.168.4.100

[root@51 ~]# ifconfig  eth0:1 192.168.4.100/24

[root@51 ~]# ifconfig  eth0:1

4.2 修改故障切換腳本 指定vip地址的部署信息

[root@56 ~]# vim /etc/mha_manager/master_ip_failover

my $vip = '192.168.4.100/24';  # Virtual IP

my $key = "1";

my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";

my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

:wq

4.3 啟動(dòng)管理服務(wù),并查看服務(wù)狀態(tài)

開啟 MHA Manager 監(jiān)控

– masterha_manager // 啟動(dòng)命令

– --remove_dead_master_conf // 不在 app1.cnf 文件

里刪除宕機(jī)的主庫(kù)的信息

– --ignore_last_failover // 忽略 .health 文件

[root@56 ~]# masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover

查看狀態(tài) : masterha_check_status

[root@56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf

app1 (pid:9399) is running(0:PING_OK), master:192.168.4.51

停止服務(wù) : masterha_stop

[root@host56 bin]# masterha_stop --conf=/etc/mha_manager/app1.cnf

Stopped app1 successfully.

4.4 測(cè)試故障轉(zhuǎn)移

在主庫(kù)51 上執(zhí)行  ]# shutdown   -h  now

4.5 在管理主機(jī)上查看服務(wù)狀態(tài)(如果服務(wù)停止了,手動(dòng)啟動(dòng)一下服務(wù),再查看狀態(tài))

[root@56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf

app1 (pid:17507) is running(0:PING_OK), master:192.168.4.52

4.6 在52 本機(jī)查看是否獲取vip地址

[root@52 ~]# ip addr  show  | grep  192.168.4

inet 192.168.4.52/24 brd 192.168.4.255 scope global eth0

inet 192.168.4.100/24 brd 192.168.4.255 scope global secondary eth0:1

4.6 客戶端連接vip地址 ,訪問數(shù)據(jù)服務(wù)

[root@58]#mysql   -h292.168.4.100   -uwebadmin   -p123456

查看 VIP 地址

當(dāng)主庫(kù)云服務(wù)器宕機(jī)后,在備用 1 主庫(kù)數(shù)據(jù)庫(kù)云服務(wù)器上查看 VIP 地址

[root@server0 ~]# ip addr show | grep vip 地址

手動(dòng)配置 vip 地址

[root@server0 ~]# ifconfig ethX:1 x.x.x.x/32

對(duì)于以上關(guān)于mysql MHA集群如何實(shí)現(xiàn)搭建,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請(qǐng)繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。

文章名稱:mysqlMHA集群如何實(shí)現(xiàn)搭建
標(biāo)題來源:http://muchs.cn/article2/igecic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站導(dǎo)航、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)