Mysql 5.7 MHA 高可用

lovehewenyu發表於2022-08-23

Mysql 5.7 MHA 高可用部署

導讀:為節省軟體授權成本,故決定將非核心的oracle業務轉型至開源化的Mysql中。因業務使用Oracle Rac架構無感知故障轉移已熟悉,要求Mysql也需滿足無感知的故障轉移效果。經團隊評估決定使用Mysql Mha高可用架構來完成故障轉移功能(雖然有30s左右的延遲,但足已滿足非核心繫統的要求)。

1.Mysql MHA高可用部署

1.1 主從複製與Manager/Node伺服器規劃

1
2
3
4
5
6
主庫: 
192.168 . 56.101    node 
從庫: 
192.168 . 56.102    node
192.168 . 56.103    node    manager
192.168 . 56.104    vip

1.2 準備環境(略。1主2從基於GTID的部署)

1.3 配置關鍵程式軟連線

1
2
3
# 使用軟連線解決mha原始碼中絕對路徑的問題
ln -s /data/mysql/bin/mysqlbinlog    /usr/bin/mysqlbinlog
ln -s /data/mysql/bin/mysql          /usr/bin/mysql

1.4 配置各節點互信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Mysqldb01:
rm -rf /root/.ssh 
ssh-keygen
cd /root/.ssh 
mv id_rsa.pub authorized_keys
scp  -r  /root/.ssh   192.168 . 56.102 :/root 
scp  -r  /root/.ssh   192.168 . 56.103 :/root 
各節點驗證
Mysqldb01:
ssh  192.168 . 56.101  date
ssh  192.168 . 56.102  date
ssh  192.168 . 56.103  date
Mysqldb02:
ssh  192.168 . 56.101  date
ssh  192.168 . 56.102  date
ssh  192.168 . 56.103  date
Mysqldb03:
ssh  192.168 . 56.101  date
ssh  192.168 . 56.102  date
ssh  192.168 . 56.103  date

1.5 安裝軟體

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下載mha軟體
mha官網:https: //code.google.com/archive/p/mysql-master-ha/
# 從github下載軟體地址(推薦
manager軟體:https: //github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
node軟體:https: //github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
# 所有節點安裝Node軟體依賴包
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-manager- 0.58 - 0 .el7.centos.noarch.rpm
# Manager軟體安裝(Mysqldb03)
# Manager軟體需要以下依賴包,需要自行下載
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-node- 0.58 - 0 .el7.centos.noarch.rpm
# Mysqldb01主庫中建立mha需要的使用者
grant all privileges on *.* to mha@ '192.168.56.%'  identified by  'mha' ;

1.6 配置檔案準備(Mysqldb03)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 建立mha配置檔案和日誌檔案目錄
mkdir -p /data/mha
chown mysql:mysql /data/mha/ -R
mkdir -p /data/mha/app1/log
chown mysql:mysql /data/mha/app1/log -R
# 編輯mha配置檔案(Mysqldb03)
vi /data/mha/mha.conf 
[server  default ]
manager_log=/data/mha/app1/log/manager
manager_workdir=/data/mha/app1/log
master_binlog_dir=/data/binlog
# vip failover scripts
master_ip_failover_script=/usr/local/bin/master_ip_failover 
password=mha
ping_interval= 2
repl_password=oracle
repl_user=repl01
ssh_user=root
user=mha
[server1]
hostname= 192.168 . 56.101
port= 3306
[server2]
hostname= 192.168 . 56.102
port= 3306
[server3]
hostname= 192.168 . 56.103
port= 3306

1.7 互信與複製(1主2從)狀態檢查

1
2
masterha_check_ssh  --conf=/data/mha/mha.conf
masterha_check_repl  --conf=/data/mha/mha.conf

1.8 開啟MHA(Mysqldb03)

1
nohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover  < /dev/ null > /data/mha/app1/log/manager.log  2 >& 1  &

