在欧拉系统中搭建万里数据库MGR集群(图文详解)

在信创和国产化的大趋势下,将各个中间件进行国产化替换是当前非常重要的任务之一。下面将介绍如何在国产化欧拉系统中安装国产万里数据库。

0.MGR简介

MGR(MySQL Group Replication):是MySQL官方提供的一种高可用性和容错性解决方案。它是MySQL的一种复制方式,可以将一个MySQL数据库组织成一个组(group),使得多个MySQL服务器可以共同处理客户端的读写请求。MGR采用了基于组的复制模型,每个组成员都可以接收来自客户端的读写请求,并且在组内自动地进行数据同步,确保数据的一致性和可用性。

下面搭建的MGR集群架构为一主多备(三节点)

1.准备三台搭建了欧拉系统的虚拟机

下面用的欧拉系统的版本是openEuler 2203sp1.x86_64,建议先创建一台虚拟机,然后安装好greatsql后,再对虚拟机进行克隆:
![[Pasted image 20240611214851.png]]

2.安装greatsql最新版本(8.0.32-25)

2.1 关闭防火墙及selinux

# 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
# 关闭selinux
setenforce=0
sed -i '/^SELINUX=/c'SELINUX=disabled /etc/selinux/config

2.2 查看glibc版本

如果您的glibc版本为2.28或更高版本,请选择带有"el8"标识的rpm包;如果您的glibc版本为2.17,请选择带有"el7"标识的rpm包
![[Pasted image 20240611220725.png]]

2.3 下载rmp包

访问rpm包合集下载地址,我的为2.34所以选择X86平台,el8的包:
![[Pasted image 20240611220634.png]]

2.4 换源并安装依赖

将源换为国内华为云:

sed -i "s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g" /etc/yum.repos.d/openEuler.repo;sed -i 's#EPOL/$basearch#EPOL/main/$basearch#g' /etc/yum.repos.d/openEuler.repo;yum clean all;yum makecache

安装依赖(下面的GreatSQL依赖包,欧拉系统基本都已默认安装):

yum install -y pkg-config perl libaio-devel numactl-devel numactl-libs net-tools openssl openssl-devel jemalloc jemalloc-devel perl-Data-Dumper perl-Digest-MD5 perl-JSON perl-Test-Simple

2.5 将上面下载的rmp包合集进行解压安装

mkdir /home/greatsql
tar -xf greatsql-8.0.32-25.1.el8.amd64.rpm-bundle.tar.xz -C /home/greatsql
cd /home/greatsql;rpm -ivh --nodeps greatsql*rpm

2.6 调整systemd文件

调高一些limit上限,避免出现文件数、线程数不够用的告警

# Service 的配置项下面
[Service]
LimitFSIZE=infinity
LimitCPU=infinity
LimitNOFILE = 65535
LimitNPROC=65535
LimitMEMLOCK=infinity
TasksMax=infinity
TasksAccounting=false
Restart=on-failure
# 允许调用内核权限设置浮动ip
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW

保存退出,并启动服务:

systemctl daemon-reload
systemctl start mysqld

2.7 连接greatsql

RPM方式安装GreatSQL后,会随机生成管理员root的密码,通过搜索日志文件获取:
![[Pasted image 20240611224414.png]]
可以看到,root账户的密码是:“马赛克” (不包含双引号),复制到粘贴板里。

首次登入GreatSQL后,要立即修改root密码,否则无法执行其他操作,并且新密码要符合一定安全规则:

mysql -uroot -p

连接报错了:error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory

使用yum安装readline-devel

yum install readline-devel

readline-devel的版本是readline-devel.so.8,这里要的不是7吗,做个软连接:

ln -s /usr/lib64/libreadline.so.8 /usr/lib64/libreadline.so.7

设置好后重启mysql服务,再次连接成功,更新root密码并允许远程连接:

ALTER USER USER() IDENTIFIED BY 'GreatSQL@123X';
CREATE USER 'root'@'%' IDENTIFIED BY 'GreatSQL@123X';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3.部署MGR集群

3.1 将安装好GreatSQL的虚拟机进行克隆,我将hadb3克隆了hadb1和hadb2:

![[Pasted image 20240611214851.png]]

3.2 修改上面三台节点的/etc/hosts文件,加上解析

