在现代企业中,数据是核心资产,而数据库是存储和管理数据的核心系统。为了确保数据库的高可用性和稳定性,MySQL MHA(Master High Availability)成为许多企业的首选解决方案。本文将详细介绍MySQL MHA的高可用配置实现及优化技巧,帮助企业在数据中台、数字孪生和数字可视化等领域实现更高效的数据库管理。
MySQL MHA(Master High Availability)是一个用于实现MySQL主从复制高可用性的工具。它通过监控主数据库的状态,并在主数据库故障时自动将从数据库提升为主数据库,从而实现数据库服务的无缝切换。MHA的核心功能包括:
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的配置文件/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;MHA通过心跳检测来判断主数据库是否存活。通常使用keepalived或corosync实现心跳检测。以下是使用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在主数据库和从数据库上配置虚拟IP(VIP),确保在主数据库故障时,VIP自动切换到从数据库。
在主数据库上配置VIP:
# 配置VIPvim /etc/sysconfig/network-scripts/ifcfg-eth0添加以下内容:
IPADDR=192.168.1.100NETMASK=255.255.255.0重启网络服务:
systemctl restart network启动MHA和keepalived服务:
# 启动MHAmasterha_manager start# 启动keepalivedsystemctl start keepalived测试主数据库故障切换:
systemctl stop mysqld为了提高数据库的读写性能,可以在从数据库上配置负载均衡。常用的负载均衡工具包括LVS和Nginx。
在负载均衡服务器上安装并配置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服务器上配置反向代理:
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;}为了提高数据库的性能,可以将读操作和写操作分离。写操作集中在主数据库,读操作分担到从数据库。
在主数据库上配置只允许写操作:
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;为了防止数据丢失,需要定期备份数据库。以下是常用的备份工具和策略:
mysqldump备份mysqldump -u root -p --all-databases > / backups/db_$(date +%Y%m%d).sqlPercona XtraBackup备份innobackupex --user=root --password=your_password / backups/ --no-timestamp为了提高数据库的性能,可以进行以下优化:
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;为了及时发现和解决问题,需要配置数据库监控和告警工具。常用的工具包括Percona Monitoring and Management和Prometheus + Grafana。
安装并配置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监控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的高可用配置有了更深入的了解。希望这些内容能够帮助您在实际应用中取得更好的效果!
申请试用&下载资料