在信创和国产化的大趋势下,将各个中间件进行国产化替换是当前非常重要的任务之一。下面将介绍如何在国产化欧拉系统中安装国产万里数据库。
0.MGR简介
MGR(MySQL Group Replication):是MySQL官方提供的一种高可用性和容错性解决方案。它是MySQL的一种复制方式,可以将一个MySQL数据库组织成一个组(group),使得多个MySQL服务器可以共同处理客户端的读写请求。MGR采用了基于组的复制模型,每个组成员都可以接收来自客户端的读写请求,并且在组内自动地进行数据同步,确保数据的一致性和可用性。
下面搭建的MGR集群架构为一主多备(三节点)
1.准备三台搭建了欧拉系统的虚拟机
下面用的欧拉系统的版本是openEuler 2203sp1.x86_64,建议先创建一台虚拟机,然后安装好greatsql后,再对虚拟机进行克隆:
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包
2.3 下载rmp包
访问rpm包合集下载地址,我的为2.34所以选择X86平台,el8的包:
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:
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;
配置完毕,修改配置文件的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;
配置完毕,修改配置文件的
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-whitelist
、 loose-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命令自动补全