真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL高可用MHA-創(chuàng)新互聯(lián)

目錄

公司主營業(yè)務:做網(wǎng)站、成都網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出利州免費做網(wǎng)站回饋大家。

一.MHA概述

1.1 什么是MHA

1.2 MHA的組成

1.3 MHA的特點

二.MHA的工作原理

2.1 MHA的優(yōu)點總結

三、實現(xiàn)過程

3.1 準備實驗 Mysql 的 Replication 環(huán)境

3.1.1 相關配置

3.1.2 初始主節(jié)點 master 的配置

3.1.3 所有 slave 節(jié)點依賴的配置

3.1.4 配置一主多從復制架構

3.2 安裝配置MHA

3.2.1 在 master 上進行授權

3.2.2 準備 ssh 互通環(huán)境

3.2.3 安裝 MHA 包

3.2.4 初始化 MHA ,進行配置

3.2.5 定義 MHA 管理配置文件

3.2.6 對四個節(jié)點進行檢測

3.3 啟動 MHA

3.4 測試 MHA 故障轉(zhuǎn)移

3.4.1 在 master 節(jié)點關閉 mariadb 服務,模擬主節(jié)點數(shù)據(jù)崩潰

3.4.2 在 manger 節(jié)點查看日志

3.5 提供新的從節(jié)點以修復復制集群

3.6 新節(jié)點提供后再次執(zhí)行檢查操作

3.7新節(jié)點上線, 故障轉(zhuǎn)換恢復注意事項


一.MHA概述 1.1 什么是MHA

MHA(MasterHigh Availability)是一套優(yōu)秀的MySQL高可用環(huán)境下故障切換和主從復制的軟件。

MHA 的出現(xiàn)就是解決MySQL 單點故障的問題。

MySQL故障切換過程中,MHA能做到0-30秒內(nèi)自動完成故障切換操作。

MHA能在故障切換的過程中大程度上保證數(shù)據(jù)的一致性,以達到真正意義上的高可用。

1.2 MHA的組成

1)MHA Node(數(shù)據(jù)節(jié)點)

MHA Node 運行在每臺 MySQL 服務器上。

2)MHA Manager(管理節(jié)點)

1.? MHA Manager 可以單獨部署在一臺獨立的機器上,管理多個 master-slave 集群;也可以部署? ? ? ? ? ? 在一臺 slave 節(jié)點上。
2.? MHA Manager 會定時探測集群中的 master 節(jié)點。當 master 出現(xiàn)故障時,它可以自動將最新? ? ? ? ? ? ?數(shù)據(jù)的 slave 提升為新的 master, 然后將所有其他的 slave 重新指向新的 master。整個故? ? ? ? ? ? ? 障轉(zhuǎn)移過程對應用程序完全透明。

1.3 MHA的特點

1.? ?自動故障切換過程中,MHA試圖從宕機的主服務器上保存二進制日志,大程度的保證數(shù)據(jù)? ? ? ? ? ?不丟失。
2.? ?使用半同步復制,可以大大降低數(shù)據(jù)丟失的風險,如果只有一個slave已經(jīng)收到最新的二進制日志,MHA可以將最新的二進制日志應用于其他所有的slave服務器上,因此可以保證所有節(jié)點的數(shù)據(jù)一致性


3.? ?目前MHA支持一主多從架構,最少三臺服務器,即一主兩從。

二.MHA的工作原理

相較于其它HA軟件,MHA的目的在于維持MySQL Replication中Master庫的高可用性,其大特點是可以修復多個Slave之間的差異日志,最終使所有Slave保持數(shù)據(jù)一致,然后從中選擇一個充當新的Master,并將其它Slave指向它。

1.從宕機崩潰的master保存二進制日志事件(binlogevents)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2. 識別含有最新更新的slave。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.應用差異的中繼日志(relay log)到其它slave。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.應用從master保存的二進制日志事件(binlogevents)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5.提升一個slave為新master。 使其它的slave連接新的master進行復制。

