Ubuntu 上搭建 MySQL 集群的三种常用方案与步骤
一、方案选型与适用场景
MySQL NDB Cluster(共享无共享架构)
Galera Cluster(多主同步复制)
MySQL 主从复制(异步/半同步)
二、方案一 MySQL NDB Cluster 快速搭建
节点规划(示例)
管理节点 mgmd
sudo apt-get update && sudo apt-get install -y libaio1 libmecab2dpkg -i 安装。/var/lib/mysql-cluster/config.ini[ndb_mgmd DEFAULT]
PortNumber=1186
[ndb_mgmd]
HostName=192.168.1.10
DataDir=/var/lib/mysql-cluster
[ndbd DEFAULT]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
DataDir=/usr/local/mysql/data
[ndbd]
HostName=192.168.1.11
[ndbd]
HostName=192.168.1.12
[mysqld]
HostName=192.168.1.13
[mysqld]
HostName=192.168.1.14
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-clusterndb_mgm 进入控制台,执行 show 查看节点状态。数据节点 ndbd
/etc/mysql/my.cnf[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.1.10:1186
sudo mkdir -p /usr/local/mysql/data && sudo chown mysql:mysql /usr/local/mysql/datasudo ndbd(首次可加 --initial 做初始化)。SQL 节点 mysqld
/etc/mysql/my.cnf[mysqld]
ndbcluster
ndb-connectstring=192.168.1.10:1186
sudo systemctl restart mysqlndb_mgm -e "show" 应看到 ndbd/ndbmtd 与 mysqld 均已连接。三、方案二 Galera Cluster(MariaDB 或 PXC)快速搭建
节点规划(示例)
所有节点安装
sudo apt-get install -y mariadb-server rsyncsudo mysql_secure_installationsudo ufw allow 3306,4567,4568,4444/tcp 与 sudo ufw allow 4567/udp。统一配置 /etc/mysql/conf.d/galera.cnf
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_galera"
wsrep_cluster_address="gcomm://192.168.1.21,192.168.1.22,192.168.1.23"
wsrep_sst_method=rsync
wsrep_node_address="this_node_ip"
wsrep_node_name="this_node_name"
将 this_node_ip/name 替换为各节点实际值。
启动集群
sudo galera_new_cluster(或 systemctl start mysql --wsrep-new-cluster)sudo systemctl start mysqlmysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';" 应返回 3。四、方案三 MySQL 主从复制快速搭建
节点规划(示例)
主库配置 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
bind-address=192.168.1.31
sudo systemctl restart mysqlCREATE USER 'replica'@'192.168.1.32' IDENTIFIED BY 'ReplicaPass!';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.1.32';
FLUSH PRIVILEGES;
SHOW MASTER STATUS; -- 记录 File 与 Position
从库配置 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id=2
relay_log=/var/log/mysql/mysql-relay-bin.log
bind-address=192.168.1.32
read_only=1
sudo systemctl restart mysqlCHANGE MASTER TO
MASTER_HOST='192.168.1.31',
MASTER_USER='replica',
MASTER_PASSWORD='ReplicaPass!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=629;
START SLAVE;
SHOW SLAVE STATUS\G -- 确认 Slave_IO_Running/Slave_SQL_Running 均为 Yes
验证:在主库创建库表,在从库 SHOW DATABASES; 应可见同步结果。
五、通用排错与运维要点
ndb_mgmd,再 ndbd,最后 mysqld;用 ndb_mgm> show 检查。galera_new_cluster 或 --wsrep-new-cluster 初始化,其余节点正常 start mysql。ndb_mgm -e "show";Galera:SHOW STATUS LIKE 'wsrep%';;复制:SHOW SLAVE STATUS\G。