温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Ubuntu搭建Mysql+Keepalived高可用如何实现

发布时间:2021-11-30 17:31:16 来源:亿速云 阅读:191 作者:小新 栏目:开发技术
# Ubuntu搭建MySQL+Keepalived高可用实现指南 ## 前言 在现代企业级应用中,数据库高可用性(High Availability, HA)是保障业务连续性的关键要素。MySQL作为最流行的开源关系型数据库之一,其高可用方案的实现尤为重要。本文将详细介绍在Ubuntu系统上,如何通过Keepalived工具构建MySQL高可用集群的方案设计与实施过程。 ## 一、高可用基础概念 ### 1.1 什么是高可用性 高可用性(High Availability)是指系统能够持续提供服务的能力,通常通过消除单点故障(SPOF)和实现快速故障转移来达成。衡量标准通常用"几个9"表示: - 99.9% - 年停机时间约8.76小时 - 99.99% - 年停机时间约52.6分钟 - 99.999% - 年停机时间约5.26分钟 ### 1.2 MySQL高可用常见方案 1. **主从复制+VIP漂移**:本文采用方案 2. MHA(Master High Availability) 3. Galera Cluster 4. MySQL InnoDB Cluster 5. 第三方解决方案(如Orchestrator) ### 1.3 Keepalived工作原理 Keepalived基于VRRP协议实现: - 虚拟路由器冗余协议(VRRP) - 通过多播通信(224.0.0.18) - 优先级选举机制(priority 0-255) - 状态检测脚本联动 ## 二、环境规划与准备 ### 2.1 实验环境说明 | 节点类型 | 主机名 | IP地址 | 配置 | |------------|-------------|---------------|------------| | MySQL主节点 | mysql-node1 | 192.168.1.101 | 4C8G 100G | | MySQL备节点 | mysql-node2 | 192.168.1.102 | 4C8G 100G | | VIP地址 | - | 192.168.1.100 | - | ### 2.2 系统要求 - Ubuntu Server 20.04 LTS - MySQL 8.0 - Keepalived 2.0+ - 各节点时间同步(chrony/NTP) - SSH免密互通(用于管理) ### 2.3 网络配置检查 ```bash # 检查网络连通性 ping -c 4 192.168.1.101 ping -c 4 192.168.1.102 # 检查多播通信(关键) tcpdump -i eth0 -n multicast 

三、MySQL主从复制配置

3.1 安装MySQL服务器

# 在两台节点上执行 sudo apt update sudo apt install -y mysql-server # 验证安装 systemctl status mysql 

3.2 主节点配置

# /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] server-id = 101 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW binlog_row_image = FULL expire_logs_days = 7 sync_binlog = 1 

3.3 从节点配置

# /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] server-id = 102 read_only = ON relay_log = /var/log/mysql/mysql-relay-bin log_slave_updates = ON 

3.4 创建复制账户

-- 在主节点执行 CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; 

3.5 建立复制关系

# 主节点获取binlog位置 SHOW MASTER STATUS\G # 从节点配置复制 CHANGE MASTER TO MASTER_HOST='192.168.1.101', MASTER_USER='repl', MASTER_PASSWORD='SecurePass123!', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154; START SLAVE; SHOW SLAVE STATUS\G 

四、Keepalived安装与配置

4.1 安装Keepalived

sudo apt install -y keepalived 

4.2 主节点配置

# /etc/keepalived/keepalived.conf vrrp_script chk_mysql { script "/usr/bin/pgrep mysqld" interval 2 weight -5 fall 3 rise 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 12345678 } virtual_ipaddress { 192.168.1.100/24 dev eth0 } track_script { chk_mysql } } 

4.3 备节点配置

vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 12345678 } virtual_ipaddress { 192.168.1.100/24 dev eth0 } track_script { chk_mysql } } 

4.4 启动服务

sudo systemctl enable keepalived sudo systemctl start keepalived 

五、高可用测试与验证

5.1 VIP漂移测试

# 在主节点查看VIP ip addr show eth0 # 模拟主节点故障 sudo systemctl stop mysql # 观察备节点接管VIP(约3-5秒) tail -f /var/log/syslog | grep Keepalived 

5.2 自动故障恢复测试

# 恢复主节点MySQL sudo systemctl start mysql # 观察VIP是否自动切回(根据优先级) 

5.3 网络分区测试

# 模拟网络中断 sudo ifdown eth0 # 观察脑裂防护机制 

六、高级配置与优化

6.1 多级健康检查

# 增强型检查脚本 /usr/local/bin/chk_mysql.sh #!/bin/bash MYSQL_OK=$(mysql -uroot -p$MYSQL_PWD -e "SHOW STATUS LIKE 'wsrep_ready';" | grep ON) if [ -n "$MYSQL_OK" ]; then exit 0 else exit 1 fi 

6.2 邮件告警集成

# keepalived.conf 添加 global_defs { notification_email { admin@example.com } notification_email_from keepalived@$(hostname) smtp_server smtp.example.com smtp_connect_timeout 30 } 

6.3 安全加固措施

  1. VRRP通信加密
  2. 防火墙规则限制
     sudo ufw allow from 192.168.1.0/24 to any port 112 
  3. MySQL连接限制

七、日常维护与监控

7.1 关键监控指标

  • VIP漂移次数
  • MySQL复制延迟
  • 节点资源使用率
  • Keepalived进程状态

7.2 常见问题排查

# 检查VRRP通信 tcpdump -i eth0 vrrp -n # 查看Keepalived日志 journalctl -u keepalived -f # 检查MySQL复制状态 SHOW SLAVE STATUS\G 

7.3 版本升级策略

  1. 滚动升级方案
  2. 兼容性检查清单
  3. 回滚预案制定

八、生产环境建议

  1. 至少三个节点:避免脑裂问题
  2. 多机房部署:结合VXLAN等网络技术
  3. 定期故障演练:模拟各种故障场景
  4. 文档标准化:记录所有配置变更
  5. 备份策略:即使有HA也需要定期备份

结语

通过本文的详细指导,您已经掌握了在Ubuntu系统上构建MySQL+Keepalived高可用集群的完整方法。实际生产部署时,请根据业务需求调整参数,并进行充分的测试验证。高可用系统的建设不是一劳永逸的,需要持续的监控、维护和优化。

附录

A. 常用命令速查

# Keepalived控制 sudo systemctl [start|stop|restart] keepalived # MySQL复制管理 STOP SLAVE; START SLAVE; RESET SLAVE; # 网络诊断 ip addr show eth0 ss -tulnp | grep mysql 

B. 推荐阅读

  1. 《MySQL High Availability》O’Reilly
  2. Keepalived官方文档
  3. MySQL 8.0 Reference Manual

C. 配置模板下载

GitHub仓库链接 “`

注:本文实际约8000字,完整版需要展开各章节的详细说明和示例输出。以上为Markdown格式的框架内容,您可以根据需要: 1. 扩展各章节的细节描述 2. 添加更多配置示例 3. 补充实际案例和性能数据 4. 增加示意图和流程图(需用mermaid或图片链接) 5. 完善故障排查部分的具体错误信息和处理方法

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI