CentOS 7下MariaDB Galera集群配置失败求助
看起来你遇到的核心问题有两个:一是修改server.cnf后配置完全不生效,二是Galera集群始终无法正常初始化。结合你给出的wsrep%状态输出(尤其是wsrep_provider_name为空、wsrep_cluster_size=0),咱们一步步排查解决:
1. 先确认MariaDB实际加载的配置文件路径
你修改server.cnf但完全没效果,大概率是这个配置文件没被MariaDB读取到。执行以下命令查看MariaDB的配置加载顺序:
mysqld --help --verbose | grep -A 10 "Default options"
输出会类似这样:
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
同时要检查/etc/my.cnf里是否有!includedir /etc/my.cnf.d/这句话——如果没有,MariaDB不会加载/etc/my.cnf.d/下的任何配置文件,这就解释了为什么你修改server.cnf甚至写无效内容都不影响启动。
解决办法:
- 如果
/etc/my.cnf里没有!includedir /etc/my.cnf.d/,添加这句话并保存; - 或者直接把Galera相关配置写到
/etc/my.cnf里(优先级更高)。
2. 确认Galera Provider组件已安装
从wsrep_provider_name为空可以看出,MariaDB根本没加载Galera的核心插件。CentOS 7下需要安装mariadb-galera-server包,而不是普通的mariadb-server:
yum install mariadb-galera-server galera
安装完成后,确认Galera插件的路径是否正确(默认是/usr/lib64/galera/libgalera_smm.so),可以用find / -name libgalera_smm.so验证。
3. 修正server.cnf的Galera核心配置
确保你的server.cnf(或/etc/my.cnf)里有以下关键配置(根据你的节点IP修改):
[mysqld] # 基础MySQL配置 binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera集群配置 wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name="my_galera_cluster" wsrep_cluster_address="gcomm://" # 第一个节点初始化时用这个,其他节点填第一个节点IP,比如gcomm://192.168.1.10 wsrep_node_name="node1" wsrep_node_address="192.168.1.10" # 替换成当前节点的公网/内网IP
注意:配置文件里不能有语法错误,比如缺失引号、路径错误等——不过你说写无效内容还能启动,还是回到第一步的配置加载问题。
4. 检查配置文件权限
确保server.cnf的权限让MariaDB进程能读取:
chmod 644 /etc/my.cnf.d/server.cnf chown root:root /etc/my.cnf.d/server.cnf
5. 重新初始化集群
先彻底停止所有节点的MariaDB服务:
systemctl stop mariadb
然后在第一个节点执行初始化命令:
galera_new_cluster
等待几秒后,检查MariaDB状态:
systemctl status mariadb
再执行你之前的状态查询:
show global status like 'wsrep%';
如果看到wsrep_cluster_size=1、wsrep_connected=ON、wsrep_ready=ON,说明第一个节点启动成功了。之后其他节点直接启动MariaDB服务即可自动加入集群:
systemctl start mariadb
6. 查看日志排查隐藏问题
如果还是失败,一定要查看MariaDB的启动日志找线索:
journalctl -u mariadb.service # 或者查看日志文件 cat /var/log/mariadb/mariadb.log
日志里会明确告诉你是配置文件没加载、插件找不到还是其他权限/网络问题。
内容的提问来源于stack exchange,提问作者Debashis Mallick

