openEuler 24.03 MariaDB Galera 集群部署指南(cz)

openEuler 24.03 MariaDB Galera 集群部署指南

文档说明

本文档适用于 openEuler 24.03 系统,包含 3 节点初始集群部署、新增节点 4(192.168.100.163)集群扩容完整流程。全程 root 操作,所有命令均添加详细注释和解释,步骤可直接复制,适配零基础小白,最终形成 4 节点高可用集群。

一、部署前提(必须满足)

1.1 初始集群部署前提

  1. 3 台服务器安装 openEuler 24.03 最小化系统,root 登录(root 是系统最高权限账号,部署需权限);

  2. 节点内网互通、可互相 ping 通(集群节点间要通信,ping 通是基础);

  3. 服务器可访问公网(用于下载安装依赖包);

  4. 无旧版 MySQL/MariaDB 组件(避免和新集群冲突,文档含清理步骤)。

1.2 新增节点 4 部署前提

  1. 节点 4 为全新 openEuler 24.03 系统,root 登录;

  2. 与现有 3 节点内网互通,网络无限制;

  3. 现有 3 节点 Galera 集群运行正常;

  4. 无旧版数据库组件。

二、环境规划

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

小白操作提示

  1. 输入 vim /etc/hosts 后,按 i 进入编辑模式;

  2. 粘贴上述内容后,按 Esc 退出编辑模式;

  3. 输入 :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. 在节点 1 执行上述命令,创建 test_cluster 数据库;

  2. 在节点 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';"

预期结果

  1. wsrep_cluster_size 的值为 4;

  2. 额外验证输出中包含 test_cluster,表示数据同步正常。


五、注意事项

  1. 集群启动顺序:必须先启动节点 1(引导节点),再启动其他节点;若节点 1 宕机,重启后需先启动节点 1,再启动其他节点。

  2. server-id 唯一 :所有节点的 server-id 不能重复(101/102/103/104),重复会导致集群启动失败。

  3. 网络要求:节点间必须放行 4 个端口(3306:数据库端口;4567:Galera 集群通信端口;4568:集群同步端口;4444:SST 数据传输端口),关闭防火墙是最简便的方式(生产环境可精准放行端口)。

  4. 时间同步 :所有节点必须开启 chronyd 服务,时间差超过 5 秒会导致集群异常。

  5. 配置文件错误 :若启动数据库失败,大概率是 mariadb-server.cnf 配置文件写错(比如 IP、参数拼写、空格问题),重新检查配置文件。

  6. 生产环境建议:本文档是无密码版,生产环境需配置数据库密码、SST 认证密码,禁止无密码登录,避免安全风险。

  7. 扩容规则 :新增节点的 wsrep_cluster_address 必须包含所有集群节点 IP(包括自己),否则无法加入集群。


六、文档总结

  1. 本文档完成了 openEuler 24.03 + MariaDB Galera 4 节点集群 完整部署,所有命令均加详细注释,小白可按步骤操作;

  2. 节点 4 固定 IP 为 192.168.100.163,扩容过程无侵入(不影响现有集群运行),数据自动同步;

  3. 集群为多主架构:所有节点均可读写数据,某个节点故障后,其他节点自动接管,无服务中断;

  4. 适配场景:中小规模核心业务,满足高可用(不宕机)、强一致性(数据不丢失、同步准确)需求。


七、MySQL/MariaDB 高可用方案对比总表(小白简化版)

对比维度 主从复制 MySQL 组复制(MGR) MariaDB Galera Cluster
架构模式 一主多从(一个节点写,多个节点读) 单主 / 多主 多主(所有节点都能读写)
数据一致性 可能丢数据(异步复制) 不丢数据 实时一致(写一个节点,所有节点立刻同步)
故障切换 手动切换(需手动操作) 自动切换 自动切换(故障节点自动剔除)
部署难度 简单(小白可操作) 复杂(配置要求高) 中等(按本文档步骤可操作)
适用场景 读多写少(比如博客、新闻网站) 金融 / 核心交易(要求绝对不丢数据) 国产系统 + 多主读写(比如企业业务系统)

使用说明

  • 文档中所有代码块内容可直接复制到对应节点的命令行执行;

  • 部署前请确认服务器网络、系统版本符合前提要求;

  • 若执行命令报错,可复制错误信息搜索解决方案,或检查步骤是否遗漏。

相关推荐
科技小花3 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56614 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
johnny2334 小时前
运维管理面板:AcePanel、OpenOcta、DeepSentry
运维
青梅橘子皮5 小时前
Linux---基本指令
linux·运维·服务器
REDcker5 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
虹科网络安全6 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717216 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
绘梨衣5476 小时前
Docker+FastAPI+MySQL 项目部署报错汇总
mysql·docker·fastapi
小江的记录本6 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
cui_ruicheng6 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器