配置高可用(HA)数据库集群是确保业务连续性的关键步骤。以下是几种主流数据库的高可用配置方案:
步骤:
1. 安装MySQL服务器
bash
sudo apt-get install mysql-server # Ubuntu/Debian
sudo yum install mysql-server # CentOS/RHEL
配置主服务器(my.cnf):
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
配置从服务器(my.cnf):
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
read_only = 1
在主服务器创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
在从服务器配置复制:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 位置;
START SLAVE;
安装配置Keepalived:
sudo apt-get install keepalived
sudo yum install keepalived
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
}
}
安装Galera组件:
sudo apt-get install galera-3 mysql-wsrep-5.6
配置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
启动集群:
# 在第一节点
sudo service mysql start --wsrep-new-cluster
# 在其他节点
sudo service mysql start
安装PostgreSQL和repmgr:
sudo apt-get install postgresql-12 repmgr
配置主服务器(postgresql.conf):
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 32
hot_standby = on
配置pg_hba.conf:
host replication repmgr standby_ip/32 trust
host repmgr repmgr standby_ip/32 trust
在备用服务器初始化:
sudo -u postgres repmgr -h master_ip -U repmgr -d repmgr -D /var/lib/postgresql/12/main standby clone
注册备用服务器:
sudo -u postgres repmgr standby register
配置自动故障转移:
sudo -u postgres repmgr daemon start
配置mongod.conf:
replication:
replSetName: "rs0"
启动MongoDB服务:
sudo systemctl start mongod
初始化副本集:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "node1:27017" },
{ _id: 1, host: "node2:27017" },
{ _id: 2, host: "node3:27017", arbiterOnly: true }
]
})
检查副本集状态:
rs.status()
安装HAProxy:
sudo apt-get install haproxy
配置(/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
安装集群组件:
sudo apt-get install pacemaker corosync fence-agents
配置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
}
}
启动服务:
sudo service corosync start
sudo service pacemaker start
配置资源:
sudo crm configure primitive VirtualIP ocf:heartbeat:IPaddr2 params ip="192.168.1.100" nic="eth0" op monitor interval="10s"
安装监控工具:
# Prometheus + Grafana
sudo apt-get install prometheus grafana
# 或Percona监控工具
sudo apt-get install percona-toolkit
定期检查集群状态:
# MySQL
SHOW SLAVE STATUS\G
# PostgreSQL
SELECT * FROM pg_stat_replication;
# MongoDB
rs.status()
设置自动告警:
以上方案可根据实际业务需求、预算和技术栈进行选择和组合。生产环境部署前应在测试环境充分验证。