MHA+MySQL主從配置實現MySQL高可用

EdgarZz發表於2018-07-10

前面文章已經介紹了MySQL的安裝和主從配置

MySQL安裝

MySQL主從配置

主從配置應該只能算是一套容災方案,當主庫崩潰之後,我們可以將程式切換到從庫以保證系統正常執行,這個切換過程是手動的

主從配置的問題就在於主庫down掉之後從庫不能自動提升成為主庫,今天我們就介紹一個MySQL高可用的解決方案:MHA+Mysql主從配置

MHA - Master High Availability,MySQL高可用方面相對成熟的解決方案,是一個用於故障切換和主從提升的軟體

要搭建MHA,要求叢集至少要有三個節點,即一主二從。MHA分為MHA-Manager(管理節點)和MHA-Node(資料節點)兩部分,結合MySQL主從配置架構圖如下(臨時畫的,略醜陋……):

MHA+MySQL主從配置實現MySQL高可用

說明一下伺服器情況:

1. 一共三臺伺服器,系統ubuntu16.04 64位
2. IP分別為:192.168.1.222、192.168.1.223、192.168.1.224
3. 222為master節點,223和224都是slave節點
4. mha-manager裝在223上,三臺機器都裝了mha-node
複製程式碼

下面介紹MHA的安裝和配置

MHA安裝

一般我們是將Manager裝在某一個Mysql從節點上,當然也可以單獨裝在一臺機器上

1. 下載安裝包

MHA的安裝包下載需要翻牆,這裡我共享一個網盤連結方便大家下載吧

MHA-Manager: MHA-Manager

密碼:yoed
複製程式碼

MHA-Node:MHA-Node

密碼:y5ml
複製程式碼

2. 安裝相關依賴

apt-get install libdbd-mysql-perl
apt-get install libconfig-tiny-perl
apt-get install liblog-dispatch-perl
apt-get install libparallel-forkmanager-perl
複製程式碼

3. 安裝MHA Node

由於MHA Manager會用到MHA Node提供的模組,不先安裝MHA Node直接安裝MHA Manager會報錯

cd 安裝包上傳目錄
dpkg -i mha4mysql-node_0.54-0_all.deb
複製程式碼

4. 安裝MHA Manager

cd 安裝包上傳目錄
dpkg -i mha4mysql-manager_0.55-0_all.deb
複製程式碼

MHA配置

1. 環境配置

MHA 叢集中的各節點彼此之間均需要基於 ssh 互信通訊,以實現遠端控制及資料管理功能,所以MHA環境中的三臺主機需要相互信任:實現三臺主機之間相互免金鑰登入

登入MHA Manager機器,建議直接使用root使用者

# 生成公鑰
ssh-keygen -t rsa
# 生成私鑰
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.223
# 複製給本機
ssh root@192.168.1.223  'ifconfig'
# 將生成的公私鑰傳給MHA Node機器
scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.222:/root/.ssh/
scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.224:/root/.ssh/
複製程式碼

分別登入MHA Node機器,同樣直接使用root使用者

# 複製給本機
# 222機器
ssh root@192.168.1.222 'ifconfig'
# 224機器	
ssh root@192.168.1.224 'ifconfig'
複製程式碼

要是root登陸的話,需要修改ssh的配置檔案

vim /etc/ssh/sshd_config
# PermitRootLogin,設定為YES,再重啟SSH
複製程式碼

Manager要是裝到某一臺MySQL上,則需要自己和自己無密碼登入,單獨到一臺伺服器則不需要

# 確保可以無密碼與自己通訊	
ssh 192.168.1.223
複製程式碼

測試三臺機器之間可以免金鑰登入

# 223
ssh 192.168.1.222
ssh 192.168.1.224
# 222
ssh 192.168.1.223
ssh 192.168.1.224
# 224
ssh 192.168.1.222
ssh 192.168.1.223
複製程式碼

2. 主從配置

由於之後slave節點會提升為master節點,所以主從配置要做一些修改

Master配置