目前MHA主要支持一主多從的架構,要搭建MHA,要求一個復制集群中必須最少有三臺數(shù)據(jù)庫服務器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫,因為至少需要三臺服務器。

2.1 MHA的優(yōu)點總結
  1. 自動的故障檢測與轉(zhuǎn)移,通常在10-30秒以內(nèi)
  2. MHA還提供在線主庫切換的功能,能夠安全地切換當前運行的主庫到一個新的主庫中(通過將從庫提升為主庫),大概0.5-2秒內(nèi)即可完成。
  3. 很好地解決了主庫崩潰數(shù)據(jù)的一致性問題。
  4. 不需要對當前的mysql環(huán)境做重大修改。
  5. 不需要在現(xiàn)有的復制框架中添加額外的服務器,僅需要一個manager節(jié)點,而一個Manager能管理多套復制,所以能大大地節(jié)約服務器的數(shù)量。
  6. 性能優(yōu)秀,可以工作在半同步和異步復制框架,支持gtid,當監(jiān)控mysql狀態(tài)時,僅需要每隔N秒向master發(fā)送ping包(默認3秒),所以對性能無影響。你可以理解為MHA的性能和簡單的主從復制框架性能一樣。
  7. 只要replication支持的存儲引擎都支持MHA,不會局限于innodb。
  8. 對于一般的keepalived高可用,當vip在一臺機器上的時候,另一臺機器是閑置的,而MHA中并無閑置主機。
三、實現(xiàn)過程

3.1 準備實驗 Mysql 的 Replication 環(huán)境

3.1.1 相關配置

MHA 對 MYSQL 復制環(huán)境有特殊要求,例如各節(jié)點都要開啟二進制日志及中繼日志,各從節(jié)點必須顯示啟用其read-only屬性,并關閉relay_log_purge功能等,這里對配置做事先說明?!榱朔奖阄覀兒笃诘牟僮鳎覀冊诟鞴?jié)點的/etc/hosts文件配置內(nèi)容中添加如下內(nèi)容

192.168.37.111 node1.keer.com node1
192.168.37.122 node2.keer.com node2
192.168.37.133 node3.keer.com node3
192.168.37.144 node4.keer.com node4

這樣的話,我們就可以通過 host 解析節(jié)點來打通私鑰訪問,會方便很多。

3.1.2 初始主節(jié)點 master 的配置

我們需要修改 master 的數(shù)據(jù)庫配置文件來對其進行初始化配置

[root@master ~]# vim /etc/my.cnf
	[mysqld]
	server-id = 1				//復制集群中的各節(jié)點的id均必須唯一
	log-bin = master-log		//開啟二進制日志
	relay-log = relay-log		//開啟中繼日志
	skip_name_resolve			//關閉名稱解析(非必須)
[root@master ~]# systemctl restart mariadb

3.1.3 所有 slave 節(jié)點依賴的配置

我們修改兩個 slave 的數(shù)據(jù)庫配置文件,兩臺機器都做如下操作:

[root@slave1 ~]# vim /etc/my.cnf
	[mysqld]
	server-id = 2 				//復制集群中的各節(jié)點的id均必須唯一;
	relay-log = relay-log		//開啟中繼日志
	log-bin = master-log		//開啟二進制日志
	read_only = ON				//啟用只讀屬性
	relay_log_purge = 0			//是否自動清空不再需要中繼日志
	skip_name_resolve			//關閉名稱解析(非必須)
	log_slave_updates = 1       //使得更新的數(shù)據(jù)寫進二進制日志中
[root@slave1 ~]# systemctl restart mariadb
[root@slave2 ~]# vim /etc/my.cnf
	[mysqld]
	server-id = 3 				//復制集群中的各節(jié)點的id均必須唯一;
	relay-log = relay-log		//開啟中繼日志
	log-bin = master-log		//開啟二進制日志
	read_only = ON				//啟用只讀屬性
	relay_log_purge = 0			//是否自動清空不再需要中繼日志
	skip_name_resolve			//關閉名稱解析(非必須)
	log_slave_updates = 1       //使得更新的數(shù)據(jù)寫進二進制日志中
