一、MHA Mysql数据库高可用
1、传统主从复制缺点和MHA主从复制优点
1)传统主从复制缺点
单点故障无法自动切换
需要管理员手动切换主数据库
2)MHA优点
监控主从复制运行的状态
当主设备发生故障自动切换新的主数据库并且自动修改从Mysql的主数据库
2、MHA的作用和角色
1)MHA的作用
监控Mysql主从复制状态
发现故障动态切换
2)MHA角色
MHA manager:监控端
MHA node:被监控端数据库节点
1、在 Centos01 上配置 NTP 时间服务器同步时间
1)挂载系统光盘 yum安装时间服务器
[root@centos01 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# rm -rf /etc/yum.repos.d/CentOS-*
[root@centos01 ~]# cat /etc/yum.repos.d/local.repo [local]
name=centos
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@centos01 ~]# yum -y install ntp
2)修改时间服务器配置文件
[root@centos01 ~]# vim /etc/ntp.conf
18 restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
19 server 127.127.1.0
20 fudge 127.127.1.0 stratum 8
3)重新启动服务设置开启自动启动
[root@centos01 ~]# systemctl restart ntpd
[root@centos01 ~]# systemctl enable ntpd
4)从库和延时从库同步时间
[root@centos02 ~]# ntpdate 192.168.100.10
2 Mar 17:15:21 ntpdate[9744]: adjust time server 192.168.100.10 offset -0.010884 sec
[root@centos03 ~]# ntpdate 192.168.100.10
2 Mar 17:15:28 ntpdate[3350]: adjust time server 192.168.100.10 offset -0.007429 sec
2、安装主 Mysql 数据库
1)安装 Mysql
[root@centos01 ~]# tar zxf mysql-8.0.32-el7-x86_64.tar.gz -C /usr/src/
[root@centos01 ~]# mv /usr/src/mysql-8.0.32-el7-x86_64/ /usr/local/mysql
2)创建管理 Mysql 用户
[root@centos01 ~]# groupadd mysql
[root@centos01 ~]# useradd -M -s /sbin/nologin -g mysql mysql
3)优化 Mysql 命令
[root@centos01 ~]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
[root@centos01 ~]# source /etc/profile
4)创建数据和日志存储目录
[root@centos01 ~]# mkdir /usr/local/mysql/date
[root@centos01 ~]# mkdir /usr/local/mysql/mysql-bin/
[root@centos01 ~]# chown -R mysql:mysql /usr/local/mysql/
5)生成 mysql 服务配置文件
[root@centos01 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@centos01 ~]# chmod +x /etc/init.d/mysqld
6)添加系统服务设置开机自动启动
[root@centos01 ~]# chkconfig --add mysqld
[root@centos01 ~]# chkconfig --level 35 mysqld on
7)修改主 Mysql 数据库配置文件
[root@centos01 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
log-bin=/usr/local/mysql/mysql-bin/mysql-bin
//二进制日志格式文件
socket=/tmp/mysql.sock
port=3306
secure-file-priv=/tmp
binlog_format=row //二进制日志格式
gtid-mode=on //开启GTID数据复制enforce-gtid-consistency=true //强制GTID一致性
log_replica_updates=1
server-id=10
8)初始化 Mysql 数据库
[root@centos01 ~]# mysqld --initialize-insecure
2023-02-28T19:22:05.391704Z 0 [System] [MY-013169] [Server]
/usr/local/mysql/bin/mysqld (mysqld 8.0.32) initializing of server in progress as
process 3760
2023-02-28T19:22:05.409568Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization
has started.
2023-02-28T19:22:06.394948Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization
has ended.
2023-02-28T19:22:08.151516Z 6 [Warning] [MY-010453] [Server] root@localhost is
created with an empty password ! Please consider switching off the --initialize
insecure option.
9)启动 Mysql 服务
[root@centos01 ~]# systemctl start mysqld
[root@centos01 ~]# netstat -anptu | grep 3306
tcp6 0 0 :::33060 :::* LISTEN 4549/mysqld
tcp6 0 0 :::3306 :::* LISTEN 4549/mysqld
10)优化 mysql 管理日志命令
[root@centos01 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/
[root@centos01 ~]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/
3、安装第一台从 Mysql 数据库
1)安装 Mysql[root@centos02 ~]# tar zxf mysql-8.0.32-el7-x86_64.tar.gz -C /usr/src/
[root@centos02 ~]# mv /usr/src/mysql-8.0.32-el7-x86_64/ /usr/local/mysql
2)创建管理 Mysql 用户
[root@centos02 ~]# groupadd mysql
[root@centos02 ~]# useradd -M -s /sbin/nologin -g mysql mysql
3)优化 Mysql 命令
[root@centos02 ~]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
[root@centos02 ~]# source /etc/profile
4)创建数据和日志存储目录
[root@centos02 ~]# mkdir /usr/local/mysql/date
[root@centos02 ~]# mkdir /usr/local/mysql/mysql-bin/
[root@centos02 ~]# chown -R mysql:mysql /usr/local/mysql/
5)生成 mysql 服务配置文件
[root@centos02 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@centos02 ~]# chmod +x /etc/init.d/mysqld
6)添加系统服务设置开机自动启动
[root@centos02 ~]# chkconfig --add mysqld
[root@centos02 ~]# chkconfig --level 35 mysqld on
7)修改主 Mysql 数据库配置文件
[root@centos02 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
log-bin=/usr/local/mysql/mysql-bin/mysql-bin
//二进制日志格式文件
socket=/tmp/mysql.sockport=3306
secure-file-priv=/tmp
binlog_format=row //二进制日志格式
gtid-mode=on //开启GTID数据复制
enforce-gtid-consistency=true //强制GTID一致性
log_replica_updates=1
server-id=20
8)初始化 Mysql 数据库
[root@centos02 ~]# mysqld --initialize-insecure
2023-02-28T19:22:05.391704Z 0 [System] [MY-013169] [Server]
/usr/local/mysql/bin/mysqld (mysqld 8.0.32) initializing of server in progress as
process 3760
2023-02-28T19:22:05.409568Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization
has started.
2023-02-28T19:22:06.394948Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization
has ended.
2023-02-28T19:22:08.151516Z 6 [Warning] [MY-010453] [Server] root@localhost is
created with an empty password ! Please consider switching off the --initialize
insecure option.
9)启动 Mysql 服务
[root@centos02 ~]# systemctl start mysqld
[root@centos02 ~]# netstat -anptu | grep 3306
tcp6 0 0 :::33060 :::* LISTEN 4549/mysqld
tcp6 0 0 :::3306 :::* LISTEN 4549/mysqld
10)优化管理日志命令[root@centos02 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/
[root@centos02 ~]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/
4、安装第二台从 Mysql 数据库
1)安装 Mysql
[root@centos03 ~]# tar zxf mysql-8.0.32-el7-x86_64.tar.gz -C /usr/src/
[root@centos03 ~]# mv /usr/src/mysql-8.0.32-el7-x86_64/ /usr/local/mysql
2)创建管理 Mysql 用户
[root@centos03 ~]# groupadd mysql
[root@centos03 ~]# useradd -M -s /sbin/nologin -g mysql mysql
3)优化 Mysql 命令
[root@centos03 ~]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
[root@centos03 ~]# source /etc/profile
4)创建数据和日志存储目录
[root@centos03 ~]# mkdir /usr/local/mysql/date
[root@centos03 ~]# mkdir /usr/local/mysql/mysql-bin/
[root@centos03 ~]# chown -R mysql:mysql /usr/local/mysql/
5)生成 mysql 服务配置文件
[root@centos03 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@centos03 ~]# chmod +x /etc/init.d/mysqld
6)添加系统服务设置开机自动启动
[root@centos03 ~]# chkconfig --add mysqld
[root@centos03 ~]# chkconfig --level 35 mysqld on
7)修改主 Mysql 数据库配置文件
[root@centos03 ~]# vim /etc/my.cnf
[mysqld]
user=mysqlbasedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
log-bin=/usr/local/mysql/mysql-bin/mysql-bin
//二进制日志格式文件
socket=/tmp/mysql.sock
port=3306
secure-file-priv=/tmp
binlog_format=row //二进制日志格式
gtid-mode=on //开启GTID数据复制
enforce-gtid-consistency=true //强制GTID一致性
log_replica_updates=1
server-id=30
8)初始化 Mysql 数据库
[root@centos03 ~]# mysqld --initialize-insecure
2023-02-28T19:22:05.391704Z 0 [System] [MY-013169] [Server]
/usr/local/mysql/bin/mysqld (mysqld 8.0.32) initializing of server in progress as
process 3760
2023-02-28T19:22:05.409568Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization
has started.
2023-02-28T19:22:06.394948Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization
has ended.
2023-02-28T19:22:08.151516Z 6 [Warning] [MY-010453] [Server] root@localhost is
created with an empty password ! Please consider switching off the --initialize
insecure option.
9)启动 Mysql 服务
[root@centos03 ~]# systemctl start mysqld[root@centos03 ~]# netstat -anptu | grep 3306
tcp6 0 0 :::33060 :::* LISTEN 4549/mysqld
tcp6 0 0 :::3306 :::* LISTEN 4549/mysqld
10)优化管理 Mysql 数据库日志
[root@centos03 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/
[root@centos03 ~]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/
二、配置 Mysql 主从复制
1、配置 ssh 免交互式验证
1)在 Centos01 生成 ssh 公钥上传其他两个节点
[root@centos01 ~]# ssh-keygen -t RSA
[root@centos02 ~]# ssh-copy-id -i root@192.168.100.10
[root@centos01 ~]# ssh-copy-id -i root@192.168.100.20
[root@centos01 ~]# ssh-copy-id -i root@192.168.100.30
[root@centos01 ~]# ssh-copy-id -i root@192.168.100.40
2)在 Centos02 生成 ssh 公钥上传其他两个节点
[root@centos02 ~]# ssh-keygen -t RSA
[root@centos02 ~]# ssh-copy-id -i root@192.168.100.10
[root@centos02 ~]# ssh-copy-id -i root@192.168.100.20
[root@centos02 ~]# ssh-copy-id -i root@192.168.100.30
[root@centos02 ~]# ssh-copy-id -i root@192.168.100.40
3)在 Centos03 生成 ssh 公钥上传其他两个节点
[root@centos03 ~]# ssh-keygen -t RSA
[root@centos03 ~]# ssh-copy-id -i root@192.168.100.10
[root@centos03 ~]# ssh-copy-id -i root@192.168.100.20[root@centos03 ~]# ssh-copy-id -i root@192.168.100.30
[root@centos03 ~]# ssh-copy-id -i root@192.168.100.40
4)在 Centos04 生成 ssh 公钥上传其他两个节点
[root@centos04 ~]# ssh-keygen -t RSA
[root@centos04 ~]# ssh-copy-id -i root@192.168.100.10
[root@centos04 ~]# ssh-copy-id -i root@192.168.100.20
[root@centos04 ~]# ssh-copy-id -i root@192.168.100.30
[root@centos04 ~]# ssh-copy-id -i root@192.168.100.40
2、配置基于 GTID 的主从辅助
1)创建授权复制账户
[root@centos01 ~]# mysql -uroot -p
mysql> show master status;
+-------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+-------------------+
| mysql-master-bin.000002 | 157 | | | |
+-------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> create user repl@'192.168.100.%' identified with mysql_native_password by
'pwd@123';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to repl@'192.168.100.%';
Query OK, 0 rows affected (0.00 sec)
2)配置第一台从 Mysql 数据库同步数据
[root@centos02 ~]# mysql -uroot -pmysql> change master to
master_host='192.168.100.10',master_user='repl',master_password='pwd@123',master_log
_file='mysql-master
bin.000002',master_log_pos=157,master_connect_retry=10,master_port=3306;
Query OK, 0 rows affected, 10 warnings (0.02 sec)
mysql> start replica;
Query OK, 0 rows affected (0.01 sec)
mysql> show replica status\G;
*************************** 1. row ***************************
Replica_IO_State: Waiting for source to send event
Source_Host: 192.168.100.10
Source_User: repl
Source_Port: 3306
Connect_Retry: 10
Source_Log_File: mysql-master-bin.000002
Read_Source_Log_Pos: 684
Relay_Log_File: centos02-relay-bin.000002
Relay_Log_Pos: 860
Relay_Source_Log_File: mysql-master-bin.000002
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
[root@centos02 ~]# mysql -uroot -pmysql> create user repl@'192.168.100.%' identified with mysql_native_password by
'pwd@123';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to repl@'192.168.100.%';
Query OK, 0 rows affected (0.00 sec)
3)配置第二台从 Mysql 数据库同步数据,从库撞见数据复制账户
mysql> change master to
master_host='192.168.100.10',master_user='repl',master_password='pwd@123',master_log
_file='mysql-master
bin.000002',master_log_pos=684,master_connect_retry=10,master_port=3306;
Query OK, 0 rows affected, 10 warnings (0.01 sec)
mysql> start replica;
Query OK, 0 rows affected (0.01 sec)
mysql> show replica status\G;
*************************** 1. row ***************************
Replica_IO_State: Waiting for source to send event
Source_Host: 192.168.100.10
Source_User: repl
Source_Port: 3306
Connect_Retry: 10
Source_Log_File: mysql-master-bin.000002
Read_Source_Log_Pos: 684 Relay_Log_File: centos03-relay-bin.000002
Relay_Log_Pos: 333
Relay_Source_Log_File: mysql-master-bin.000002
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
[root@centos03 ~]# mysql -uroot -p
mysql> create user repl@'192.168.100.%' identified with mysql_native_password by
'pwd@123';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to repl@'192.168.100.%';
Query OK, 0 rows affected (0.00 sec)
三、配置 Mysql 数据库的 MHA 高可用
1、安装 MHA 程序
1)Centos01 安装 MHA 程序安装 node 节点
[root@centos01 ~]# rm -rf /etc/yum.repos.d/CentOS-*
[root@centos01 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# yum -y install perl-DBD-MySQL
[root@centos01 ~]# rpm -ivh ./MHA/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
Preparing... ################################# [100%]
Updating / installing... 1:mha4mysql-node-0.58-0.el7.centos ################################# [100%]
2)Centos02 安装 MHA 程序安装 node 节点
[root@centos02 ~]# rm -rf /etc/yum.repos.d/CentOS-*
[root@centos02 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# yum -y install perl-DBD-MySQL
[root@centos02 ~]# rpm -ivh ./MHA/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
Preparing... ################################# [100%]
Updating / installing...
1:mha4mysql-node-0.58-0.el7.centos ################################# [100%]
3)Centos03 安装 MHA 程序安装 node 节点
[root@centos03 ~]# rm -rf /etc/yum.repos.d/*
[root@centos03 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
[root@centos03 ~]#yum -y install perl-DBD-MySQL
[root@centos03 ~]# rpm -ivh ./MHA/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mha4mysql-node-0.58-0.el7.centos ################################# [100%]
4)安装管理节点
[root@centos04 ~]# yum -y install perl-Config-Tiny epel-release perl-Log-Dispatch
perl-ParalleForkManager perl-Time-HiResl perl-DBD-MySQL
[root@centos04 ~]# rpm -ivh ./MHA/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
准备中... ################################# [100%]
正在升级/安装... 1:mha4mysql-node-0.58-0.el7.centos ################################# [100%]
[root@centos04 MHA]# rpm -ivh ./mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mha4mysql-manager-0.58-0.el7.cent################################# [100%]
5)创建 MHA 常用软件
[root@centos04 ~]# mkdir /etc/mha //配置文件目录
[root@centos04 ~]# mkdir -p /var/log/mha/app1 //日志文件目录
[root@centos04 ~]# mkdir -p /var/log/mha/app1/manager //服务器端日志
6)修改 MHA 主配置文件
[root@centos04 ~]# vim /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager //mha服务器端日志保存在manager文
件中
manager_workdir=/var/log/mha/app1 //mha工作目录
master_binlog_dir=/usr/local/mysql/mysql-bin/ //主Mysql数据库日志
user=mha //数据库用户,监控数据库和日志
password=mha //数据库密码
ping_interval=2 //心跳检测频率2s发送一次
repl_password=123 //数据复制密码
repl_user=repl //数据复制用户
ssh_user=root //服务器用户
[server1]
hostname=192.168.100.10 //主数据库
port=3306[server2]
hostname=192.168.100.20 //第一个从Mysql
candidate_master=1 //优先提升为master
port=3306
[server3]
hostname=192.168.100.30 //第二个从Mysql
port=3306
2、主数据库创建管理复制账户,从 Mysql 查看复制用户信息,互信状态检
查和主从状态检查
1)创建用户授权复制
[root@centos01 ~]# mysql -uroot -p
mysql> create user mha@'192.168.100.%' identified with mysql_native_password by
'mha';
mysql> grant all privileges on *.* to mha@'192.168.100.%';
Query OK, 0 rows affected (0.01 sec)
2)查看从 Mysql 数据库复制的数据信息
[root@centos02 ~]# mysql -uroot -p
mysql> select user,host from mysql.user;
+------------------+---------------+
| user | host |
+------------------+---------------+
| mha | 192.168.100.% |
| repl | 192.168.100.% |
| mysql.infoschema | localhost || mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+---------------+
5 rows in set (0.00 sec)
3)查看从 Mysql 数据库复制的数据信息
[root@centos03 ~]# mysql -uroot -p
mysql> select user,host from mysql.user;
+------------------+---------------+
| user | host |
+------------------+---------------+
| mha | 192.168.100.% |
| repl | 192.168.100.% |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+---------------+
5 rows in set (0.00 sec)
4)互信状态检查
[root@centos04 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
Mon Mar 6 19:12:23 2023 - [warning] Global configuration file
/etc/masterha_default.cnf not found. Skipping.
Mon Mar 6 19:12:23 2023 - [info] Reading application default configuration from
/etc/mha/app1.cnf..Mon Mar 6 19:12:23 2023 - [info] Reading server configuration from
/etc/mha/app1.cnf..
Mon Mar 6 19:12:24 2023 - [info] Starting SSH connection tests..
Mon Mar 6 19:12:25 2023 - [debug]
Mon Mar 6 19:12:24 2023 - [debug] Connecting via SSH from
root@192.168.100.10(192.168.100.10:22) to root@192.168.100.20(192.168.100.20:22)..
Mon Mar 6 19:12:24 2023 - [debug] ok.
Mon Mar 6 19:12:24 2023 - [debug] Connecting via SSH from
root@192.168.100.10(192.168.100.10:22) to root@192.168.100.30(192.168.100.30:22)..
Mon Mar 6 19:12:24 2023 - [debug] ok.
Mon Mar 6 19:12:25 2023 - [debug]
Mon Mar 6 19:12:24 2023 - [debug] Connecting via SSH from
root@192.168.100.20(192.168.100.20:22) to root@192.168.100.10(192.168.100.10:22)..
Mon Mar 6 19:12:24 2023 - [debug] ok.
Mon Mar 6 19:12:24 2023 - [debug] Connecting via SSH from
root@192.168.100.20(192.168.100.20:22) to root@192.168.100.30(192.168.100.30:22)..
Mon Mar 6 19:12:25 2023 - [debug] ok.
Mon Mar 6 19:12:26 2023 - [debug]
Mon Mar 6 19:12:25 2023 - [debug] Connecting via SSH from
root@192.168.100.30(192.168.100.30:22) to root@192.168.100.10(192.168.100.10:22)..
Mon Mar 6 19:12:25 2023 - [debug] ok.
Mon Mar 6 19:12:25 2023 - [debug] Connecting via SSH from
root@192.168.100.30(192.168.100.30:22) to root@192.168.100.20(192.168.100.20:22)..
Mon Mar 6 19:12:25 2023 - [debug] ok.Mon Mar 6 19:12:26 2023 - [info] All SSH connection tests passed successfully.
5)复制状态检查
[root@centos04 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
Mon Mar 6 19:38:03 2023 - [warning] Global configuration file
/etc/masterha_default.cnf not found. Skipping.
Mon Mar 6 19:38:03 2023 - [info] Reading application default configuration from
/etc/mha/app1.cnf..
Mon Mar 6 19:38:03 2023 - [info] Reading server configuration from
/etc/mha/app1.cnf..
Mon Mar 6 19:38:03 2023 - [info] MHA::MasterMonitor version 0.58.
Mon Mar 6 19:38:04 2023 - [info] GTID failover mode = 1
Mon Mar 6 19:38:04 2023 - [info] Dead Servers:
Mon Mar 6 19:38:04 2023 - [info] Alive Servers:
Mon Mar 6 19:38:04 2023 - [info] 192.168.100.10(192.168.100.10:3306)
Mon Mar 6 19:38:04 2023 - [info] 192.168.100.20(192.168.100.20:3306)
Mon Mar 6 19:38:04 2023 - [info] 192.168.100.30(192.168.100.30:3306)
Mon Mar 6 19:38:04 2023 - [info] Alive Slaves:
Mon Mar 6 19:38:04 2023 - [info] 192.168.100.20(192.168.100.20:3306)
Version=8.0.32 (oldest major version between slaves) log-bin:enabled
Mon Mar 6 19:38:04 2023 - [info] GTID ON
Mon Mar 6 19:38:04 2023 - [info] Replicating from
192.168.100.10(192.168.100.10:3306)
Mon Mar 6 19:38:04 2023 - [info] Primary candidate for the new Master
(candidate_master is set)Mon Mar 6 19:38:04 2023 - [info] 192.168.100.30(192.168.100.30:3306)
Version=8.0.32 (oldest major version between slaves) log-bin:enabled
Mon Mar 6 19:38:04 2023 - [info] GTID ON
Mon Mar 6 19:38:04 2023 - [info] Replicating from
192.168.100.10(192.168.100.10:3306)
Mon Mar 6 19:38:04 2023 - [info] Current Alive Master:
192.168.100.10(192.168.100.10:3306)
Mon Mar 6 19:38:04 2023 - [info] Checking slave configurations..
Mon Mar 6 19:38:04 2023 - [info] read_only=1 is not set on slave
192.168.100.20(192.168.100.20:3306).
Mon Mar 6 19:38:04 2023 - [info] read_only=1 is not set on slave
192.168.100.30(192.168.100.30:3306).
Mon Mar 6 19:38:04 2023 - [info] Checking replication filtering settings..
Mon Mar 6 19:38:04 2023 - [info] binlog_do_db= , binlog_ignore_db=
Mon Mar 6 19:38:04 2023 - [info] Replication filtering check ok.
Mon Mar 6 19:38:04 2023 - [info] GTID (with auto-pos) is supported. Skipping all
SSH and Node package checking.
Mon Mar 6 19:38:04 2023 - [info] Checking SSH publickey authentication settings on
the current master..
Mon Mar 6 19:38:04 2023 - [info] HealthCheck: SSH to 192.168.100.10 is reachable.
Mon Mar 6 19:38:04 2023 - [info]
192.168.100.10(192.168.100.10:3306) (current master)
+--192.168.100.20(192.168.100.20:3306)
+--192.168.100.30(192.168.100.30:3306)Mon Mar 6 19:38:04 2023 - [info] Checking replication health on 192.168.100.20..
Mon Mar 6 19:38:04 2023 - [info] ok.
Mon Mar 6 19:38:04 2023 - [info] Checking replication health on 192.168.100.30..
Mon Mar 6 19:38:04 2023 - [info] ok.
Mon Mar 6 19:38:04 2023 - [warning] master_ip_failover_script is not defined.
Mon Mar 6 19:38:04 2023 - [warning] shutdown_script is not defined.
Mon Mar 6 19:38:04 2023 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK
.
6)启动 mha 服务
[root@centos04 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --
remove_dead_master_conf --ignore_last_failover < /dev/null >
/var/log/mha/app1/manager.log 2>&1 &
[1] 7345
[root@centos03 ~]#
7)查看 MHA 运行状态
[root@centos04 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:7345) is running(0:PING_OK), master:192.168.100.10
3、配置 MHA VIP 地址
1)修改脚本配置文件
[root@centos04 ~]# vim ./master_ip_failover.sh
#!/usr/bin/env perl
use strict;use warnings FATAL => 'all';
use Getopt::Long;
my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
my $vip = '192.168.100.40/24'; //配置的IPv地址
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens32:$key $vip"; //地址捆绑网卡
my $ssh_stop_vip = "/sbin/ifconfig ens32:$key down"; //地址捆绑网卡
my $ssh_Bcast_arp = "/sbin/ifconfig -I ens32 -c 3 -A 192.168.100.40"; //故障切换
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,);
exit &main();
sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) { my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;}
sub stop_vip() {
return 0 unless ($ssh_user);
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {
"Usage: master_ip_failover --command=start|stop|stopssh|status --
orig_master_host=host --orig_master_ip=ip --orig_master_port=port --
new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}
[root@centos03 ~]# cp ./master_ip_failover.sh /usr/local/bin/
2)配置 MHA 加载 VIP 地址检测脚本
[root@centos04 ~]# vim /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1/
master_binlog_dir=/usr/local/mysql/mysql-bin/
user=mha
password=mha
ping_interval=2
repl_user=repl
repl_password=pwd@123
ssh_user=rootmaster_ip_failover_script=/usr/local/bin/master_ip_failover.sh //加载检测脚本
[server1]
hostname=192.168.100.10
port=3306
[server2]
hostname=192.168.100.20
candidate_master=1
port=3306
[server3]
hostname=192.168.100.30
port=3306
3)停止 MHA 服务
[root@centos04 ~]# masterha_stop --conf=/etc/mha/app1.cnf
Stopped app1 successfully.
4)启动 MHA 服务器
[root@centos04 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --
remove_dead_master_conf --ignore_last_failover < /dev/null >
/var/log/mha/app1/manager.log 2>&1 &
[1] 9309
5)查看服务运行状态
[root@centos04 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:9309) is running(0:PING_OK), master:192.168.100.10
6)手动主数据库添加 VIP 地址
[root@centos01 ~]# ifconfig ens32:1 192.168.100.40/24
[root@centos01 ~]# ifconfig ens32:1
ens32:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.40 netmask 255.255.255.0 broadcast 192.168.100.255
ether 00:0c:29:4c:c7:69 txqueuelen 1000 (Ethernet)
四、配置故障邮件提醒测试
1、配置邮件收发
1)移动邮件配置文件
[root@centos04 email]# ls
send sendEmail testpl
[root@centos04 email]#
[root@centos04 email]# cp * /usr/local/bin/
2)修改邮件发送文件
[root@centos04 ~]# vim /usr/local/bin/testpl
#!/bin/bash
/usr/local/bin/sendEmail -o tls=no -f 13161295981@163.com -t 821409986@qq.com -s
smtp.163.com:25 -xu 13161295981@163.com -xp JZUXGPJNESGHLJIV -u "MHA Waring" -m
"YOUR MHA MAY BE FAILOVER" &>/tmp/sendmail.log
3)测试发送邮件
[root@centos04 ~]#
sh /usr/local/bin/testpl
2、配置 MHA 故障发送电子邮件
1)修改 MHA 主配置文件加载邮件功能
[root@centos04 ~]# vim /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1/
master_binlog_dir=/usr/local/mysql/mysql-bin/
user=mha
password=mha
ping_interval=2
repl_user=repl
repl_password=pwd@123
ssh_user=root
master_ip_failover_script=/usr/local/bin/master_ip_failover.sh
report_script=/usr/local/bin/testpl
[server1]
hostname=192.168.100.10
port=3306
[server2]
hostname=192.168.100.20
candidate_master=1
port=3306
[server3]
hostname=192.168.100.30port=3306
2)停止 MHA 服务
[root@centos04 ~]# masterha_stop --conf=/etc/mha/app1.cnf
Stopped app1 successfully.
3)启动 MHA 服务
[root@centos04 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --
remove_dead_master_conf --ignore_last_failover < /dev/null>
/var/log/mha/app1/manager.log 2>&1 &
[1] 10647
4)查看运行状态
[root@centos03 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:10647) is running(0:PING_OK), master:192.168.100.10
3、MHA 在线切换
1)停止 MHA 服务
[root@centos04 ~]# masterha_stop --conf=/etc/mha/app1.cnf
2)在线将主 Mysql 切换到 192.168.100.30
[root@centos04 ~]# masterha_master_switch --conf=/etc/mha/app1.cnf --
master_state=alive --new_master_host=192.168.100.30 --orig_master_is_new_slave --
running_updates_limit=10000