当前位置: 首页 > news >正文

基于“Galera+MariaDB”搭建多主数据库集群的实例

1、什么是多主数据库集群

多主数据库集群是一种数据库集群架构,每个节点都可以接收写入操作和读取操作,并且通过心跳机制同步数据,保证数据一致性和高可用性。因多主数据库集群每个节点都可以承担读写操作,因此它可以充分利用各个节点的服务器资源,不存在主备数据库集群那样,备库只承担备份复制而不承担业务请求,使得备库所在的服务器资源处于近乎“闲置”的状态。

2、多主数据库集群和主备数据库集群的优缺点对比

主备数据库和多活数据库是两种常见的数据库架构,它们各有优缺点。
主备数据库的优点:

  • 简单:主备数据库架构相对简单,易于理解和实现;
  • 成本较低:主备数据库架构的成本相对较低,因为只需要两台数据库服务器,一台为主服务器,一台为备用服务器;
  • 数据安全:主备数据库架构可以保证数据的安全性,因为数据会定期从主服务器复制到备用服务器。

主备数据库的缺点:

  • 可用性:如果主服务器出现故障,备用服务器需要接管主服务器的任务,这可能会导致一定的延迟;
  • 性能:由于主备数据库架构只有一台主服务器,如果主服务器出现故障,所有读写请求都需要转移到备用服务器上,这可能会导致性能下降。

多活数据库的优点:

  • 高可用性:多活数据库架构可以保证高可用性,因为多个节点都可以处理读写请求;
  • 负载均衡:多活数据库架构可以实现负载均衡,将读写请求分散到多个节点上,提高性能;
  • 容错性:如果某个节点出现故障,其他节点可以继续提供服务,保证系统的可用性。

多活数据库的缺点:

  • 复杂性:多活数据库架构相对复杂,需要解决数据一致性、冲突处理等问题;
  • 成本较高:多活数据库架构需要更多的数据库服务器和网络设备,成本相对较高;
  • 数据一致性:在多活数据库架构中,数据一致性是一个重要的问题,需要采用各种技术手段来保证。

3、基于“Galera+MariaDB”搭建多主数据库集群示例

3.1、实验拓扑

本文将演示“Galera+MariaDB”多活数据库集群搭建的简单实例,拓扑如下:
在这里插入图片描述
在设计“Galera+MariaDB”这样的技术组合时,为防止上线后在运行过程中出现节点和节点之间数据不一致(脑裂)情况的发生,根据Galera的官方文档,通常建议节点数应当设计为奇数个数据库节点,但如果因为实际的环境或者成本受限等原因无法部署奇数个数据库节点时,就可以考虑单独部署一个Galera Arbitrator节点。
Galera Arbitrator本身不参与复制,但它和其他节点一样也会接受数据,Galera Arbitrator是集群中的一份子,因此它被视为仲裁节点,可以参与投票。

3.2、搭建方式的实现

3.2.1、Galera+MariaDB节点1部署步骤(OpenEuler22.03LTS)

(1)配置好OpenEuler22.03LTS的官方源或者镜像源,并关闭SELinux,通过命令“yum install mariadb-server mariadb-server-galera galera”安装基础软件;
在这里插入图片描述
(2)输入命令“systemctl start mariadb”启动MariaDB数据库;
(3)通过“mysql_secure_installation”命令对该节点的MariaDB数据库进行初始化;
(4)根据实际的业务系统情况创建用户,并授予相应的权限,在本实验环境下,我们创建一个名为“yanmuhuan”的用户,并赋予所有的权限和允许远程访问;
在这里插入图片描述

(5)输入命令“systemctl stop mariadb”停止MariaDB数据库;
(6)输入命令“vim /etc/my.cnf.d/mariadb-server.cnf”,修改mariadb-server.cnf文件,在“[galera]”下,添加如下内容:

wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.174.131,192.168.174.132
wsrep_cluster_name=rvsdb
wsrep_node_name=db2
wsrep_node_address=192.168.174.131
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
bind-address=0.0.0.0

在这里插入图片描述

