需要 MySQL 自动故障切换、读写分离和多数派确认。常见方案是 MySQL InnoDB Cluster(Group Replication + MySQL Router),适合三节点或五节点的小型高可用集群。
server_id 和 GTID:cat > /etc/mysql/conf.d/gr.cnf <<'EOF'
[mysqld]
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=mysql-bin
relay_log=mysql-relay-bin
binlog_row_image=FULL
EOF
三台节点的 server_id 分别设为 1、2、3,然后重启 MySQL。
mysql -uroot -p <<'SQL'
CREATE USER 'repl'@'%' IDENTIFIED BY '***';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
CREATE USER 'clusteradmin'@'%' IDENTIFIED BY '***';
GRANT ALL PRIVILEGES ON *.* TO 'clusteradmin'@'%' WITH GRANT OPTION;
SQL
mysqlsh --uri root@node1:3306
dba.checkInstanceConfiguration('root@node1:3306')
dba.configureInstance('root@node1:3306')
dba.configureInstance('root@node2:3306')
dba.configureInstance('root@node3:3306')
var cluster = dba.createCluster('prod')
cluster.addInstance('root@node2:3306')
cluster.addInstance('root@node3:3306')
cluster.status()
mysqlrouter --bootstrap clusteradmin@node1:3306 \
--directory /etc/mysqlrouter --user=mysqlrouter
systemctl enable --now mysqlrouter
应用通过 Router 的读写端口(默认 6446)和只读端口(6447)连接。
配置备份和监控。备份使用 mysqlsh 的 dump 或 XtraBackup,监控关注 group_replication 成员状态和延迟。
cluster.status() 显示三个成员均为 ONLINE。group_replication 相关变量后重新加入。server_id 重复,复制直接失败。mysqlsh — InnoDB Cluster 管理mysqlrouter — 读写分离和故障切换mysql — 复制与状态查询mysqlbackup / xtrabackup — 备份mysqladmin — 状态检查