博客 MySQL MHA高可用配置实现及优化技巧

MySQL MHA高可用配置实现及优化技巧

   数栈君   发表于 2025-12-15 16:44  105  0

在现代企业中,数据是核心资产,而数据库是存储和管理数据的核心系统。为了确保数据库的高可用性和稳定性,MySQL MHA(Master High Availability)成为许多企业的首选解决方案。本文将详细介绍MySQL MHA的高可用配置实现及优化技巧,帮助企业在数据中台、数字孪生和数字可视化等领域实现更高效的数据库管理。


什么是MySQL MHA?

MySQL MHA(Master High Availability)是一个用于实现MySQL主从复制高可用性的工具。它通过监控主数据库的状态,并在主数据库故障时自动将从数据库提升为主数据库,从而实现数据库服务的无缝切换。MHA的核心功能包括:

  • 主从复制监控:实时监控主数据库和从数据库的状态。
  • 故障自动切换:当主数据库发生故障时,MHA会自动将从数据库提升为主数据库。
  • 数据一致性保证:通过半同步复制和数据校验机制,确保主从数据库的数据一致性。

MHA适用于需要高可用性、数据一致性和快速故障恢复的场景,特别适合数据中台、数字孪生和数字可视化等对数据实时性要求较高的领域。


MySQL MHA高可用配置实现步骤

1. 环境准备

在配置MHA之前,需要确保以下环境已经准备好:

  • 操作系统:Linux(推荐 CentOS 7+ 或 Ubuntu 18.04+)。
  • MySQL版本:MySQL 5.7+ 或 MariaDB 10.3+。
  • 硬件资源:主数据库和从数据库需要足够的CPU、内存和磁盘空间。
  • 网络配置:主数据库和从数据库需要网络连通性,并且建议使用低延迟的网络。

2. 安装与配置MHA

安装MHA

在主数据库和从数据库上安装MHA。以下是安装步骤:

# 下载MHA源码wget https://github.com/yoshinari-natsume/masterha/archive/refs/tags/v0.6.2.tar.gz# 解压源码tar -zxvf masterha-0.6.2.tar.gzcd masterha-0.6.2/# 编译安装./configuremakemake install

配置MHA

在主数据库和从数据库上创建MHA的配置文件/etc/masterha/app.conf,内容如下:

[application]name=mha_clustercandidate_master=1master_switch_check=1master_ip=192.168.1.100[server1]hostname=192.168.1.101candidate_master=1master_priority=100separate_conf_file=/etc/masterha/server1.cnf[server2]hostname=192.168.1.102candidate_master=1master_priority=90separate_conf_file=/etc/masterha/server2.cnf

配置主从复制

在主数据库上创建用户并授予复制权限:

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.%' IDENTIFIED BY 'password';FLUSH PRIVILEGES;

在从数据库上配置主从复制:

CHANGE MASTER TOMASTER_HOST='192.168.1.101',MASTER_USER='repl_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4;START SLAVE;

3. 配置心跳检测

MHA通过心跳检测来判断主数据库是否存活。通常使用keepalivedcorosync实现心跳检测。以下是使用keepalived的配置示例:

在主数据库和从数据库上安装并配置keepalived

# 安装keepalivedyum install keepalived -y# 配置keepalivedvim /etc/keepalived/keepalived.conf

内容如下:

global_defs {    notification_email {        root@localhost    }    notification_email_from root@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30}vrrp_script check_mysql {    script "/etc/keepalived/check_mysql.sh"    interval 2    weight 2}vrrp_instance MHA_VRRP {    state MASTER    interface eth0    virtual_router_id 1    priority 100    advert_int 1    authentication {        auth_type NONE    }    track_script {        check_mysql    }    virtual_ip {        192.168.1.100    }}

创建检查MySQL状态的脚本:

vim /etc/keepalived/check_mysql.sh

内容如下:

#!/bin/bashDB_USER=rootDB_PASSWORD=your_passwordDB_HOST=127.0.0.1mysql -u${DB_USER} -p${DB_PASSWORD} -h${DB_HOST} -e "SELECT 1" >/dev/null 2>&1if [ $? -ne 0 ]; then    echo "MySQL is not running"    exit 2fiexit 0

4. 配置VIP

在主数据库和从数据库上配置虚拟IP(VIP),确保在主数据库故障时,VIP自动切换到从数据库。

在主数据库上配置VIP:

# 配置VIPvim /etc/sysconfig/network-scripts/ifcfg-eth0

添加以下内容:

IPADDR=192.168.1.100NETMASK=255.255.255.0

重启网络服务:

systemctl restart network

5. 启动与测试

启动MHA和keepalived服务:

# 启动MHAmasterha_manager start# 启动keepalivedsystemctl start keepalived