[root@slave2 ~]# systemctl restart mariadb
3.1.4 配置一主多從復制架構

master 節(jié)點上

MariaDB [(none)]>grant replication slave,replication client on *.* to 'slave'@'192.168.%.%' identified by 'keer';
MariaDB [(none)]>show master status;

slave 節(jié)點上:

MariaDB [(none)]>change master to master_host='192.168.37.122', 
    ->master_user='slave', 
    ->master_password='keer',
    ->master_log_file='mysql-bin.000001',
    ->master_log_pos=415;
MariaDB [(none)]>start slave;
MariaDB [(none)]>show slave status\G;
3.2 安裝配置MHA

3.2.1 在 master 上進行授權

在所有 Mysql 節(jié)點授權擁有管理權限的用戶可在本地網(wǎng)絡中有其他節(jié)點上遠程訪問。 當然, 此時僅需要且只能在 master 節(jié)點運行類似如下 SQL 語句即可。

MariaDB [(none)]>grant all on *.* to 'mhaadmin'@'192.168.%.%' identified by 'mhapass';
3.2.2 準備 ssh 互通環(huán)境

MHA集群中的各節(jié)點彼此之間均需要基于ssh互信通信,以實現(xiàn)遠程控制及數(shù)據(jù)管理功能。簡單起見,可在Manager節(jié)點生成密鑰對兒,并設置其可遠程連接本地主機后, 將私鑰文件及authorized_keys文件復制給余下的所有節(jié)點即可。
下面操作在所有節(jié)點上操作:

[root@manager ~]# ssh-keygen -t rsa
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1


當四臺機器都進行了上述操作以后,我們可以在 manager 機器上看到如下文件:

[root@manager ~]# cd .ssh/
[root@manager .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[root@manager .ssh]# cat authorized_keys


四臺機器的公鑰都已經(jīng)在authorized_keys這個文件中了,接著,我們只需要把這個文件發(fā)送至另外三臺機器,這四臺機器就可以實現(xiàn) ssh 無密碼互通了:

[root@manager .ssh]# scp authorized_keys root@node2:~/.ssh/
[root@manager .ssh]# scp authorized_keys root@node3:~/.ssh/
[root@manager .ssh]# scp authorized_keys root@node4:~/.ssh/

當然,我們也可以在機器上實驗一下,看看 ssh 是否還需要輸入密碼。

3.2.3 安裝 MHA 包

在本步驟中, Manager節(jié)點需要另外多安裝一個包。具體需要安裝的內(nèi)容如下:

四個節(jié)點都需安裝:mha4mysql-node-0.56-0.el6.norch.rpm
Manager 節(jié)點另需要安裝:mha4mysql-manager-0.56-0.el6.noarch.rpm

我們使用rz命令分別上傳,然后使用yum安裝即可。

[root@manager ~]# rz
[root@manager ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg                     Pictures
Desktop          mha4mysql-manager-0.56-0.el6.noarch.rpm  Public
Documents        mha4mysql-node-0.56-0.el6.noarch.rpm     Templates
Downloads        Music                                    Videos
[root@manager ~]# yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm 
[root@manager ~]# yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm
3.2.4 初始化 MHA ,進行配置

Manager 節(jié)點需要為每個監(jiān)控的 master/slave 集群提供一個專用的配置文件,而所有的 master/slave 集群也可共享全局配置。全局配置文件默認為/etc/masterha_default.cnf,其為可選配置。如果僅監(jiān)控一組 master/slave 集群,也可直接通過 application 的配置來提供各服務器的默認配置信息。而每個 application 的配置文件路徑為自定義。具體操作見下一步驟。

3.2.5 定義 MHA 管理配置文件

為MHA專門創(chuàng)建一個管理用戶, 方便以后使用, 在mysql的主節(jié)點上, 三個節(jié)點自動同步:

mkdir /etc/mha_master
	vim /etc/mha_master/mha.cnf

配置文件內(nèi)容如下

[server default] 			//適用于server1,2,3個server的配置
user=mhaadmin 				//mha管理用戶
password=mhapass 			//mha管理密碼
manager_workdir=/etc/mha_master/app1 		//mha_master自己的工作路徑
manager_log=/etc/mha_master/manager.log 	// mha_master自己的日志文件
remote_workdir=/mydata/mha_master/app1		//每個遠程主機的工作目錄在何處
ssh_user=root 				// 基于ssh的密鑰認證
repl_user=slave				//數(shù)據(jù)庫用戶名
repl_password=magedu		//數(shù)據(jù)庫密碼
ping_interval=1 			//ping間隔時長
[server1] 					//節(jié)點2
hostname=192.168.37.133 	//節(jié)點2主機地址
ssh_port=22 				//節(jié)點2的ssh端口
candidate_master=1 			//將來可不可以成為master候選節(jié)點/主節(jié)點
[server2]
hostname=192.168.37.133
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.37.144
ssh_port=22
candidate_master=1
3.2.6 對四個節(jié)點進行檢測

1)檢測各節(jié)點間 ssh 互信通信配置是否 ok
我們在 Manager 機器上輸入下述命令來檢測:

[root@manager ~]# masterha_check_ssh -conf=/etc/mha_master/mha.cnf

如果最后一行顯示為[info]All SSH connection tests passed successfully.則表示成功。

2)檢查管理的MySQL復制集群的連接配置參數(shù)是否OK