1.9 Mysql MHA狀態檢查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 自動獲取MHA狀態和主庫IP
[root@mysqldb03 opt]# masterha_check_status -conf=/data/mha/mha.conf 
mha (pid: 24100 is  running( 0 :PING_OK), master: 192.168 . 56.101
# 檢視 3 個節點server_id
[root@mysqldb03 mha]# mysql -umha -pmha -h   192.168 . 56.101  -e  "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line  interface  can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     |  101    |
+---------------+-------+
[root@mysqldb03 mha]# mysql -umha -pmha -h   192.168 . 56.102  -e  "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line  interface  can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     |  102    |
+---------------+-------+
[root@mysqldb03 mha]# mysql -umha -pmha -h   192.168 . 56.103  -e  "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line  interface  can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     |  103    |

1.10 配置MHA 的vip功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
## Mysql Vip故障轉移指令碼master_ip_failover修改
vi  /usr/local/bin/master_ip_failover
# 修改以下內容,其中vip就是你要使用的vip,其中enp0s8就是vip的物理網路卡,所有節點中物理網路卡的enp0s8名字要相同
my $vip =  '192.168.56.104/24' ;
my $key =  '1' ;
my $ssh_start_vip =  "/sbin/ifconfig enp0s8:$key $vip" ;
my $ssh_stop_vip =  "/sbin/ifconfig enp0s8:$key down" ;
# 若是指令碼中有空格可使用以下命令進行轉換
[root@mysqldb03 opt]# dos2unix master_ip_failover.txt 
dos2unix: converting file master_ip_failover.txt to Unix format ...
[root@mysqldb03 opt]# chmod +x master_ip_failover.txt 
[root@mysqldb03 opt]# mv master_ip_failover.txt master_ip_failover
[root@mysqldb03 opt]# mv master_ip_failover /usr/local/bin/
## Manager配置檔案修改:
vi /data/mha/mha.conf
master_ip_failover_script=/usr/local/bin/master_ip_failover
## 主庫首次使用vip需要手工開啟VIP地址
# 手工在主庫上繫結vip,注意一定要和配置檔案中的enp0s8一致,我的是enp0s8: 1 ( 1 是key指定的值)
ifconfig enp0s8: 1  192.168 . 56.104 / 24
## 重啟mha
masterha_stop --conf=/data/mha/mha.conf
nohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover  < /dev/ null > /data/mha/app1/log/manager.log  2 >& 1  &

1.11 Mysql MHA故障模擬與VIP偏移功能驗證

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## Manager節點監控
# 停庫前
[root@mysqldb03 ~]# mysql -umha -pmha -h   192.168 . 56.104  -e  "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line  interface  can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     |  101    |
+---------------+-------+
# 停主庫Mysqldb01:    
/etc/init.d/mysqld stop
# 停庫後,且從庫切換主庫
[root@mysqldb03 mha]# mysql -umha -pmha -h   192.168 . 56.104  -e  "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line  interface  can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     |  102    |
+---------------+-------+
## Mysql Mha架構中VIP  192.168 . 56.104 始終不變,但主庫已從server_id= 101 切換至server_id= 102 (模擬server_id= 101 當機)。

1.12 Mysql MHA 故障後修復步驟                          

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 修復主庫
[root@Mysqldb01 ~]# /etc/init.d/mysqld start
# 恢復主從結構
CHANGE MASTER TO 
MASTER_HOST= '192.168.56.102' ,
MASTER_PORT= 3306
MASTER_AUTO_POSITION= 1
MASTER_USER= 'repl01'
MASTER_PASSWORD= 'oracle' ;
start slave ;
# 修改mha的配置檔案
[server1]
hostname= 192.168 . 56.101
port= 3306
# 啟動MHA
nohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover  < /dev/ null > /data/mha/app1/log/manager.log  2 >& 1  &


參考:《Oldguo-標杆班級-MySQL-lesson10-MHA高可用技術》


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26442936/viewspace-2911629/,如需轉載,請註明出處,否則將追究法律責任。

相關文章