需要注意的是,以上配置参数中,我们需要关注以下几个参数的含义:

  • wsrep_cluster_address:集群所包含的节点IP地址;
  • wsrep_cluster_name:集群名称,集群创建时可任取,但创建完成后要求成员节点的该参数一致;
  • wsrep_node_name:节点名称,集群内不同节点的节点名称应当不同;
  • wsrep_node_address:本节点IP地址
  • default_storage_engine:MariaDB默认使用的数据库引擎,都使用InnoDB,因为Galera只支持InnoDB引擎;
  • bind-address:本节点允许被哪些IP网段访问。
    (7)输入命令“galera_new_cluster”命令,将本节点作为多活数据库集群的主节点启动galera集群进程和MariaDB数据库进程。
    在这里插入图片描述

3.2.2、Galera+MariaDB节点2部署步骤(OpenEuler22.03LTS)

此节点配置方式基本与节点1一致,只是/etc/my.cnf.d/mariadb-server.cnf这个配置文件需要根据实际情况做成如下修改:

wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.174.131,192.168.174.132
wsrep_cluster_name=rvsdb
wsrep_node_name=db3
wsrep_node_address=192.168.174.132
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
bind-address=0.0.0.0

在这里插入图片描述
最后启动数据库时,通过正常的“systemctl start mariadb”启动数据库,而不用“galera_new_cluster”命令。
在这里插入图片描述

3.2.3、Galera Arbitrator节点部署步骤(debian12)

在debian12系统中,Galera Arbitrator需要单独安装,而OpenEuler和CentOS等红帽系Linux中,Galera Arbitrator则已经集成在galera的rpm标准软件中,无须单独安装。
(1)输入命令“apt install galera-arbitrator-4”安装Galera Arbitrator;
在这里插入图片描述
(2)输入命令“vim /etc/default/garb”修改Galera Arbitrator的配置文件,内容如下;
在这里插入图片描述
(3)输入命令“systemctl restart garb”启动Galera Arbitrator;

(4)通过命令“systemctl status grab”,正常的Galera Arbitrator进程结果,如下:
在这里插入图片描述
(5)输入命令“garbd -a gcomm://192.168.174.132:4567 -g rvsdb -d”加入集群;
在这里插入图片描述

(6)任意节点登录MariaDB,通过“show status like 'wsrep_%”命令,找到wsrep_cluster_size参数,可看到节点数为3(2个MariaDB+1个Galera Arbitrator);
在这里插入图片描述
(7)在任意数据库节点对数据库进行读写操作(增删改),发现所有节点的数据内容变动是同步的。

3.2.4、知识补充:debian12下部署Galera+MariaDB节点与OpenEuler下部署的差别

(1)debian下部署Galera+MariaDB节点的命令为:“apt-get install galera mariadb-server”,这意味着在debian系Linux软件仓库中的MariaDB已经集成了Galera,并不会像OpenEuler等红帽系Linux中需要部署单独的“mariadb-server-galera”版本;
(2)针对于debian下Galera的配置文件,需要在/etc/mysql/conf.d/目录下添加单独的“galera.cnf”(名字可以任意)文件,并添加和红帽系Linux一样,例如以下格式的内容,具体参数根据实际情况修改:

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.174.129,192.168.174.130
wsrep_cluster_name=rvsdb
wsrep_node_name=db1
wsrep_node_address=192.168.174.129
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
bind-address=0.0.0.0

(3)其余步骤与OpenEuler或CentOS等Linux系统一致。

3.3、结果测试

任意节点登录MariaDB数据库,输入命令“show status like 'wsrep_%';”可查看相应的集群状态。
在这里插入图片描述
其中,应当着重关注以下参数:

  • wsrep_cluster_state_uuid:集群UUID,集群中所有节点此参数相同;
  • wsrep_cluster_size:集群节点数量;
  • wsrep_connected:本节点与集群通信状态。
    其他参数不代表不重要,可以具体查阅相应资料。

4、注意事项

4.1、Galera+MariaDB节点和节点之间的Galera版本和MariaDB要严格匹配

