Mysql 5.7 MHA 高可用

来源:这里教程网 时间:2026-03-01 16:48:26 作者:

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.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: 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.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 >& &

参考:《Oldguo-标杆班级-MySQL-lesson10-MHA高可用技术》

相关推荐