# 加解析:节点ip hostname
172.16.6.122 172-16-6-122
172.16.6.138 172-16-6-138
172.16.6.196 172-16-6-196

3.3 修改/var/lib/mysql/auto.cnf文件

有时候为了方便,会用同一个虚拟机克隆多台出来,用于实验MGR配置,这时候要重点检查/var/lib/mysql/auto.cnf文件里的server-uuid,如果不同节点的server-uuid重复了,可以删除这个文件然后重启mysqld服务。

3.4 修改/etc/my.cnf文件,加上MGR配置

[mysqld]
# 下面这一段是通用配置,与MGR配置没有冲突,直接保留即可
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid_file=/run/mysqld/mysqld.pid
max_connections = 12000
innodb_buffer_pool_size = 3G
innodb_log_file_size = 1G
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
tmp_table_size = 32M
max_heap_table_size = 32M
thread_cache_size = 200
table_open_cache = 20
open_files_limit = 65535
sql-mode = NO_ENGINE_SUBSTITUTION
# 通用配置结束

# 下面这一段比较关键的一点就是以row格式打开binlog
# add
binlog-format=row
binlog_checksum=CRC32
binlog_transaction_dependency_tracking=writeset
enforce-gtid-consistency=true
gtid-mode=on
log-bin=/var/lib/mysql/mysql-bin
log_slave_updates=ON
# add结束


# 加上MGR配置信息
# 下面都是MGR配置
# 2024-4-24开启浮动IP功能
loose-greatdb_ha_enable_mgr_vip=1
# 2024-4-24浮动IP地址
loose-greatdb_ha_mgr_vip_ip=172.16.6.1
# 2024-4-24浮动IP子网掩码
loose-greatdb_ha_mgr_vip_mask='255.255.0.0'
# 2024-4-24浮动IP绑定的网卡(每个节点都可能不一样)
loose-greatdb_ha_mgr_vip_nic='eth0'
# 2024-4-24节点绑定浮动IP后,会广播ARP包来更新局域网的ARP缓存,下面配的是广播次数(可选3-20)
loose-greatdb_ha_send_arp_package_times=5
loose-group-replication-ip-whitelist="172.16.6.196,172.16.6.138,172.16.6.122"
# 不作为MGR集群的bootstrap节点
loose-group_replication_bootstrap_group=off
# 如果退出了MGR,就把该节点设为只读,避免误操作写入数据
loose-group_replication_exit_state_action=READ_ONLY
# flow_control流控一般应该没必要开启
loose-group_replication_flow_control_mode="DISABLED"
# 为所有节点指定相同的group name(格式为uuid,可以自己生成一个,MGR内的所有节点保持一致)
loose-group_replication_group_name="9e127297-6efd-424e-9f95-72649a667aee"
# 所有节点的IP+集群端口(端口可以换)
loose-group_replication_group_seeds="172.16.6.196:33061,172.16.6.138:33061,172.16.6.122:33061"
# 本节点的IP+集群端口(端口可以换)
loose-group_replication_local_address="172.16.6.122:33061"
# 单主模式(不建议用多主模式)
loose-group_replication_single_primary_mode=ON
# 启动了mysqld但还没配置MGR的时候,不建议自启动MGR(后面还有操作会再去启动MGR)
loose-group_replication_start_on_boot=off
# 2024-4-24浮动IP加载插件
loose-plugin_load_add='greatdb_ha.so'
loose-plugin_load_add='group_replication.so'
loose-plugin_load_add='mysql_clone.so'
master-info-repository=TABLE
relay-log-info-repository=TABLE
relay_log_recovery=on
# 每个节点的server_id都应该不一样
server_id=1
slave_checkpoint_period=2
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=128
slave_preserve_commit_order=1
sql_require_primary_key=1
transaction_write_set_extraction=XXHASH64

然后重启每个节点的mysqld服务。

3.5 添加集群账户

在每个节点下面执行SQL:

create user repl@'%' identified with mysql_native_password by 'Resql@123';
grant replication slave, backup_admin on *.* to 'repl'@'%';
change master to master_user='repl', master_password='Resql@123' for channel 'group_replication_recovery';

3.6 主节点启用集群

在主节点执行下面的SQL:

set global group_replication_bootstrap_group=ON;
start group_replication;
set global group_replication_bootstrap_group=OFF;