[root@manager ~]# masterha_check_repl -conf=/etc/mha_master/mha.cnf

我們發(fā)現(xiàn)檢測失敗,這可能是因為從節(jié)點上沒有賬號,因為這個架構,任何一個從節(jié)點, 將有可能成為主節(jié)點, 所以也需要創(chuàng)建賬號。
因此,我們需要在master節(jié)點上再次執(zhí)行以下操作:

MariaDB [(none)]>grant replication slave,replication client on *.* to 'slave'@'192.168.%.%' identified by 'keer';
MariaDB [(none)]>flush privileges;

執(zhí)行完這段操作之后,我們再次運行檢測命令:

[root@manager ~]# masterha_check_repl -conf=/etc/mha_master/mha.cnf
Thu Nov 23 09:07:08 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Thu Nov 23 09:07:08 2017 - [info] Reading application default configuration from /etc/mha_master/mha.cnf..
Thu Nov 23 09:07:08 2017 - [info] Reading server configuration from /etc/mha_master/mha.cnf..
……
MySQL Replication Health is OK.
3.3 啟動 MHA

我們在 manager 節(jié)點上執(zhí)行以下命令來啟動 MHA:

[root@manager ~]# nohup masterha_manager -conf=/etc/mha_master/mha.cnf &>/etc/mha_master/manager.log &
[1] 7598

啟動成功以后,我們來查看一下 master 節(jié)點的狀態(tài):

[root@manager ~]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha (pid:7598) is running(0:PING_OK), master:192.168.37.122

上面的信息中“mha (pid:7598) is running(0:PING_OK)”表示MHA服務運行OK,否則, 則會顯示為類似“mha is stopped(1:NOT_RUNNING).”
如果,我們想要停止 MHA ,則需要使用 stop 命令:

[root@manager ~]# masterha_stop -conf=/etc/mha_master/mha.cnf
3.4 測試 MHA 故障轉(zhuǎn)移

3.4.1 在 master 節(jié)點關閉 mariadb 服務,模擬主節(jié)點數(shù)據(jù)崩潰
[root@master ~]# killall -9 mysqld mysqld_safe
[root@master ~]# rm -rf /var/lib/mysql/*
3.4.2 在 manger 節(jié)點查看日志
[root@manager ~]# tail -200 /etc/mha_master/manager.log 
……
Thu Nov 23 09:17:19 2017 - [info] Master failover to 192.168.37.133(192.168.37.133:3306) completed successfully.

