插件窝 干货文章 如何在Linux上配置高可用的数据库代理

如何在Linux上配置高可用的数据库代理

配置 HAProxy Keepalived MySQL 507    来源:    2025-04-16

在Linux上配置高可用数据库代理方案

常见高可用数据库代理方案

1. HAProxy + Keepalived

适用场景: MySQL、PostgreSQL等关系型数据库的读写分离和高可用

配置步骤

  1. 安装软件包

    # Ubuntu/Debian
    sudo apt-get install haproxy keepalived
    
    # CentOS/RHEL
    sudo yum install haproxy keepalived
    
  2. 配置HAProxy (haproxy.cfg)

    global
       log /dev/log local0
       maxconn 4000
       user haproxy
       group haproxy
       daemon
    
    defaults
       mode tcp
       timeout connect 5000ms
       timeout client 50000ms
       timeout server 50000ms
    
    frontend mysql_front
       bind *:3306
       default_backend mysql_back
    
    backend mysql_back
       balance roundrobin
       server mysql1 192.168.1.101:3306 check
       server mysql2 192.168.1.102:3306 check backup
    
  3. 配置Keepalived (keepalived.conf)

    vrrp_script chk_haproxy {
       script "killall -0 haproxy"
       interval 2
       weight 2
    }
    
    vrrp_instance VI_1 {
       interface eth0
       state MASTER
       virtual_router_id 51
       priority 101
       virtual_ipaddress {
           192.168.1.100
       }
       track_script {
           chk_haproxy
       }
    }
    
  4. 启动服务

    sudo systemctl start haproxy
    sudo systemctl start keepalived
    sudo systemctl enable haproxy
    sudo systemctl enable keepalived
    

2. ProxySQL + Cluster

适用场景: MySQL高级读写分离和查询缓存

配置步骤

  1. 安装ProxySQL

    # Ubuntu/Debian
    sudo apt-get install proxysql
    
    # CentOS/RHEL
    sudo yum install proxysql
    
  2. 配置ProxySQL

    -- 登录管理界面
    mysql -u admin -padmin -h 127.0.0.1 -P 6032
    
    -- 添加后端服务器
    INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (10,'192.168.1.101',3306);
    INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (10,'192.168.1.102',3306);
    INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (20,'192.168.1.101',3306);
    
    -- 配置监控用户
    INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('monitor','monitorpassword',10);
    
    -- 保存配置
    LOAD MYSQL SERVERS TO RUNTIME;
    SAVE MYSQL SERVERS TO DISK;
    
  3. 配置高可用

    • 使用Keepalived或Corosync+Pacemaker实现VIP漂移
    • 配置多个ProxySQL节点并同步配置

3. PgBouncer + repmgr (PostgreSQL专用)

适用场景: PostgreSQL连接池和高可用

配置步骤

  1. 安装PgBouncer

    # Ubuntu/Debian
    sudo apt-get install pgbouncer
    
    # CentOS/RHEL
    sudo yum install pgbouncer
    
  2. 配置PgBouncer (pgbouncer.ini)

    [databases]
    mydb = host=192.168.1.101 port=5432 dbname=mydb
    
    [pgbouncer]
    listen_addr = *
    listen_port = 6432
    auth_type = md5
    auth_file = /etc/pgbouncer/userlist.txt
    pool_mode = transaction
    
  3. 配置高可用

    • 使用repmgr管理PostgreSQL主从切换
    • 结合Keepalived实现VIP漂移

高可用关键考虑因素

  1. 健康检查机制

    • 实现数据库节点的自动检测和故障转移
    • 配置合理的检查间隔和超时时间
  2. 会话保持

    • 对于有状态的应用,确保同一会话始终路由到同一后端
  3. 监控和告警

    • 监控代理层和数据库层的状态
    • 设置适当的告警阈值
  4. 性能调优

    • 根据负载调整连接池大小
    • 优化查询路由规则
  5. 安全配置

    • 启用SSL/TLS加密
    • 配置适当的访问控制列表

最佳实践建议

  1. 多节点部署

    • 部署至少两个代理节点,避免单点故障
  2. 配置同步

    • 使用配置管理工具(Ansible/Puppet)保持多节点配置一致
  3. 定期测试

    • 定期模拟故障场景,验证高可用机制
  4. 日志集中

    • 集中收集和分析代理层日志
  5. 版本管理

    • 保持代理软件版本更新,修复已知问题

通过以上方案,您可以在Linux环境中构建一个高可用的数据库代理层,提高数据库服务的可用性和性能。