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

如何在Linux上配置高可用数据库集群

配置 MySQL sudo bash 85    来源:    2025-04-15

Linux上配置高可用数据库集群指南

配置高可用(HA)数据库集群是确保业务连续性的关键步骤。以下是几种主流数据库的高可用配置方案:

一、MySQL高可用方案

1. MySQL主从复制 + Keepalived

步骤: 1. 安装MySQL服务器 bash sudo apt-get install mysql-server # Ubuntu/Debian sudo yum install mysql-server # CentOS/RHEL

  1. 配置主服务器(my.cnf):

    [mysqld]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_format = ROW
    
  2. 配置从服务器(my.cnf):

    [mysqld]
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    read_only = 1
    
  3. 在主服务器创建复制用户:

    CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    
  4. 在从服务器配置复制:

    CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=  位置;
    START SLAVE;
    
  5. 安装配置Keepalived:

    sudo apt-get install keepalived
    sudo yum install keepalived
    
  6. Keepalived配置(/etc/keepalived/keepalived.conf):

    vrrp_script chk_mysql {
     script "/usr/bin/killall -0 mysqld"
     interval 2
    }
    
    vrrp_instance VI_1 {
     interface eth0
     state MASTER
     virtual_router_id 51
     priority 101
     virtual_ipaddress {
       192.168.1.100
     }
     track_script {
       chk_mysql
     }
    }
    

2. 使用Galera Cluster

  1. 安装Galera组件:

    sudo apt-get install galera-3 mysql-wsrep-5.6
    
  2. 配置my.cnf:

    [mysqld]
    wsrep_provider=/usr/lib/galera/libgalera_smm.so
    wsrep_cluster_name="my_galera_cluster"
    wsrep_cluster_address="gcomm://node1_ip,node2_ip,node3_ip"
    wsrep_node_name="node1"
    wsrep_node_address="node1_ip"
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    
  3. 启动集群:

    # 在第一节点
    sudo service mysql start --wsrep-new-cluster
    
    # 在其他节点
    sudo service mysql start
    

二、PostgreSQL高可用方案

1. PostgreSQL流复制 + repmgr

  1. 安装PostgreSQL和repmgr:

    sudo apt-get install postgresql-12 repmgr
    
  2. 配置主服务器(postgresql.conf):

    wal_level = replica
    max_wal_senders = 10
    wal_keep_segments = 32
    hot_standby = on
    
  3. 配置pg_hba.conf:

    host    replication    repmgr      standby_ip/32    trust
    host    repmgr         repmgr      standby_ip/32    trust
    
  4. 在备用服务器初始化:

    sudo -u postgres repmgr -h master_ip -U repmgr -d repmgr -D /var/lib/postgresql/12/main standby clone
    
  5. 注册备用服务器:

    sudo -u postgres repmgr standby register
    
  6. 配置自动故障转移:

    sudo -u postgres repmgr daemon start
    

三、MongoDB高可用方案

1. MongoDB副本集

  1. 配置mongod.conf:

    replication:
     replSetName: "rs0"
    
  2. 启动MongoDB服务:

    sudo systemctl start mongod
    
  3. 初始化副本集:

    rs.initiate({
     _id: "rs0",
     members: [
       { _id: 0, host: "node1:27017" },
       { _id: 1, host: "node2:27017" },
       { _id: 2, host: "node3:27017", arbiterOnly: true }
     ]
    })
    
  4. 检查副本集状态:

    rs.status()
    

四、通用高可用工具

1. 使用HAProxy进行负载均衡

  1. 安装HAProxy:

    sudo apt-get install haproxy
    
  2. 配置(/etc/haproxy/haproxy.cfg):

    frontend mysql_front
     bind *:3306
     mode tcp
     default_backend mysql_back
    
    backend mysql_back
     mode tcp
     balance roundrobin
     server mysql1 node1_ip:3306 check
     server mysql2 node2_ip:3306 check backup
    

2. 使用Corosync+Pacemaker

  1. 安装集群组件:

    sudo apt-get install pacemaker corosync fence-agents
    
  2. 配置Corosync(/etc/corosync/corosync.conf):

    totem {
     version: 2
     cluster_name: my_cluster
     transport: udpu
    }
    
    nodelist {
     node {
       ring0_addr: node1_ip
     }
     node {
       ring0_addr: node2_ip
     }
    }
    
  3. 启动服务:

    sudo service corosync start
    sudo service pacemaker start
    
  4. 配置资源:

    sudo crm configure primitive VirtualIP ocf:heartbeat:IPaddr2 params ip="192.168.1.100" nic="eth0" op monitor interval="10s"
    

五、监控和维护

  1. 安装监控工具:

    # Prometheus + Grafana
    sudo apt-get install prometheus grafana
    
    # 或Percona监控工具
    sudo apt-get install percona-toolkit
    
  2. 定期检查集群状态:

    # MySQL
    SHOW SLAVE STATUS\G
    
    # PostgreSQL
    SELECT * FROM pg_stat_replication;
    
    # MongoDB
    rs.status()
    
  3. 设置自动告警:

    • 配置Prometheus Alertmanager
    • 使用Grafana告警功能
    • 设置邮件/Slack通知

注意事项

  1. 确保网络延迟低(<1ms)且稳定
  2. 使用SSD存储提高IO性能
  3. 定期测试故障转移过程
  4. 监控关键指标:延迟、复制状态、资源使用率
  5. 做好备份策略,高可用不等于备份

以上方案可根据实际业务需求、预算和技术栈进行选择和组合。生产环境部署前应在测试环境充分验证。