表示 manager 檢測到192.168.37.122節(jié)點故障, 而后自動執(zhí)行故障轉(zhuǎn)移, 將192.168.37.133提升為主節(jié)點。
注意,故障轉(zhuǎn)移完成后, manager將會自動停止, 此時使用 masterha_check_status 命令檢測將會遇到錯誤提示, 如下所示:

[root@manager ~]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha is stopped(2:NOT_RUNNING).

3.5 提供新的從節(jié)點以修復復制集群

原有 master 節(jié)點故障后,需要重新準備好一個新的 MySQL 節(jié)點?;趤碜杂趍aster 節(jié)點的備份恢復數(shù)據(jù)后,將其配置為新的 master 的從節(jié)點即可。注意,新加入的節(jié)點如果為新增節(jié)點,其 IP 地址要配置為原來 master 節(jié)點的 IP,否則,還需要修改 mha.cnf 中相應的 ip 地址。隨后再次啟動 manager ,并再次檢測其狀態(tài)。
我們就以剛剛關閉的那臺主作為新添加的機器,來進行數(shù)據(jù)庫的恢復:
原本的 slave1 已經(jīng)成為了新的主機器,所以,我們對其進行完全備份,而后把備份的數(shù)據(jù)發(fā)送到我們新添加的機器上:

[root@slave1 ~]# mkdir /backup
[root@slave1 ~]# mysqldump --all-database >/backup/mysql-backup-`date +%F-%T`-all.sql
[root@slave1 ~]# scp /backup/mysql-backup-2017-11-23-09\:57\:09-all.sql root@node2:~

然后在 node2 節(jié)點上進行數(shù)據(jù)恢復:

[root@master ~]# mysql< mysql-backup-2017-11-23-09\:57\:09-all.sql

接下來就是配置主從。照例查看一下現(xiàn)在的主的二進制日志和位置,然后就進行如下設置:

MariaDB [(none)]>change master to master_host='192.168.37.133',  master_user='slave',  master_password='keer', master_log_file='mysql-bin.000006', master_log_pos=925;
MariaDB [(none)]>start slave;
MariaDB [(none)]>show slave status\G;
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.37.133
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 925
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
							……						   
3.6 新節(jié)點提供后再次執(zhí)行檢查操作

我們來再次檢測狀態(tài):

[root@manager ~]# masterha_check_repl -conf=/etc/mha_master/mha.cnf

記錄日志:

[root@manager ~]# masterha_manager -conf=/etc/mha_master/mha.cnf >/etc/mha_master/manager.log 2>&1 &
[1] 10012

啟動成功以后,我們來查看一下 master 節(jié)點的狀態(tài):

[root@manager ~]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha (pid:9561) is running(0:PING_OK), master:192.168.37.133
3.7新節(jié)點上線, 故障轉(zhuǎn)換恢復注意事項

1)在生產(chǎn)環(huán)境中, 當你的主節(jié)點掛了后, 一定要在從節(jié)點上做一個備份, 拿著備份文件把主節(jié)? ? ? ? 點手動提升為從節(jié)點, 并指明從哪一個日志文件的位置開始復制
2)每一次自動完成轉(zhuǎn)換后, 每一次的(replication health )檢測不ok始終都是啟動不了必須手動修? ? ? ? ?復主節(jié)點, 除非你改配置文件
3)手動修復主節(jié)點提升為從節(jié)點后, 再次運行檢測命令

[root@manager ~]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha (pid:9561) is running(0:PING_OK), master:192.168.37.133

4)再次運行起來就恢復成功了

[root@manager ~]# masterha_manager --conf=/etc/mha_master/mha.cnf

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁名稱:MySQL高可用MHA-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://weahome.cn/article/diiohj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部