log_bin = master-bin  # 啟動二進位制日誌
log_bin_index = master-bin.index
relay-log = slave-relay-bin
relay-log-purge = 0  # 禁用或啟用不再需要中繼日誌時是否自動清空它們
複製程式碼

Slave配置

log_bin = master-bin
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
relay-log-purge = 0
read_only = 1
複製程式碼

3. MHA Manager配置

登入master,建立mha賬號並授權,也可以直接使用root賬戶或其他有許可權的已有使用者

需要的許可權:Super,select,create,insert,update,delete,drop,reload

mysql>GRANT ALL ON *.* TO 'mhaadmin'@'192.168.1.%' IDENTIFIED BY 'mhapassword';
mysql>FLUSH PRIVILEGES;
複製程式碼

建立相關目錄

mkdir /usr/local/masterha /usr/local/masterha/app1  # 建立資料檔案目錄
mkdir /etc/masterha  # 建立配置檔案目錄
複製程式碼

建立配置檔案

vi /etc/masterha/app1.cnf
複製程式碼

[server default]
user=mhaadmin  # mysql使用者名稱
password=mhapassword  # mysql密碼
ssh_user=root  # ssh免金鑰登入的帳號名
repl_user=repl  # mysql複製帳號,主從配置裡配的
repl_password=mysql  # mysql複製賬號密碼
ping_interval=1   # ping間隔,用來檢測master是否正常,預設是3秒,嘗試三次沒有迴應的時候自動進行failover

manager_workdir=/usr/local/masterha/app1  # 資料目錄
manager_log=/usr/local/masterha/manager.log  # 日誌檔案
remote_workdir=/usr/local/masterha/app1  # 另外2臺機子在執行時候需要建立的目錄,注意ssh-keygen帳號的許可權問題
master_binlog_dir=/var/log/mysql  # binlog目錄,不指定會報錯 	

[server1] 
hostname=192.168.1.222
candidate_master=1  # master機宕掉後,優先啟用這臺作為新master
check_repl_delay=0  # 預設情況下如果一個slave落後master 100M的relay logs的話,MHA將不會選擇該slave作為一個新的master,因為對於這個slave的恢復需要花費很長時間,通過設定check_repl_delay=0,MHA觸發切換在選擇一個新的master的時候將會忽略複製延時,這個引數對於設定了candidate_master=1的主機非常有用,因為這個候選主在切換的過程中一定是新的master

[server2] 
hostname=192.168.1.223  
no_master=1  # 一定不會選這個機器為master,根據情況設定 

[server3]
hostname=192.168.1.224
# port=3306  # port預設是3306,如果是其他的,需要在這裡指定,否則會報錯  
candidate_master=1
複製程式碼

啟動MHA

MHA提供了指令碼測試服務是否能正常啟動

SSH檢查

masterha_check_ssh --conf=/etc/masterha/app1.cnf
複製程式碼

MHA+MySQL主從配置實現MySQL高可用

REPLICATION檢查

masterha_check_repl --conf=/etc/masterha/app1.cnf
複製程式碼

MHA+MySQL主從配置實現MySQL高可用

檢查全部OK的話就可以啟動服務了

nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /usr/local/masterha/manager.log &
複製程式碼

可以檢視程式

ps aux|grep masterha
複製程式碼

MHA+MySQL主從配置實現MySQL高可用

檢查master節點狀態

masterha_check_status --conf=/etc/masterha/app1.cnf
複製程式碼

MHA+MySQL主從配置實現MySQL高可用

啟動檢查中遇到的問題

User repl does not exist or does not have REPLICATION SLAVE privilege! Other slaves can not start replication from this host.

開始我們在做主從配置的時候,只在master節點建立了用於複製的賬號,現在slave節點也可能提升為master節點了,所以在slave節點上也要建立用於複製的賬號,賬號密碼要與master的相同
複製程式碼

Can't exec "mysqlbinlog": No such file or directory at /usr/share/perl5/MHA/BinlogManager.pm

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
複製程式碼

mysql: not found mysql command failed with rc 127:0

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
複製程式碼

相關文章