openEuler 24.03 MariaDB Galera 集群部署指南
文档说明
本文档适用于 openEuler 24.03 系统,包含 3 节点初始集群部署、新增节点 4(192.168.100.163)集群扩容完整流程。全程 root 操作,所有命令均添加详细注释和解释,步骤可直接复制,适配零基础小白,最终形成 4 节点高可用集群。
一、部署前提(必须满足)
1.1 初始集群部署前提
-
3 台服务器安装 openEuler 24.03 最小化系统,root 登录(root 是系统最高权限账号,部署需权限);
-
节点内网互通、可互相 ping 通(集群节点间要通信,ping 通是基础);
-
服务器可访问公网(用于下载安装依赖包);
-
无旧版 MySQL/MariaDB 组件(避免和新集群冲突,文档含清理步骤)。
1.2 新增节点 4 部署前提
-
节点 4 为全新 openEuler 24.03 系统,root 登录;
-
与现有 3 节点内网互通,网络无限制;
-
现有 3 节点 Galera 集群运行正常;
-
无旧版数据库组件。
二、环境规划
2.1 初始集群节点
| 节点 | 主机名 | 固定 IP | 集群角色 | 说明 |
|---|---|---|---|---|
| 节点 1 | node1 | 192.168.100.180 | 集群引导节点 | 第一个启动的节点,负责初始化集群 |
| 节点 2 | node2 | 192.168.100.181 | 集群成员节点 | 加入已有集群的普通节点 |
| 节点 3 | node3 | 192.168.100.182 | 集群成员节点 | 加入已有集群的普通节点 |
2.2 扩容节点(固定 IP)
| 节点 | 主机名 | 固定 IP | 集群角色 | 说明 |
|---|---|---|---|---|
| 节点 4 | node4 | 192.168.100.163 | 集群成员节点 | 扩容新增的节点,加入现有 3 节点集群 |
三、初始 3 节点 Galera 集群部署
3.1 所有节点执行:系统初始化
3.1.1 设置主机名
#节点1执行:设置主机名为node1(集群通过主机名识别节点),&& bash 让设置立即生效(无需重启服务器)
hostnamectl set-hostname node1 && bash
#节点2执行:同理,设置主机名为node2
hostnamectl set-hostname node2 && bash
#节点3执行:同理,设置主机名为node3
hostnamectl set-hostname node3 && bash
小白解释:主机名是服务器的 "名字",集群需要通过名字识别不同节点,必须唯一且固定。
3.1.2 配置 hosts 文件
#编辑系统域名解析文件(相当于本地"小DNS",让节点间通过主机名直接访问,不用记IP)
vim /etc/hosts
写入以下内容(按行解释):
#本地回环地址(系统默认,不用改)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#IPv6 本地回环地址(系统默认,不用改)
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#节点1的IP和主机名映射(输入node1就等于访问192.168.100.180)
192.168.100.180 node1
#节2的IP和主机名映射
192.168.100.181 node2
#节点3的IP和主机名映射
192.168.100.182 node3
小白操作提示:
-
输入
vim /etc/hosts后,按i进入编辑模式; -
粘贴上述内容后,按
Esc退出编辑模式; -
输入
:wq(冒号 + wq)保存并退出。
3.1.3 系统基础配置(所有节点执行)
#关闭防火墙(集群节点间需要通信,防火墙会拦截端口,部署阶段先关闭)
systemctl stop firewalld && \\
#禁止防火墙开机自启(避免重启服务器后防火墙自动开启)
systemctl disable firewalld
#临时关闭SELinux(安全增强模块,会限制数据库权限,临时关闭立即生效)
setenforce 0 && \\
#永久关闭SELinux(修改配置文件,重启服务器后仍生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#安装时间同步工具chrony(集群所有节点时间必须一致,否则数据同步会出错)
dnf install -y chrony && \\
#启动chrony并设置开机自启(确保服务器重启后仍能自动同步时间)
systemctl enable --now chronyd
#卸载旧版MySQL/MariaDB(避免和新安装的Galera版本冲突,\*是通配符,匹配所有相关包)
dnf remove -y mysql\* mariadb\*
#安装Galera集群必需依赖包:
#mariadb-server-galera:Galera集群核心包(包含MariaDB服务器和Galera插件)
#rsync:集群数据同步工具(节点加入时同步现有数据)
#mariadb-server-utils:MariaDB辅助工具(提供数据库管理命令)
dnf install -y mariadb-server-galera rsync mariadb-server-utils
小白解释:
-
&&表示前一个命令执行成功后,再执行后一个命令; -
dnf是 openEuler 系统的包管理器,类似 "应用商店",用于安装 / 卸载软件; -
执行完后无报错,说明基础配置完成。
3.2 所有节点执行:数据库初始化
#启动MariaDB服务(首次启动会完成数据库基础初始化)
systemctl start mariadb && \\
#设置MariaDB开机自启(服务器重启后自动启动数据库,无需手动操作)
systemctl enable mariadb
#无密码登录验证(本文档是无密码版,直接输入mysql即可登录,验证服务是否正常)
mysql
#退出数据库命令行(验证成功后退出,后续配置用)
exit
小白验证方法:
-
输入
mysql后,如果出现MariaDB [(none)]>提示符,说明登录成功; -
输入
exit后回到系统命令行,数据库初始化完成。
3.3 分节点配置集群参数
3.3.1 节点 1 配置(集群引导节点)
#编辑MariaDB集群核心配置文件(Galera集群的关键参数都在这里设置)
vim /etc/my.cnf.d/mariadb-server.cnf
写入以下配置(每行加详细注释):
[mysqld]
#二进制日志格式为ROW(Galera集群要求,基于行复制,保证数据同步准确,避免歧义)
binlog\_format=ROW
#默认存储引擎为InnoDB(支持事务和行级锁,Galera集群必需,确保数据一致性)
default-storage-engine=InnoDB
#自增锁模式为2(宽松模式,避免多主架构下多个节点同时插入数据时自增ID冲突)
innodb\_autoinc\_lock\_mode=2
#绑定所有IP(允许任意地址访问数据库,集群节点间需要互相通信)
bind-address=0.0.0.0
#服务器ID(集群内唯一,用于区分不同节点,节点1设为101,后续节点依次递增)
server-id=101
#开启Galera集群功能(核心开关,开启后数据库进入集群模式)
wsrep\_on=ON
#Galera提供器路径(指定Galera插件位置,安装后默认路径,无需修改)
wsrep\_provider=/usr/lib64/galera/libgalera\_smm.so
#集群名称(所有节点必须一致,标识属于同一个集群,自定义名称也可,需统一)
wsrep\_cluster\_name="galera\_cluster"
#集群地址:节点1是引导节点,初始为空(gcomm:// 表示启动新集群,等待其他节点加入)
wsrep\_cluster\_address="gcomm://"
#节点名称(和主机名一致,方便识别当前节点)
wsrep\_node\_name="node1"
#节点IP(当前节点的内网IP,集群内节点通信使用)
wsrep\_node\_address="192.168.100.180"
#数据同步方式(rsync是高效的文件同步工具,节点加入时快速同步全量数据)
wsrep\_sst\_method=rsync
3.3.2 节点 2 配置(集群成员节点)
#编辑MariaDB集群核心配置文件
vim /etc/my.cnf.d/mariadb-server.cnf
写入以下配置(重点注释差异部分):
[mysqld]
binlog\_format=ROW
default-storage-engine=InnoDB
innodb\_autoinc\_lock\_mode=2
bind-address=0.0.0.0
server-id=102 # 节点2唯一ID,不能和节点1重复
wsrep\_on=ON
wsrep\_provider=/usr/lib64/galera/libgalera\_smm.so
#集群地址:包含所有节点IP(节点1/2/3),表示加入这个已存在的集群
wsrep\_cluster\_address="gcomm://192.168.100.180,192.168.100.181,192.168.100.182"
wsrep\_node\_name="node2" # 节点2名称,和主机名一致
wsrep\_node\_address="192.168.100.181" # 节点2的内网IP
wsrep\_sst\_method=rsync
3.3.3 节点 3 配置(集群成员节点)
#编辑MariaDB集群核心配置文件
vim /etc/my.cnf.d/mariadb-server.cnf
写入以下配置:
[mysqld]
binlog\_format=ROW
default-storage-engine=InnoDB
innodb\_autoinc\_lock\_mode=2
bind-address=0.0.0.0
server-id=103 # 节点3唯一ID,不能和其他节点重复
wsrep\_on=ON
wsrep\_provider=/usr/lib64/galera/libgalera\_smm.so
wsrep\_cluster\_name="galera\_cluster"
wsrep\_cluster\_address="gcomm://192.168.100.180,192.168.100.181,192.168.100.182"
wsrep\_node\_name="node3"
wsrep\_node\_address="192.168.100.182"
wsrep\_sst\_method=rsync
小白注意:配置文件中所有参数的等号(=)前后不能有空格,否则会报错。
3.4 启动集群(严格顺序!)
#仅节点1执行(引导集群,核心步骤)
#重启MariaDB(加载刚才配置的集群参数)
systemctl restart mariadb && \\
#初始化Galera集群(只有引导节点需要执行,创建新集群)
galera\_new\_cluster && \\
#查看MariaDB状态(验证是否启动成功,出现active (running)表示正常)
systemctl status mariadb
#节点2执行(必须等节点1启动成功后再执行)
#启动MariaDB(自动加入节点1创建的集群)
systemctl start mariadb && \\
#查看状态(验证是否加入成功)
systemctl status mariadb
#节点3执行(可在节点2启动后执行)
#启动MariaDB(自动加入集群)
systemctl start mariadb && \\
#查看状态(验证是否加入成功)
systemctl status mariadb
小白解释:
-
启动顺序不能乱:节点 1 → 节点 2 → 节点 3;
-
执行
systemctl status mariadb后,若出现绿色的 "active (running)",说明启动成功; -
若出现红色 "failed",检查配置文件是否写错(比如 IP、参数拼写)。
3.5 初始集群验证(确认集群正常工作)
#无密码登录MariaDB(节点1执行)
mysql
#查看集群节点数量(正常结果为3,表示3个节点已加入集群)
SHOW STATUS LIKE 'wsrep\_cluster\_size';
#创建测试数据库(用于验证数据同步)
CREATE DATABASE test\_cluster;
#退出数据库命令行
exit
小白验证步骤:
-
在节点 1 执行上述命令,创建
test_cluster数据库; -
在节点 2 和节点 3 分别执行以下命令,查看是否同步:
#不登录数据库,直接查询所有数据库(若能看到test_cluster,说明同步成功)
mysql -e "SHOW DATABASES;"
预期结果 :节点 2 和节点 3 的输出中包含 test_cluster,表示集群数据同步正常。
四、新增节点 4 加入集群(独立章节)
4.1 节点 4 执行:系统初始化
4.1.1 设置主机名
#设置节点4的主机名为node4,&& bash 让设置立即生效
hostnamectl set-hostname node4 && bash
4.1.2 配置 hosts 文件
#编辑hosts文件,添加所有4个节点的映射(包括节点4自己)
vim /etc/hosts
写入以下内容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.180 node1 # 原有节点1
192.168.100.181 node2 # 原有节点2
192.168.100.182 node3 # 原有节点3
192.168.100.163 node4 # 新增节点4(自己的IP和主机名)
4.1.3 系统基础配置
#关闭防火墙并禁止开机自启
systemctl stop firewalld && systemctl disable firewalld && \\
#临时+永久关闭SELinux
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config && \\
#安装时间同步工具并启动
dnf install -y chrony && systemctl enable --now chronyd && \\
#卸载旧版数据库
dnf remove -y mysql\* mariadb\* && \\
#安装Galera依赖包(和原有节点一致)
dnf install -y mariadb-server-galera rsync mariadb-server-utils
4.2 节点 4 执行:数据库初始化
#启动MariaDB服务(基础初始化)
systemctl start mariadb && \\
#无密码登录验证(能进入数据库提示符表示正常)
mysql && \\
#退出数据库
exit
4.3 节点 4 执行:集群配置
#编辑MariaDB集群核心配置文件
vim /etc/my.cnf.d/mariadb-server.cnf
写入以下配置(每行注释):
[mysqld]
binlog\_format=ROW
default-storage-engine=InnoDB
innodb\_autoinc\_lock\_mode=2
bind-address=0.0.0.0
server-id=104 # 节点4唯一ID,不能和101/102/103重复
wsrep\_on=ON
wsrep\_provider=/usr/lib64/galera/libgalera\_smm.so
wsrep\_cluster\_name="galera\_cluster" # 和原有集群名称一致
#集群地址:包含所有4个节点IP(原有3个+新增节点4),表示加入这个集群
wsrep\_cluster\_address="gcomm://192.168.100.180,192.168.100.181,192.168.100.182,192.168.100.163"
wsrep\_node\_name="node4" # 节点4名称
wsrep\_node\_address="192.168.100.163" # 节点4的IP
wsrep\_sst\_method=rsync # 数据同步方式
4.4 节点 4 加入集群
#启动MariaDB服务(自动连接集群地址,同步现有数据并加入集群)
systemctl start mariadb.service && \\
#查看状态(验证是否启动成功,active (running)为正常)
systemctl status mariadb
小白注意:节点 4 启动时会自动同步原有 3 个节点的数据,同步时间根据数据量而定,耐心等待即可。
4.5 扩容验证
#登录数据库
mysql && \\
#查看集群节点数量(正常结果为4,表示节点4已成功加入)
SHOW STATUS LIKE 'wsrep\_cluster\_size'; && \\
#退出数据库
exit
#额外验证:查询test\_cluster数据库(是否同步节点1创建的数据库)
mysql -e "SHOW DATABASES LIKE 'test\_cluster';"
预期结果:
-
wsrep_cluster_size的值为 4; -
额外验证输出中包含
test_cluster,表示数据同步正常。
五、注意事项
-
集群启动顺序:必须先启动节点 1(引导节点),再启动其他节点;若节点 1 宕机,重启后需先启动节点 1,再启动其他节点。
-
server-id 唯一 :所有节点的
server-id不能重复(101/102/103/104),重复会导致集群启动失败。 -
网络要求:节点间必须放行 4 个端口(3306:数据库端口;4567:Galera 集群通信端口;4568:集群同步端口;4444:SST 数据传输端口),关闭防火墙是最简便的方式(生产环境可精准放行端口)。
-
时间同步 :所有节点必须开启
chronyd服务,时间差超过 5 秒会导致集群异常。 -
配置文件错误 :若启动数据库失败,大概率是
mariadb-server.cnf配置文件写错(比如 IP、参数拼写、空格问题),重新检查配置文件。 -
生产环境建议:本文档是无密码版,生产环境需配置数据库密码、SST 认证密码,禁止无密码登录,避免安全风险。
-
扩容规则 :新增节点的
wsrep_cluster_address必须包含所有集群节点 IP(包括自己),否则无法加入集群。
六、文档总结
-
本文档完成了 openEuler 24.03 + MariaDB Galera 4 节点集群 完整部署,所有命令均加详细注释,小白可按步骤操作;
-
节点 4 固定 IP 为
192.168.100.163,扩容过程无侵入(不影响现有集群运行),数据自动同步; -
集群为多主架构:所有节点均可读写数据,某个节点故障后,其他节点自动接管,无服务中断;
-
适配场景:中小规模核心业务,满足高可用(不宕机)、强一致性(数据不丢失、同步准确)需求。
七、MySQL/MariaDB 高可用方案对比总表(小白简化版)
| 对比维度 | 主从复制 | MySQL 组复制(MGR) | MariaDB Galera Cluster |
|---|---|---|---|
| 架构模式 | 一主多从(一个节点写,多个节点读) | 单主 / 多主 | 多主(所有节点都能读写) |
| 数据一致性 | 可能丢数据(异步复制) | 不丢数据 | 实时一致(写一个节点,所有节点立刻同步) |
| 故障切换 | 手动切换(需手动操作) | 自动切换 | 自动切换(故障节点自动剔除) |
| 部署难度 | 简单(小白可操作) | 复杂(配置要求高) | 中等(按本文档步骤可操作) |
| 适用场景 | 读多写少(比如博客、新闻网站) | 金融 / 核心交易(要求绝对不丢数据) | 国产系统 + 多主读写(比如企业业务系统) |
使用说明
-
文档中所有代码块内容可直接复制到对应节点的命令行执行;
-
部署前请确认服务器网络、系统版本符合前提要求;
-
若执行命令报错,可复制错误信息搜索解决方案,或检查步骤是否遗漏。