Galera+MariaDB节点和节点之间的Galera版本和MariaDB要严格匹配,否则将出现节点因为版本不匹配的问题无法加入集群,根据实际的实验现场来看,建议节点和节点的Linux操作系统、MariaDB和Galera版本完全一致。而Galera Arbitrator和Galera+MariaDB节点之间的版本匹配则不是这么严格。

4.2、对集群关机维护与重启的标准操作

若要对集群服务器进行关机维护,集群应先停止对外服务,确认数据库没有来自对外的读写操作后进行关机,并应记好关机顺序,维护完成后按关机顺序的相反顺序进行开机,并启动数据库进程,例如,关机顺序为A>B>C,那么开机顺序则为C>B>A,且开机时的C应执行“galera_new_cluster”,后面启动的节点用“systemctl start mariadb”正常启动数据库。

若忘记关机顺序,则在启动之前,应通过命令“cat /var/lib/mysql/grastate.dat”查看“safe_to_bootstrap”字段的数值,若发现有节点的数值为“1”,则首先通过“galera_new_cluster”启动该节点,其他节点用“systemctl start mariadb”正常启动。
在这里插入图片描述
若所有节点的/var/lib/mysql/grastate.dat文件里,safe_to_bootstrap字段都为0,则可以根据实际情况选择一个节点手动将该数值修改为1,而后通过“galera_new_cluster”启动该节点,其他节点用“systemctl start mariadb”正常启动,此方法也是当节点之间数据不一致(脑裂)发生时,强制启动数据库集群恢复业务的方法,但这种方法很可能会造成部分数据的丢失。
在这里插入图片描述

相关文章:

基于“Galera+MariaDB”搭建多主数据库集群的实例

1、什么是多主数据库集群 多主数据库集群是一种数据库集群架构,每个节点都可以接收写入操作和读取操作,并且通过心跳机制同步数据,保证数据一致性和高可用性。因多主数据库集群每个节点都可以承担读写操作,因此它可以充分利用各个…...

arcgis javascript api4.x加载天地图cgs2000坐标系

需求&#xff1a;arcgis javascript api4.x加载天地图cgs2000坐标系 效果&#xff1a; 示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…...

算法学习——回溯算法

回溯算法 理论基础回溯法的效率回溯法解决的问题回溯法模板 组合思路回溯法三部曲 代码 组合&#xff08;优化&#xff09;组合总和III思路代码 电话号码的字母组合思路回溯法来解决n个for循环的问题回溯三部曲代码 组合总和思路代码 组合总和II思路代码 理论基础 什么是回溯法…...

C语言—小小圣诞树

这个代码会询问用户输入圣诞树的高度&#xff0c;然后根据输入的高度在控制台上显示相应高度的圣诞树。 #include <stdio.h>int main() {int height, spaces, stars;printf("请输入圣诞树的高度: ");scanf("%d", &height);spaces height - 1;st…...

Android消息公告上下滚动切换轮播实现