【验证】在主节点执行下面的SQL可以看到现在MGR有一个PRIMARY节点了:

select * from performance_schema.replication_group_members;

![[Pasted image 20240611232316.png]]

配置完毕,修改配置文件的loose-group_replication_start_on_boot=on,让MGR自启动。

3.7 添加并启用副节点

在每个待添加的副节点执行下面的所有步骤:

  • 如果是新节点,要改所有节点的配置项,加上这个新节点的IP:
    loose-group-replication-ip-whitelist
    loose-group_replication_group_seeds

  • 先用克隆方式把主节点的数据都同步到副节点,克隆完成后,当前mysql连接有可能会自动断线,下面要注意重连一下。:

      set global clone_valid_donor_list='172.16.6.196:3306';
      clone instance from repl@172.16.6.196:3306 identified by 'Resql@123';
    
  • 启用MGR:

      start group_replication;
    
  • 【验证】在主节点或者副节点执行下面的SQL可以看到现在多了一个SECONDARY节点:

      select * from performance_schema.replication_group_members;
    

    ![[Pasted image 20240611233337.png]]配置完毕,修改配置文件的loose-group_replication_start_on_boot=on,让MGR自启动。

4.移除MGR集群节点

在副节点执行下面的SQL:stop replication_group(如果副节点已经挂了就跳过此步骤)。
停止副节点的mysqld服务。
修改副节点的/etc/my.cnf,去掉MGR相关配置。
修改其他所有节点的/etc/my.cnf,去掉该副节点的IP:loose-group-replication-ip-whitelistloose-group_replication_group_seeds,然后重启其他所有节点

参考:
1.GreatSQL用户手册
2.error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory
3.readline库的安装和使用,实现shell命令自动补全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/701044.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

塔勒布作品集合风险共担来应对不确定性、风险、随机性的局限性

Nassim Nicholas Taleb 是一位著名的风险分析学者和作家,他的主要作品被合称为“Incerto”不确定性系列。这些书籍虽然可以独立阅读,但它们在主题和思想上紧密相连,共同探讨了不确定性、风险、随机性和人类在应对这些方面的局限性。 以下是 …

修改注册表默认端口号;telnet端口号失败、不通、没反应;访问另一机器端口不通

背景:在多集群项目中,发现访问其他机器不通。遂使用telnet命令试试,确实端口不通。也查看了防火墙策略等,最后尝试了修改注册表默认端口号。这样端口可通了。但并未实际解决问题,在实际项目中需要确认一下你实际项目中…

Keil MDK 下载安装相对应CPU的Software Packs

要下载MDK ARM的Software Packs,您可以按照以下步骤进行,这些步骤结合了参考文章中的信息并进行了适当的归纳和整理: 1. 访问Keil官网 打开浏览器,访问Keil的官方网站:www.keil.arm.com。 2. 进入Software Packs下载…

解析 Spring 框架中的三种 BeanName 生成策略

在 Spring 框架中,定义 Bean 时不一定需要指定名称,Spring 会智能生成默认名称。本文将介绍 Spring 的三种 BeanName 生成器,包括在 XML 配置、Java 注解和组件扫描中使用的情况,并解释它们如何自动创建和管理 Bean 名称。 1. Be…

STM32硬件接口I2C应用(基于MP6050)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识MP6050 3.1 MP6050功能介绍 3.2 加速计测量寄存器 ​编辑3.3 温度计量寄存器 3.4 陀螺仪测量寄存器 4 MP60…

WindTerm使用SSH密钥连接阿里云实例,服务器设置SSH密钥登录

安装Windterm 地址https://github.com/kingToolbox/WindTerm/releases 下载完放到文件夹就可以打开 阿里云开启密钥对 打开阿里云ecs控制台 https://ecs.console.aliyun.com/keyPair/region/cn-wulanchabu 网络与安全->密钥对,创建密钥对,创建成…

6.11 作业

以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员&…

OA协同办公系统 iWebPDF插件安装

1、下载压缩文件 iweboffice,并进行解压 链接:https://pan.baidu.com/s/1GQd7000PTZ771ifL5KEflg 提取码:hb56 2、安装iWenpdf2018.exe 3、安装金格中间件外部应用 4、测试了谷歌、360安全,发现安装插件后,只有360极…