测试主数据库故障切换:

  • 在主数据库上停止MySQL服务:
    systemctl stop mysqld
  • 观察从数据库是否自动提升为主数据库,并且VIP是否切换到从数据库。

MySQL MHA优化技巧

1. 负载均衡

为了提高数据库的读写性能,可以在从数据库上配置负载均衡。常用的负载均衡工具包括LVSNginx

使用LVS实现负载均衡

在负载均衡服务器上安装并配置LVS:

# 安装ipvsadmyum install ipvsadm -y# 配置LVSipvsadm -A -t 192.168.1.100:3306 -scheduler rripvsadm -a -t 192.168.1.100:3306 -r 192.168.1.101:3306 -weight 1ipvsadm -a -t 192.168.1.100:3306 -r 192.168.1.102:3306 -weight 1

使用Nginx实现负载均衡

在Nginx服务器上配置反向代理:

upstream mysql_cluster {    server 192.168.1.101:3306 weight=1;    server 192.168.1.102:3306 weight=1;}server {    listen 3306;    proxy_pass mysql_cluster;    proxy_set_header Host $host;}

2. 读写分离

为了提高数据库的性能,可以将读操作和写操作分离。写操作集中在主数据库,读操作分担到从数据库。

配置主数据库只允许写操作

在主数据库上配置只允许写操作:

CREATE USER 'write_user'@'%' IDENTIFIED BY 'write_password';GRANT INSERT, UPDATE, DELETE ON *.* TO 'write_user'@'%';FLUSH PRIVILEGES;

配置从数据库只允许读操作

在从数据库上配置只允许读操作:

CREATE USER 'read_user'@'%' IDENTIFIED BY 'read_password';GRANT SELECT ON *.* TO 'read_user'@'%';FLUSH PRIVILEGES;

3. 数据备份与恢复

为了防止数据丢失,需要定期备份数据库。以下是常用的备份工具和策略:

使用mysqldump备份

mysqldump -u root -p --all-databases > / backups/db_$(date +%Y%m%d).sql

使用Percona XtraBackup备份

innobackupex --user=root --password=your_password / backups/ --no-timestamp

4. 性能调优

为了提高数据库的性能,可以进行以下优化:

配置my.cnf

my.cnf中添加以下配置:

[mysqld]innodb_buffer_pool_size=1Gquery_cache_type=1query_cache_size=64M

启用半同步复制

在主数据库和从数据库上启用半同步复制:

SET GLOBAL rpl_semi_sync_master_enabled = 1;SET GLOBAL rpl_semi_sync_slave_enabled = 1;

5. 监控与告警

为了及时发现和解决问题,需要配置数据库监控和告警工具。常用的工具包括Percona Monitoring and ManagementPrometheus + Grafana

使用Percona Monitoring and Management

安装并配置Percona Monitoring and Management:

# 安装Percona Monitoring and Managementhttps://www.percona.com/downloads/pmm-client/

配置监控任务:

pmm-admin config --add mysql:192.168.1.101:3306 root your_passwordpmm-admin config --add mysql:192.168.1.102:3306 root your_password

使用Prometheus + Grafana

配置Prometheus监控MySQL:

scrape_configs:  - job_name: 'mysql'    targets: ['192.168.1.101:9104', '192.168.1.102:9104']

配置Grafana仪表盘:

{  "name": "mysql_status",  "type": "graph",  "query": "mysql_global_status{instance=~\"192.168.1.101:9104\" or instance=~\"192.168.1.102:9104\"}"}

总结

MySQL MHA是一个强大的工具,能够帮助企业实现数据库的高可用性和数据一致性。通过合理的配置和优化,可以显著提升数据库的性能和稳定性。对于数据中台、数字孪生和数字可视化等领域的用户来说,MHA能够提供可靠的数据支持,确保业务的连续性和高效运行。

如果您对MySQL MHA感兴趣,或者希望进一步了解数据中台、数字孪生和数字可视化解决方案,可以申请试用我们的产品:申请试用。我们的技术团队将为您提供专业的支持和服务。

通过本文的介绍和优化技巧,相信您已经对MySQL MHA的高可用配置有了更深入的了解。希望这些内容能够帮助您在实际应用中取得更好的效果!

申请试用&下载资料
点击袋鼠云官网申请免费试用:https://www.dtstack.com/?src=bbs
点击袋鼠云资料中心免费下载干货资料:https://www.dtstack.com/resources/?src=bbs
《数据资产管理白皮书》下载地址:https://www.dtstack.com/resources/1073/?src=bbs
《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057/?src=bbs
《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001/?src=bbs
《数栈V6.0产品白皮书》下载地址:https://www.dtstack.com/resources/1004/?src=bbs

免责声明
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,袋鼠云不对内容的真实、准确或完整作任何形式的承诺。如有其他问题,您可以通过联系400-002-1024进行反馈,袋鼠云收到您的反馈后将及时答复和处理。
0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料