自定义控件 通过继承TextSwitcher实现 直接上代码 public class NoticesSwitcher extends TextSwitcher implements ViewSwitcher.ViewFactory {private Context mContext;private List<Notice> mData;private final long DEFAULT_TIME_SWITCH_INTERVAL 1000;//1spri…...

tensorflow入门 自定义模型

前面说了自定义的层&#xff0c;接下来自定义模型&#xff0c;我们以下图为例子 这个模型没啥意义&#xff0c;单纯是为了写代码实现这个模型 首先呢&#xff0c;我们看有几个部分&#xff0c;dense不需要我们实现了&#xff0c;我们就实现Res&#xff0c;为了实现那个*3,我们…...

虚拟机启动 I/O error in “xfs_read_agi+0x95“

1.在选择系统界面按e 进入维护模式 2.找到ro把ro改成 rw init/sysroot/bin/sh 然后按Ctrlx 3.找到坏掉的分区&#xff0c;以nvme0n1p3为例进行修复 xfs_repair -d /dev/nvme0n1p3 4.init 6 重新启动 以下情况 先umount 再修复 则修复成功...

【MYSQL】-库的操作

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …...

网络协议小记

一、TCP/IP协议 作为一个小萌新&#xff0c;当然我无法将tcp/ip协议的大部分江山和盘托出&#xff0c;但是其中很多面试可能问到的知识&#xff0c;我觉得有必要总结一下&#xff01; 首先&#xff0c;在学习tcp/ip协议之前&#xff0c;我们必须搞明白什么是tcp/ip协议。 1、…...

STM32-I2C通讯-AHT20温湿度检测

非常感谢&#xff0c;提供的视频学习 https://www.bilibili.com/video/BV1QN411D7ak/?spm_id_from333.788&vd_source8ca4826038edd44bb618801808a5e076 该文章注意&#xff1a;串口显示中文会乱码&#xff0c;必须选用支持ASCII的串口助手&#xff0c;才能正常显示中文。…...

【机器学习】043_准确率、精确率、召回率

一、定义 在处理偏斜数据集时&#xff0c;通常使用不同的误差度量&#xff0c;而不仅仅是使用分类误差来衡量算法性能。 1. 混淆矩阵的概念 二分类问题的混淆矩阵为2X2矩阵&#xff0c;由四部分组成&#xff1a; 假阴性&#xff08;FN&#xff09;&#xff1a;模型预测为负…...

【Qt开发流程】之文件目录、文件、输入和输出

概述 应用程序操作过程中&#xff0c;经常要对设备或文件进行读或者写操作。也会经常对文件及目录进行操作。 在Qt中&#xff0c;QIODevice类是Qt中所有进行I/O操作的设备的基类&#xff0c;比如QFile、 QIODevice为支持数据块读写的设备&#xff08;如QFile、QBuffer和QTcpSo…...

CSS的基本选择器及高级选择器(附详细示例以及效果图)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中CSS的基础选择及高级选择器&#xff08;详解&#xff09;以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xf…...

股票价格预测 | Python实现基于Stacked-LSTM的股票预测模型,可预测未来(keras)

文章目录 效果一览文章概述模型描述源码设计效果一览 文章概述 以股票价格预测为例,基于Stacked-LSTM的股票预测模型(keras),可预测未来。 模型描述 LSTM 用于处理序列数据,如时间序列、文本和音频。相对于传统的RNN,LSTM更擅长捕获长期依赖关系,...

数据可视化---离群值展示

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…...

LeetCode Hot100 51.N皇后

题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的…...

机器学习 | 贝叶斯方法

不同于KNN最近邻算法的空间思维&#xff0c;线性算法的线性思维&#xff0c;决策树算法的树状思维&#xff0c;神经网络的网状思维&#xff0c;SVM的升维思维。 贝叶斯方法强调的是 先后的因果思维。 监督式模型分为判别式模型和生成式模型。 判别模型和生成模型的区别&#xf…...

缓存的定义及重要知识点

文章目录 缓存的意义缓存的定义缓存原理缓存的基本思想缓存的优势缓存的代价 缓存的重要知识点 缓存的意义 在互联网高访问量的前提下&#xff0c;缓存的使用&#xff0c;是提升系统性能、改善用户体验的唯一解决之道。 缓存的定义 缓存最初的含义&#xff0c;是指用于加速 …...

TrustZone之顶层软件架构

在处理器中的TrustZone和系统架构中,我们探讨了硬件中的TrustZone支持,包括Arm处理器和更广泛的内存系统。本主题关注TrustZone系统中发现的软件架构。 一、顶层软件架构 下图显示了启用TrustZone的系统的典型软件栈: 【注意】:为简单起见,该图不包括管理程序,尽管它们可…...

SpringBoot Whitelabel Error Page 报错--【已解决】

springboot 报错信息如下 这个报错页面就是个404 &#xff0c;代表你访问的url 没有对应的的requestmapping 其实没啥影响的一个问题&#xff0c;但是看到Error 就是不爽&#xff0c;改了他丫的 解决方法如下 一、调整application.properties配置【治标不治本】 server.err…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...