新聞中心
MHA(Master High Availability)目前在 MySQL 高可用方面是一個(gè)相對(duì)成熟的解決方案,
是一套優(yōu)秀的作為 MySQL 高可用性環(huán)境下故障切換和主從提升的高可用軟件。在
MySQL 故障切換過程中,MHA 能做到在 0~30 秒之內(nèi)自動(dòng)完成數(shù)據(jù)庫(kù)的故障切換操
作,并且在進(jìn)行故障切換的過程中,MHA 能在大程度上保證數(shù)據(jù)的一致性,以達(dá)
到真正意義上的高可用。
該軟件由兩部分組成:MHA Manager(管理節(jié)點(diǎn))和 MHA Node(數(shù)據(jù)節(jié)點(diǎn))。MHA Manager
可以單獨(dú)部署在一臺(tái)獨(dú)立的機(jī)器上管理多個(gè) master-slave 集群,也可以部署在一臺(tái) slave
節(jié)
點(diǎn)上。
MHA Node 運(yùn)行在每臺(tái) MySQL 服務(wù)器上,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)用程序完全透明。MHA 可
以
與半同步復(fù)制結(jié)合起來,目前 MHA 主要支持一主多從的架構(gòu),要搭建 MHA,要求一個(gè)復(fù)制集群
中必須最少有三臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,一主二從,即一臺(tái)充當(dāng) master,一臺(tái)充當(dāng)備用 master,另
外一臺(tái)充當(dāng)從庫(kù).
MHA 切換步驟:
1.從宕機(jī)的 master 中保存二進(jìn)制文件
2.檢測(cè)含有最新日至更新的 slave
3.應(yīng)用差異的中繼日至(relay log)到其他的 slave
4.應(yīng)用從 master 中保存的二進(jìn)制日至事件到其他的 slave 中
5.提升一個(gè) slave 為 master
6.使其他的 slave 指向最新的 master 進(jìn)行復(fù)制。
manager 的工具:
masterha_check_ssh 檢查 MHA 的 SSH 配置狀況
masterha_check_repl 檢查 MySQL 復(fù)制狀況
masterha_manger 啟動(dòng) MHA
masterha_check_status 檢測(cè)當(dāng)前 MHA 運(yùn)行狀態(tài)
masterha_master_monitor 檢測(cè) master 是否宕機(jī)
masterha_master_switch 控制故障轉(zhuǎn)移(自動(dòng)或者手動(dòng))
masterha_conf_host 添加或刪除配置的 server 信息
node 的工具:
save_binary_logs 保存和復(fù)制 master 的二進(jìn)制日志
apply_diff_relay_logs 識(shí)別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的 slave
filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用這個(gè)工具)
purge_relay_logs 清除中繼日志(不會(huì)阻塞 SQL 線程)
Mha 實(shí)驗(yàn)環(huán)境配置:我們這個(gè)是在主從復(fù)制(一主兩從)的基礎(chǔ)上搭建的,mha 是可以放在一個(gè) slave 端也可以單
獨(dú)
運(yùn)行:
實(shí)驗(yàn)環(huán)境配置:
Rhel6.5
iptables selinux down
172.25.40.1 server1.example.com master
172.25.40.2 server2.example.com slave candidate master
172.25.40.3 server3.example.com slave
mha
Master 端配置:
yum install perl-DBD-mysql -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
構(gòu)建免密登陸ssh-keygen
##生成密鑰 ssh-copy-id 172.25.40.2
##給另外兩臺(tái) mysql 主機(jī)分發(fā),這樣可以免密連接ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置
[mysqlnd]
server-id=1
##數(shù)據(jù)庫(kù)的唯一標(biāo)示,不能重復(fù)log-bin=mysql-bin
##二進(jìn)制記錄文件名為 mysql-binbinlog-do-db=test
##同的庫(kù)為 testbinlog-ignore-db=mysql
##不同步 mysqlgtid-mode=ON
##打開 gtid 模式enforce-gtid-consistency=ON
##強(qiáng)制使用 gtid 模式slave-parallel-type=LOGICAL_CLOCK
##打開多線程模式slave-parallel-workers=16
##開啟 16 個(gè)線程relay_log_info_repository=TABLE
##以表格形式存放 relay-log 信息relay_log_recovery=ON
rpl_semi_sync_master_enabled=ON
##設(shè)置半同步 master 和 slave 開啟rpl_semi_sync_slave_enabled=ON
重新啟動(dòng)兩臺(tái)服務(wù)器上的 mysql/etc/init.d/mysqld restart
進(jìn)入數(shù)據(jù)庫(kù)下載半同步模塊
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.50 sec)
mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)
給所創(chuàng)建的認(rèn)證用戶復(fù)制權(quán)限及 root 用戶所有權(quán)限的授權(quán)
mysql> grant all privileges on *.* to 'root'@'172.168.40.%' identified
'xxxxxxxxxx';
Query OK, 0 rows affected, 1 warning (0.00 sec)by
mysql> grant replication slave on *.* to 'redhat'@'172.168.40.%' identified by
'xxxxxxxxx';
mysql> grant all on *.* to root@'172.25.40.%' identified by 'xxxxxxxx';
Query OK, 0 rows affected, 1 warning (0.38 sec)
Slave(candidate master)端配置:
yum install perl-DBD-mysql -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
構(gòu)建免密登陸ssh-keygen
##生成密鑰ssh-copy-id 172.25.40.1
##給另外兩臺(tái) mysql 主機(jī)分發(fā),這樣可以免密連接ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置
[mysqlnd]
除過 server-id 是不同的,其他參數(shù)均一樣
server-id=2
重新啟動(dòng)兩臺(tái)服務(wù)器上的 mysql
/etc/init.d/mysqld restart 進(jìn)入數(shù)據(jù)庫(kù)下載半同步模塊
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.14 sec)
mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global read_only=1;
#設(shè)置為只讀模式,因?yàn)槭莻溥x master,所以當(dāng)
master 宕機(jī)時(shí),candidate master 要充當(dāng) master,故不用寫進(jìn)配置文件中
Query OK, 0 rows affected (0.00 sec)
給所創(chuàng)建的認(rèn)證用戶復(fù)制權(quán)限及 root 用戶所有權(quán)限的授權(quán)mysql> grant all privileges on .to root@’172.25.40.%’ identified by ‘xxxxxxxx’;
##這個(gè)密碼是 manager 主機(jī)配置文件里面所寫的密碼
Slave 端配置:
yum install perl-DBD-mysql -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
構(gòu)建免密登陸ssh-keygen
##生成密鑰ssh-copy-id 172.25.40.1
##給另外兩臺(tái) mysql 主機(jī)分發(fā),這樣可以免密連接ssh-copy-id 172.25.40.2
mysql 主配置文件(/etc/my.cnf)配置
[mysqlnd]
除過 server-id 是不同的,其他參數(shù)均一樣
server-id=3
重新啟動(dòng)兩臺(tái)服務(wù)器上的 mysql
/etc/init.d/mysqld restart
進(jìn)入數(shù)據(jù)庫(kù)下載半同步模塊
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.14 sec)lave_enabled=1;
Query OK, 0 rows affected (0.00
mysql> set global rpl_semi_sync_slave_enabled=1
給所創(chuàng)建的認(rèn)證用戶復(fù)制權(quán)限及 root 用戶所有權(quán)限的授權(quán)
mysql> grant all privileges on *.* to 'root'@'172.168.40.%' identified
'xxxxxxxxx';
Query OK, 0 rows affected, 1 warning (0.00 sec)
by
mysql> grant replication slave on *.* to 'redhat'@'172.168.40.%' identified by
'xxxxxxxx';
mysql> change master to
master_host='172.25.40.1',master_user='redhat',master_password='xxxxxxxxxx',
master_auto_position=1;
Mha 主機(jī)
yum install perl-* mha4mysql-manager-0.56-0.el6.noarch.rpm -y
mkdir /usr/local/mha
##創(chuàng)建工作目錄 workdir
mkdir /etc/mha
cd /etc/mha/
##創(chuàng)建配置文件所在目錄
vim app.conf
[server default]
manager_workdir=/usr/local/mha
manager_log=/usr/local/mha/mha.log
master_binlog_dir=/var/lib/mysql
user=root ##數(shù)據(jù)庫(kù)用戶 登陸數(shù)據(jù)庫(kù)的用戶 ,用于manager監(jiān)控管理用戶和密碼
password=xxxxxxxx ##數(shù)據(jù)庫(kù)登陸密碼 初始化的時(shí)候登陸數(shù)據(jù)庫(kù)的密碼
ping_interval=1
remote_workdir=/tmp
repl_user=redhat ##復(fù)制用戶(授權(quán)在slave上)用于主從間復(fù)制
repl_password=xxxxxxxx ##slave復(fù)制用戶的密碼 ssh_user=root ##ssh用戶
[server1]
hostname=172.25.40.1
port=3306
[server2]
hostname=172.25.40.2
port=3306
candidate_master=1 ##備用主機(jī) check_repl_delay=0 ##日至差異大于100M的時(shí)候,不做master,兩個(gè)參數(shù)通常一起使用
[server3]
hostname=172.25.40.3
port=3306
#no_master=1 ##永遠(yuǎn)不會(huì)作為master
檢查MySQL復(fù)制狀況
masterha_check_repl –conf=/etc/mha/app.cnf
Tue Apr 24 09:14:45 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Apr 24 09:14:45 2018 - [info] Reading application default configuration from /etc/mha/app.conf..
Tue Apr 24 09:14:45 2018 - [info] Reading server configuration from /etc/mha/app.conf..
Tue Apr 24 09:14:45 2018 - [info] MHA::MasterMonitor version 0.56.
Tue Apr 24 09:14:45 2018 - [info] GTID failover mode = 1
Tue Apr 24 09:14:45 2018 - [info] Dead Servers:
Tue Apr 24 09:14:45 2018 - [info] Alive Servers:
Tue Apr 24 09:14:45 2018 - [info] 172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info] 172.25.40.2(172.25.40.2:3306)
Tue Apr 24 09:14:45 2018 - [info] 172.25.40.3(172.25.40.3:3306)
Tue Apr 24 09:14:45 2018 - [info] Alive Slaves:
Tue Apr 24 09:14:45 2018 - [info] 172.25.40.2(172.25.40.2:3306) Version=5.7.17-log (oldest major version between slaves) log-bin:enabled
Tue Apr 24 09:14:45 2018 - [info] GTID ON
Tue Apr 24 09:14:45 2018 - [info] Replicating from 172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info] Primary candidate for the new Master (candidate_master is set)
Tue Apr 24 09:14:45 2018 - [info] 172.25.40.3(172.25.40.3:3306) Version=5.7.17 (oldest major version between slaves) log-bin:disabled
Tue Apr 24 09:14:45 2018 - [info] GTID ON
Tue Apr 24 09:14:45 2018 - [info] Replicating from 172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info] Not candidate for the new Master (no_master is set)
Tue Apr 24 09:14:45 2018 - [info] Current Alive Master: 172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info] Checking slave configurations..
Tue Apr 24 09:14:45 2018 - [info] read_only=1 is not set on slave 172.25.40.2(172.25.40.2:3306).
Tue Apr 24 09:14:45 2018 - [info] read_only=1 is not set on slave 172.25.40.3(172.25.40.3:3306).
Tue Apr 24 09:14:45 2018 - [warning] log-bin is not set on slave 172.25.40.3(172.25.40.3:3306). This host cannot be a master.
Tue Apr 24 09:14:45 2018 - [info] Checking replication filtering settings..
Tue Apr 24 09:14:45 2018 - [info] binlog_do_db= , binlog_ignore_db=
Tue Apr 24 09:14:45 2018 - [info] Replication filtering check ok.
Tue Apr 24 09:14:46 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
Tue Apr 24 09:14:46 2018 - [info] Checking SSH publickey authentication settings on the current master..
Tue Apr 24 09:14:46 2018 - [info] HealthCheck: SSH to 172.25.40.1 is reachable.
Tue Apr 24 09:14:46 2018 - [info]
172.25.40.1(172.25.40.1:3306) (current master)
+--172.25.40.2(172.25.40.2:3306)
+--172.25.40.3(172.25.40.3:3306)
Tue Apr 24 09:14:46 2018 - [info] Checking replication health on 172.25.40.2..
Tue Apr 24 09:14:46 2018 - [info] ok.
Tue Apr 24 09:14:46 2018 - [info] Checking replication health on 172.25.40.3..
Tue Apr 24 09:14:46 2018 - [info] ok.
Tue Apr 24 09:14:46 2018 - [warning] master_ip_failover_script is not defined.
Tue Apr 24 09:14:46 2018 - [warning] shutdown_script is not defined.
Tue Apr 24 09:14:46 2018 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)名稱:MasterHighAvailability安裝配置-創(chuàng)新互聯(lián)
文章出自:http://ef60e0e.cn/article/djieij.html