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

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

MySQL 节点 Replication 配置 288    来源:    2025-04-16

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

一、方案选择

根据您的需求,以下是几种主流的高可用数据库集群方案:

  1. MySQL高可用方案

    • MySQL Group Replication
    • MySQL InnoDB Cluster (MySQL Shell + MySQL Router)
    • Galera Cluster (如Percona XtraDB Cluster)
    • 主从复制+Keepalived/HAProxy
  2. PostgreSQL高可用方案

    • PostgreSQL流复制+Patroni
    • PostgreSQL + repmgr
    • PostgreSQL + Pgpool-II
  3. NoSQL高可用方案

    • MongoDB副本集
    • Redis Sentinel/Redis Cluster

二、以MySQL InnoDB Cluster为例的详细配置

前提条件

  • 3台或更多Linux服务器(CentOS/Ubuntu等)
  • MySQL 8.0+版本
  • 服务器间网络互通
  • 配置好主机名解析(/etc/hosts或DNS)

1. 安装MySQL Server

在所有节点上执行:

# Ubuntu/Debian
sudo apt update
sudo apt install mysql-server mysql-shell -y

# CentOS/RHEL
sudo yum install mysql-server mysql-shell -y

2. 配置MySQL

编辑/etc/mysql/my.cnf(或/etc/my.cnf):

[mysqld]
# 通用配置
server_id=1  # 每个节点设置不同的ID
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
log-error=/var/log/mysql/error.log
pid-file=/var/run/mysqld/mysqld.pid

# 组复制配置
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"  # 使用uuidgen生成
group_replication_start_on_boot=OFF
group_replication_local_address= "node1:33061"  # 每个节点改为自己的地址
group_replication_group_seeds= "node1:33061,node2:33061,node3:33061"
group_replication_bootstrap_group=OFF
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

3. 初始化集群

在主节点(node1)上执行:

sudo mysql -u root -p

# MySQL Shell中
mysql-js> dba.configureInstance('root@node1:3306')
mysql-js> var cluster = dba.createCluster('myCluster')
mysql-js> cluster.addInstance('root@node2:3306')
mysql-js> cluster.addInstance('root@node3:3306')

4. 配置MySQL Router

在其中一台服务器上安装并配置MySQL Router:

sudo apt install mysql-router -y

sudo mysqlrouter --bootstrap root@node1:3306 --directory /opt/mysqlrouter --user=mysqlrouter
sudo systemctl start mysqlrouter

三、高可用验证

  1. 故障转移测试:

    • 停止主节点MySQL服务
    • 观察其他节点自动选举新主节点
    • 应用连接应自动重定向到新主节点
  2. 数据一致性检查:

    mysql -e "SHOW DATABASES;"
    mysql -e "SELECT * FROM performance_schema.replication_group_members;"
    

四、监控与维护

  1. 监控工具:

    • Prometheus + MySQL Exporter
    • Percona Monitoring and Management (PMM)
    • MySQL Enterprise Monitor
  2. 日常维护命令:

    # 查看集群状态
    mysqlsh -e "dba.getCluster().status()"
    
    # 重新加入故障节点
    mysqlsh -e "dba.getCluster().rejoinInstance('user@failed-node:3306')"
    

五、安全建议

  1. 配置防火墙规则,只允许集群节点间通信
  2. 为复制和监控创建专用用户
  3. 定期备份集群数据
  4. 启用SSL加密节点间通信

六、替代方案比较

方案 优点 缺点 适用场景
MySQL Group Replication 原生支持,自动故障转移 对网络延迟敏感 中小规模应用
Galera Cluster 同步复制,强一致性 写性能受影响 需要强一致性的场景
主从+HAProxy 简单易实现 需要额外工具监控 读多写少场景
PostgreSQL+Patroni 开源,灵活配置 配置较复杂 PostgreSQL环境

根据您的具体需求(读写比例、一致性要求、预算等)选择最适合的方案。