温馨提示×

怎样实现Linux MySQL负载均衡

小樊
42
2025-08-25 07:29:30
栏目: 云计算

以下是在Linux上实现MySQL负载均衡的常见方法及步骤:

一、基于主从复制的负载均衡

通过主从复制将读操作分发到从服务器,减轻主库压力。

  1. 主库配置

    • 修改/etc/my.cnf:设置server-id=1,启用二进制日志log-bin=mysql-bin,指定复制数据库binlog-do-db=your_db
    • 创建复制用户:CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    • 重启MySQL:systemctl restart mysql,并记录SHOW MASTER STATUS中的FilePosition
  2. 从库配置

    • 修改/etc/my.cnf:设置server-id=2,启用中继日志relay-log=mysql-relay-binread_only=1
    • 配置主库连接:CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='记录的File', MASTER_LOG_POS=记录的Position;
    • 启动复制:START SLAVE;,通过SHOW SLAVE STATUS检查状态。

二、使用中间件实现负载均衡

1. MySQL Router(官方推荐)

  • 安装sudo apt-get install mysql-router
  • 配置:编辑/etc/mysql-router.cnf,指定主从服务器地址及模式(读写分离或负载均衡)。
    [routing]
    default-backend=readwrite://主库IP:3306,slave1:3306,slave2:3306
    
  • 启动sudo systemctl start mysql-router

2. HAProxy(高性能负载均衡)

  • 安装sudo apt-get install haproxy
  • 配置:编辑/etc/haproxy/haproxy.cfg,设置负载均衡模式(如roundrobin轮询)。
    frontend mysql_front
      bind *:3306
      default_backend mysql_back
    backend mysql_back
      balance roundrobin
      server mysql1 主库IP:3306 check
      server mysql2 从库IP:3306 check
    
  • 启动sudo systemctl start haproxy

3. ProxySQL(功能强大)

  • 安装:下载并编译安装,或通过包管理器(如Ubuntu)安装。
  • 配置:编辑/etc/proxysql.cnf,定义读写规则和服务器组。
    [mysql_query_rules]
    rule1= {match_pattern="^SELECT", destination_hostgroup=2}  # 读请求转发到从库组
    [mysql_hostgroups]
    hostgroup1= {servers=主库IP:3306, mode=readwrite}  # 主库组
    hostgroup2= {servers=从库IP:3306, mode=readonly}    # 从库组
    
  • 启动sudo systemctl start proxysql

三、高可用方案(可选)

  • MySQL Cluster:适用于分布式高可用场景,需配置NDB存储引擎,适合大规模集群。
  • Keepalived + LVS:通过虚拟IP实现故障转移,结合LVS实现负载均衡[参考文档:Linux高可用方案]。

注意事项

  • 主从复制需确保网络通畅,监控复制延迟(Seconds_Behind_Master)。
  • 中间件需根据业务需求选择:ProxySQL支持细粒度规则,HAProxy适合高并发场景。
  • 生产环境建议搭配监控工具(如Prometheus+Grafana)实时监控数据库状态。

参考来源:

0