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 小时前
[24年单独笔记] MySQL 常用的 DML 命令
数据库·笔记·mysql
xcbrand3 小时前
文旅行业品牌策划公司找哪家
大数据·运维·人工智能·python
SPC的存折4 小时前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
蓦然乍醒4 小时前
使用 DBeaver 还原 PostgreSQL 备份文件 (.bak) 技术文档
数据库·postgresql
XDHCOM4 小时前
Redis节点故障自动恢复机制详解,如何快速抢救故障节点,确保数据不丢失?
java·数据库·redis
风吹迎面入袖凉4 小时前
【Redis】Redisson分布式锁原理
java·服务器·开发语言
QCzblack4 小时前
BugKu BUUCTF ——Reverse
java·前端·数据库
cyber_两只龙宝4 小时前
【Oracle】Oracle之DQL中WHERE限制条件查询
linux·运维·数据库·云原生·oracle
luis的妙妙屋4 小时前
主流数据库数据类型对比分析
数据库