根据您的需求,以下是几种主流的高可用数据库集群方案:
MySQL高可用方案
PostgreSQL高可用方案
NoSQL高可用方案
在所有节点上执行:
# Ubuntu/Debian
sudo apt update
sudo apt install mysql-server mysql-shell -y
# CentOS/RHEL
sudo yum install mysql-server mysql-shell -y
编辑/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"
在主节点(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')
在其中一台服务器上安装并配置MySQL Router:
sudo apt install mysql-router -y
sudo mysqlrouter --bootstrap root@node1:3306 --directory /opt/mysqlrouter --user=mysqlrouter
sudo systemctl start mysqlrouter
故障转移测试:
数据一致性检查:
mysql -e "SHOW DATABASES;"
mysql -e "SELECT * FROM performance_schema.replication_group_members;"
监控工具:
日常维护命令:
# 查看集群状态
mysqlsh -e "dba.getCluster().status()"
# 重新加入故障节点
mysqlsh -e "dba.getCluster().rejoinInstance('user@failed-node:3306')"
方案 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
MySQL Group Replication | 原生支持,自动故障转移 | 对网络延迟敏感 | 中小规模应用 |
Galera Cluster | 同步复制,强一致性 | 写性能受影响 | 需要强一致性的场景 |
主从+HAProxy | 简单易实现 | 需要额外工具监控 | 读多写少场景 |
PostgreSQL+Patroni | 开源,灵活配置 | 配置较复杂 | PostgreSQL环境 |
根据您的具体需求(读写比例、一致性要求、预算等)选择最适合的方案。