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

news2024/9/22 21:31:16

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

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命令自动补全

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【java计算机毕设】智慧图书管理系统javaweb MySQL springboot vue html maven送文档

1项目功能截图 【java计算机毕业设计分享】 智慧图书管理系统 Java SpringBoot vue HTML MySQL idea送文档 2项目介绍 系统功能: 智慧图书管理系统包括管理员和读者两种角色。 管理员的功能包括在个人中心修改个人信息和密码,基础数据管理模块包含读者类…

哪款桌面便签软件功能全面且用户评价高?

在日常生活中,便签软件已成为我们不可或缺的小助手。想象一下,在工作或学习时,你能够随时在桌面上看到自己的任务事项,这无疑会大大提高你的效率。便签软件不仅能帮助我们记录重要事项,还能提醒我们按时完成各项任务&a…

IDEA:配置Golang的开发环境及异常

1、下载&安装 进入GO的官网下载对应的GO 我们可以下载安装版,不过本人习惯下载解压版,这个因个人而异 2、配置环境变量 GOBIN : %GOROOT%\bin GOPATH : D:\MyGo 工作区间 GOROOT : D:\Program Files\Go GOJDK地址PATH: %GOBIN% ; %GOROOT%\bin ; …

如何进行考试成绩分析

一、为什么要对考试成绩进行分析? 考试成绩进行分析是一项重要的工作,可以为学生、教师和学校提供有效的学习评价和支持,同时也可以为教学改进和提高教学质量提供有力的支持和指导。对考试成绩进行分析有以下几个原因: 1.了解学生…

液化天然气巡检机器人:LNG 行业的创新守护者

在当今能源领域,液化天然气(LNG)作为一种清洁、高效的能源正扮演着越来越重要的角色。然而,LNG的生产、存储和运输都面临着高温高压、易燃易爆等巨大风险。为确保安全运营和高效管理,液化天然气行业迫切需要一种创新的…

电压是如何产生的

学过初中物理的人都知道,电源可以产生电压,电子们在电源电压的驱动下,产生定向移动形成电流。电流具有能量,人类学会了利用这股能量,从此科技突飞猛进。然而大部分教材都是从宏观的角度去描述电压这个概念,…

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

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

PDF操作工具

PDF的转换、编辑、删除、文本识别、添加水印等等各种操作用的越来越多,相信很多朋友都有WPS等软件的会员、可是更多的朋友是没开通WPS等软件的会员的,那么怎么办呢,给你们推荐一款pdf操作的工具。 PDF24 Creator是一款免费且流行的 PDF 解决…

服务器制作RAID磁盘阵列并管理

1. 规划节点 主机规划 IP主机名节点192.168.100.10localhost控制节点 2. 基础准备 使用VMWare Workstation软件安装CentOS 7.2操作系统,镜像使用提供的 CentOS-7-x86_64-DVD-1511.iso,并添加4块20 GB硬盘。YUM源使用提供的 mdadm_yum文件夹。 1. 创…

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

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

Error:Kotlin: Module was compiled with an incompatible version of Kotlin.

一、问题:运行spring boot项目时,idea报出错误:时提示报错如下图: 错误代码: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected …

Springboot 整合 Flowable(一):使用 flowable-UI 绘制流程图

目录 一、Flowable简介 二、Flowable 与 Activiti 的区别 三、流程图的绘制(以员工请假流程图为例) 1、下载 flowable 的压缩包: 2、启动包中的 tomcat 3、登录页面 4、绘制结束,导出 bpmn20.xml文件 一、Flowable简介 Fl…

Linux C语言:指针和二维数组

一、一级指针和二维数组 二维数组的元素连续存储&#xff0c;按行优先存 二、数组指针和二维数组 1、二维数组名的理解 行指针&#xff08;数组指针&#xff09;存储行地址的指针变量&#xff0c;叫做行指针变量。形式如下&#xff1a; <数据类型> (*<指针变量名>…

Java内存图相关概念

内存图 1.内存:可以理解"内存条",任何程序,软件运行起来都会在内存中运行,占用内存,在java的世界中,将内存分为了5大块2.分为哪5大块栈(重点)(Stack)主要运行方法,方法的运行都会去栈内存中运行,运行完毕之后,需要"弹栈",腾空间堆(重点):(Heap)每new一次,…

Java面试题--JVM大厂篇之深入了解Java虚拟机(JVM):工作机制与优化策略

引言&#xff1a; Java虚拟机&#xff08;Java Virtual Machine&#xff0c;简称JVM&#xff09;是Java程序员绕不开的主题。作为Java语言的执行平台&#xff0c;JVM不仅为Java程序提供了平台无关性&#xff0c;还承担了内存管理、线程管理和垃圾回收等复杂任务。了解JVM的工作…

缓冲区的奥秘:解析数据交错的魔法

目录 一、理解缓存区的好处 &#xff08;一&#xff09;直观性的理解 &#xff08;二&#xff09;缓存区的好处 二、经典案例分析体会 &#xff08;一&#xff09;文件读写流&#xff08;File I/O Buffering&#xff09; BufferedOutputStream 和 BufferedWriter 可以加快…

解锁工业数据流:NeuronEX 规则调试功能实操指南

工业企业要实现数据驱动的新质生产力升级&#xff0c;一个重要的环节便是如何准确、可靠地收集并利用生产过程中的数据流。 NeuronEX 工业边缘软件中的规则调试功能&#xff0c;可帮助用户在安全的环境中模拟数据输入&#xff0c;测试和优化数据处理规则&#xff0c;从而提前发…

Spark groupByKey和reduceByKey对比

在 Apache Spark 中&#xff0c;groupByKey 和 reduceByKey 都是用于对键值对 (key-value) 数据集进行分组和聚合的操作。然而&#xff0c;它们在性能和使用场景上有显著的差异。 groupByKey 函数 groupByKey 将数据集中的所有键相同的值进行分组&#xff0c;然后返回一个键值…

C++多线程同步总结

C多线程同步总结 关于C多线程同步 一、C11规范下的线程库 1、C11 线程库的基本用法&#xff1a;创建线程、分离线程 #include<iostream> #include<thread> #include<windows.h> using namespace std; void threadProc() {cout<<"this is in t…

java多线程相关概念

在Java多线程编程中&#xff0c;有几个关键的术语需要理解&#xff1a; 1.线程(Thread)&#xff1a;线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。 2.进程(Process)&#xff1a;进程是系统进行资源分配和调度…