10秒变鬼短视频:四川鑫悦里文化传媒有限公司

10秒变鬼短视频:创意与惊悚的完美融合 在短视频的世界里,创新与独特性 节奏、巧妙的剪辑和惊悚的氛围,成为了许多观众喜爱的对象。四川鑫悦里文化传媒有限公司将探讨“10秒变鬼”短视频的创作技巧、受众心理以及其对短视频行业的启示。 一…

【ubuntu22.04~mysql-MHA-mycat】

ubuntu22.04~mysql-MHA-mycat 前言一、安装指定版本mysql-server(8.0.23)1、安装mysql2、启用修改mysql配置1、安装3、修改权限3.1、用户密码存放位置,3.2、创建用户root@%4、mysql配置文件my.cnf修改1、主节点my.cnf2、slave1~my.cnf修改项3、slave2~my.cnf修改项5、重启mys…

我的网络安全之路——一场诗意的邂逅

文章来源|MS08067 安全实验室 本文作者:tuooo 我的网络安全之路 一场诗意的邂逅 童年的星光中,我仰望着璀璨的荧屏,心怀对未知机器世界的浩瀚与好奇。那时的我,每每想到各种游戏的破解版本与工具,便会被技术…

SpringBoot+layui实现商品打标

标题 下拉框组件效果图代码实现前端界面产品打标页面代码 后端代码controllerservice ,serviceImplmappermapper.xmlentity 数据库表 下拉框组件 xm-select 效果图 代码实现 前端界面 <script type"text/html" id"stockTags"><div><div&…

助力草莓智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下草莓成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…

如何优雅的实现Excel导入通用处理流程

目录 1.业务背景2.业务导入流程3.流程优化3.1 模板模式3.1.1 导入处理器接口ImportProcessor3.1.2 抽象父类 AbstractImportProcessor3.1.3 子类实现 ImportDemoProcessor 3.2 工厂模式3.2.1 标识子类的枚举ImportTypeEnum3.2.2 工厂类ProcessorHolder3.2.3 工厂类的调用 4. 特…

openh264 编码器源码分析:主体框架

openh264 OpenH264 是一个开源的 H.264 编码解码库&#xff0c;专为实时应用如 WebRTC 设计。OpenH264 编码器因其高效性能、广泛的操作系统和架构支持以及灵活的编码参数设置&#xff0c;成为许多开发者在需要 H.264 编码解码解决方案时的理想选择。关于其介绍可以参考&#…

express+宝塔实现文件上传服务

文章目录 服务器部分开启存放文件的端口配置nginx该端口入口手动在/www/wwwroot/file目录下存放一张图片进行访问 express接口部分代码测试 服务器部分 开启存放文件的端口 我这里以83为例 先到对应的服务商开启端口&#xff0c;比如我这里是阿里云 测试&#xff0c;比如这里…

大模型基础——从零实现一个Transformer(3)

大模型基础——从零实现一个Transformer(1)-CSDN博客 一、前言 之前两篇文章已经讲了Transformer的Embedding,Tokenizer,Attention,Position Encoding, 本文我们继续了解Transformer中剩下的其他组件. 二、归一化 2.1 Layer Normalization layerNorm是针对序列数据提出的一种…

如何掌握多门编程语言?

我的答案是&#xff1a;掌握学习新编程语言的能力。 授之以鱼不如授之以渔 对于一个编程老手来说&#xff0c;学习新的编程语言应该很容易。他们只需要一个周末甚至是几个小时就可以开始用新学的编程语言写代码了。优秀的程序员可以为了完成某个任务使用任何一门编程语言。毕…

UE5 Sequencer 使用指导 - 学习笔记

https://www.bilibili.com/video/BV1jG411L7r7/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 Sequencer 01 1.1 调整视口 调整窗口数量 调整视口类型为Cinematic视口 视口显示网格&#xff0c;或者条件参考线 1.2 关卡动画与…

探索工厂智能制造解决方案的革新与应用

随着工业4.0时代的到来&#xff0c;工厂智能制造解决方案正在以前所未有的速度和规模改变着传统制造业的面貌。从自动化生产到智能化管理&#xff0c;工厂智能制造解决方案正在为制造企业带来前所未有的效率提升和竞争优势。本文将深入探讨工厂智能制造解决方案的革新与应用&am…