0
点赞
收藏
分享

微信扫一扫

Mysql MHA

安七月读书 2023-03-09 阅读 105

​一、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 {

print

"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

举报

相关推荐

mysql MHA

MySQL MHA

Mysql的MHA

MySQL的MHA

mysql之MHA

mysql mha高可用

mysql mgr和mha

0 条评论