在欧拉系统中搭建万里数据库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命令自动补全

相关推荐

  1. Linux进行ZooKeeper

    2024-06-12 14:58:03       49 阅读
  2. 达梦数据库系列—23. DSC

    2024-06-12 14:58:03       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 14:58:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 14:58:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 14:58:03       82 阅读
  4. Python语言-面向对象

    2024-06-12 14:58:03       91 阅读

热门阅读

  1. 网络数据库后端面试题

    2024-06-12 14:58:03       29 阅读
  2. c++:回顾(一)

    2024-06-12 14:58:03       34 阅读
  3. 杂项——编码器控制小车走固定距离(stm32)

    2024-06-12 14:58:03       36 阅读
  4. 2833.距离原点最远的点

    2024-06-12 14:58:03       34 阅读
  5. 亚马逊云服务器价格贵不贵?

    2024-06-12 14:58:03       31 阅读
  6. 设计模式之建造者模式

    2024-06-12 14:58:03       31 阅读
  7. 音视频开发26 FFmpeg 时间问题整理

    2024-06-12 14:58:03       33 阅读
  8. 05 Hadoop简单使用

    2024-06-12 14:58:03       24 阅读
  9. k8s redis 单节点部署

    2024-06-12 14:58:03       30 阅读