MHA实现MySQL 8数据库的高可用性

100人浏览   2025-03-11 00:13:38


MHA (Master High Availability) 是一个开源的MySQL主从复制集群解决方案,用于实现MySQL数据库的高可用性。MHA中间件是MHA解决方案的核心组成部分,它负责监控MySQL主节点的状态,并在主节点发生故障时自动切换到备节点,以保证数据库的持续可用性。

MHA中间件的工作原理:

  1. MHA中间件会通过监控主节点的二进制日志和心跳来判断主节点的状态。
  2. 当主节点发生故障或无法访问时,MHA中间件会自动将备节点提升为新的主节点。
  3. 同时,MHA中间件会将其他备节点的配置信息更新,使它们能够连接到新的主节点。
  4. 一旦主节点恢复正常,MHA中间件会将其重新配置为备节点,并将新的主节点的配置信息同步到其他备节点。

通过使用MHA中间件,可以实现MySQL数据库的自动故障切换和快速恢复,提高数据库的可用性和可靠性。

MHA实现MySQL 8数据库的高可用性的流程:

MHA实现(以192.168.1.10,192.168.1.20,192.168.1.30 这三台mysql8数据库服务器,192.168.1.50 MHA 服务器为例,系统为Ubantu20.04)实现MySQL8数据库的高可用性。

以下是详细的步骤来实现MySQL8数据库的高可用性:

1)在192.168.1.10、192.168.1.20和192.168.1.30上安装MySQL8数据库。

使用以下命令在每台服务器上安装MySQL8:

sudo apt updatesudo apt install mysql-server

安装过程中,会要求设置MySQL root密码,请记住这个密码。

2)在192.168.1.50上安装MHA工具。

使用以下命令在MHA服务器上安装MHA4MySQL-Manager:

sudo apt updatesudo apt install mha4mysql-manager

3)在192.168.1.50上创建MHA的配置文件。

  • 使用以下命令创建MHA配置文件:
sudo mkdir /etc/mha_managersudo vi /etc/mha_manager/app1.cnf
  • 编辑 app1.cnf 文件,配置MHA的相关参数:
[server default]user=root
password=your_mysql_root_password
ssh_user=your_ssh_username
repl_password=your_mysql_repl_password
manager_workdir=/var/log/masterha/app1
remote_workdir=/var/log/masterha/app1
ping_interval=3
ping_type=select
ping_user=your_ping_user
ping_passwd=your_ping_password
master_ip_failover_script=/etc/mha_manager/failover.sh
master_ip_online_change_script=/etc/mha_manager/online_change.sh
[server1]
hostname=192.168.1.10
candidate_master=1

[server2]
hostname=192.168.1.20

[server3]
hostname=192.168.1.30

请将以下参数替换为你的实际值:

  • your_mysql_root_password:MySQL root用户的密码。
  • your_ssh_username:用于SSH连接到服务器的用户名。
  • your_mysql_repl_password:MySQL复制密码。
  • your_ping_user:用于检查服务器间连通性的用户。
  • your_ping_password:用户的密码。

此外,你还需要创建两个脚本文件 failover.sh 和 online_change.sh 并将其放置在 /etc/mha_manager/ 目录下。这些脚本文件将负责执行故障转移和在线切换的操作。

failover.sh 示例:

#!/bin/bash
echo "Failover script executed." >> /var/log/mha_manager/failover.log
echo "Failed node: $1" >> /var/log/mha_manager/failover.log
echo "New master: $2" >> /var/log/mha_manager/failover.log

# 定义服务器用户名和密码
username="your_username"
password="your_password"

# 停止故障节点的MySQL服务
sshpass -p $password ssh $username@192.168.1.10 "sudo systemctl stop mysql"

# 确保新主节点的MySQL服务已启动
sshpass -p $password ssh $username@192.168.1.20 "sudo systemctl start mysql"

# 更新MHA的配置文件,将新主节点设置为主服务器
sudo sed -i "s/candidate_master=1/candidate_master=0/g" /etc/mha_manager/app1.cnf
sudo sed -i "s/hostname=192.168.1.10/hostname=192.168.1.20/g" /etc/mha_manager/app1.cnf

# 重启MHA管理器
sudo masterha_manager --conf=/etc/mha_manager/app1.cnf --restart

online_change.sh 示例:

#!/bin/bash
echo "Online change script executed." >> /var/log/mha_manager/online_change.log
echo "New master: $1" >> /var/log/mha_manager/online_change.log

# 定义服务器用户名和密码
username="your_username"
password="your_password"

# 停止原主节点的MySQL服务
sshpass -p $password ssh $username@192.168.1.10 "sudo systemctl stop mysql"

# 确保新主节点的MySQL服务已启动
sshpass -p $password ssh $username@192.168.1.20 "sudo systemctl start mysql"

# 更新MHA的配置文件,将新主节点设置为主服务器
sudo sed -i "s/candidate_master=1/candidate_master=0/g" /etc/mha_manager/app1.cnf
sudo sed -i "s/hostname=192.168.1.10/hostname=192.168.1.20/g" /etc/mha_manager/app1.cnf

# 重启MHA管理器
sudo masterha_manager --conf=/etc/mha_manager/app1.cnf --restart

请根据你的需求修改这两个脚本文件,例如执行数据库的切换、重新配置等操作。

在配置文件中,[server1] 是主服务器,[server2] 和 [server3] 是备用服务器。你可以根据实际情况进行调整。确保所有服务器上的MySQL服务都已启动,并且主服务器上已启用了复制功能。

请将 your_username 替换为实际的用户名,将 your_password 替换为实际的密码。在这些脚本中,我们使用了 sshpass 命令来提供密码并自动登录到远程服务器。请确保已经在系统中安装了 sshpass。

完成脚本的修改后,保存并运行MHA管理器来启动高可用性配置。当发生故障或需要进行在线切换时,MHA管理器将执行相应的脚本来执行必要的操作。

4)在192.168.1.50上创建MHA的工作目录。

  • 使用以下命令创建MHA的工作目录:
sudo mkdir -p /var/log/masterha/app1
sudo chown -R mysql:mysql /var/log/masterha

5)在192.168.1.50上执行MHA的初始化。

  • 使用以下命令进行初始化:
sudo masterha_manager --conf=/etc/mha_manager/app1.cnf --create

这将在初始化过程中生成必要的配置文件和脚本。

6)在192.168.1.50上启动MHA管理器。

  • 使用以下命令启动MHA管理器:
sudo masterha_manager --conf=/etc/mha_manager/app1.cnf
  • MHA管理器将开始监视并管理你的MySQL服务器。你可以使用以下命令来停止MHA管理器:
sudo masterha_stop --conf=/etc/mha_manager/app1.cnf

这样,你就可以通过MHA实现MySQL8数据库的高可用性。MHA会自动检测主服务器的故障,并自动切换到备用服务器,以确保数据库的连续性和可用性。你可以根据需要进行更多的配置,如监控和自动故障转移的触发条件等。

相关推荐