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

安装mariadb+galera搭建数据库集群

记一次安装mariadb+galera搭建数据库集群过程。

背景:使用单机mariadb数据库提供服务,存在数据无实时备份,数据服务器无切换等问题,无法应对服务器故障停服,无法持续提供数据服务的情况。之前使用几种方法解决

  1. mysqldump每天定时将数据打包备份,但库表数据量变大时,硬盘空间也成了问题。

  1. binlog设置主从服务器,但经常出现 从库停止同步,需手工设置更新点,维护成本较高。

于是尝试采用mariadb+galera搭建数据库集群,好处如下:

主要功能:

  • 同步复制

  • 真正的 multi-master,即所有节点可以同时读写数据库

  • 自动的节点成员控制,失效节点自动被清除

  • 新节点加入数据自动复制

  • 真正的并行复制,行级

  • 用户可以直接连接集群,使用感受上与MySQL完全一致

优势:

  • 因为是多主,所以不存在Slavelag(延迟)

  • 不存在丢失事务的情况

  • 同时具有读和写的扩展能力

  • 更小的客户端延迟

  • 节点间数据是同步的,而 Master/Slave 模式是异步的,不同 slave 上的 binlog 可能是不同的

以下总结搭建过程,以及遇到的问题。

一、材料准备:

linux系统:cat /proc/version 查看版本Debian 8.3.0-6 promox ve的版本

数据库版本:10.3.38-MariaDB(需要安装同一版本)

节点1:192.168.1.131

节点2:192.168.1.132

节点3:192.168.1.133

安装的软件包:

apt install -y mariadb mariadb-server mariadb-common galera rsync

galera官网安装视频:

installing galera vedio

二、安装数据库版本时遇到的问题:

一台服务器的mariadb版本10.5,另一台的版本是10.3,配置完启动后,没有进行数据同步。于是将10.5版本卸载,安装10.3版本。本来是挺简单的事,卸载--查看版本--安装指定版。结果提示无法安装,提示部分包无法安装。

root@: apt-get remove --auto-remove mariadb-server
root@: apt search mariadb-server 
正在排序... 完成
全文搜索... 完成
mariadb-server/oldstable,now 1:10.3.38-0+deb10u1 all [已安装]
  MariaDB database server (metapackage depending on the latest version)
mariadb-server-10.3/oldstable,now 1:10.3.38-0+deb10u1 amd64 [已安装,自动]
  MariaDB database server binaries
mariadb-server-core-10.3/oldstable,now 1:10.3.38-0+deb10u1 amd64 [已安装,自动]
root@: apt-get install mariadb-server=10.3.38

后来分析一下,应该是回退至低版本,相应的依赖包是高版本,无法回退至低版本。于是我做了如下的操作:

  1. 配置apt源,添加清华源pve依赖包

deb http://deb.debian.org/debian/ buster main
deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb http://security.debian.org/debian-security buster/updates main
#清华源pve依赖包
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve buster pve-no-subscription
  1. apt update和apt upgrade,一番系统更新之后,改用aptitude install -y mariadb-server=10.3.38

提示需安装100多个包。最后终于安装mariadb-server及相应的依赖应安装下去。

三、配置mariadb可远程访问

主要三步操作:

  1. 在/etc/mysql/mariadb.conf.d/50-server.cnf ,将127.0.0.1注释掉;

  1. 使用grant给root赋权;

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

或者使用mysql_secure_installation 设置root权限和密码

3、查看root是否赋值成功

root@:# mysql -u root
MariaDB [(none)]> user mysql
select host,password,user from user;
+-----------+-------------------------------------------+------+
| host      | password                                  | user |
+-----------+-------------------------------------------+------+
| localhost |                                           | root |
| %         | *1B29504121B3B0BD0511F27DD632AF519B3AAFF2 | root |
+-----------+-------------------------------------------+------+

可参考:Mysql创建用户和授权

四、防火墙放通端口

galera端口4444,4567,4568等3个端口,mariadb端口3306,均需要放通可访问。

3306:对于使用mysqldump方法的MySQL客户端连接和状态快照传输。

4567:对于在此端口上同时使用UDP和TCP的Galera Cluster复制流量和多播复制。

4568:增量状态转移。

4444:用于所有其他状态快照转移。

以下用放通3306为例,其他端口访照。

#仅放通端口访问
root@:firewall-cmd --permanent --zone=public --add-port=3306/tcp
root@:iptables -I INPUT -p tcp  --dport 3306 -j ACCEPT
#对部分ip段可访问
root@:firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.245.182.0/24" port port="4444" protocol="tcp" accept"
root@:iptables -I INPUT s 192.168.1.0/24 -p tcp  --dport 3306 -j ACCEPT

五、配置第一个节点

1、关闭数据库,新建配置文件:
root@:/etc/mysql/mariadb.conf.d# cat galara.conf
[mysqld]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
binlog_format=row
default-storage-engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name=node101
wsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103"
wsrep_sst_method=rsync   
wsrep_node_address=192.168.1.101
wsrep_node_name=node101

相应的说明如下:

wsrep_on:在10.1以上版本的mariadb中,该参数的默认值为OFF,意为该节点的事务将不会发送给集群中的其他节点;

wsrep_provider:wsrep库的路径,请自行确认;

wsrep_cluster_name:集群名称,可自定义;

wsrep_cluster_address:第一个启动的节点务必设置为以上代码中的值;

wsrep_node_address:定义本节点的wsrep地址与端口,默认端口为4567;

wsrep_sst_receive_address:定义本节点接受传入请求的域名或IP,可附带端口,默认的端口根据wsrep_sst_method定义的快照传输方式的不同而不同;

wsrep_node_name:本节点名称,在集群中需唯一;

wsrep_sst_auth:快照传输方式的验证信息;

wsrep_sst_method:定义快照传输方式;

bind-address:数据库监听的IP地址。

默认情况下,wsrep会监听TCP 4567端口,当有新节点加入时,新节点会通过wsrep_cluster_address中设定的节点信息,拉取该节点的信息。

当没有设定wsrep_node_address或wsrep_sst_receive_address,galera将监听数据库bind-address中设定的IP地址,如果没有设定bind-address,则监听默认的IP地址。

如果mariadb服务器有多个IP地址,则可以通过上面两个变量设定监听特定的IP地址或端口。例如在腾讯云环境中,系统中的IP地址为10开头的内网IP,公网请求则通过NAT的方式传入,此时就需要设定上面的两个变量,指定域名或公网IP,否则galera集群将无法正常工作。

如果内网IP可达,则无需设定上面两个变量。

wsrep_sst_method可以设定不同的数据库同步方式,默认是使用rsync,请根据实际情况设定并在防火墙中放行特定的端口。

2、启动节点:

要调出第一个节点,我们需要使用特殊的启动脚本。每个联机的节点都尝试连接到其galera.cnf文件中指定的至少一个其他节点以获取其初始状态。如果不使用galera_new_cluster允许systemd传递--wsrep-new-cluster参数的脚本,则systemctl start mariadb会失败,因为没有节点为第一个节点连接而运行。

root@: galera_new_cluster
#或者
root@: service  mariadb start --wsrep-new-cluster

当此脚本成功时,该节点将注册为集群的一部分,我们可以使用以下命令查看它:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

六、配置第二三个节点

1、关闭数据库,新建配置文件:

配置与第五点一致,只需改下ip地址即可。

2、启动节点:

在剩余的节点上,我们可以正常启动mysql。他们将搜索联机的集群列表中的任何成员,当他们找到时,他们将加入集群。此时提示出错,访问4567端口超时 timed out。

使用telnet 192.168.1.101 4567却提示成功。

root@: systemctl start mariadb
root@: /var/log/mysql/error.log
2023-03-24 14:13:40 0 [Note] WSREP: (01000ffc, 'tcp://0.0.0.0:4567') connection to peer ba874568 with addr tcp://192.168.1.101:4567 timed out, no messages seen in PT3S
root@: 

http://www.manongjc.com/detail/51-wuuvpeghvirjjrp.html

https://zhuanlan.zhihu.com/p/46675331

MariaDB Galera集群部署 - 凡是过往皆为序章 - 博客园

MariaDB Galera集群入门教程-腾讯云开发者社区-腾讯云


http://www.kler.cn/a/540040.html

相关文章:

  • [LLM面试题] 指示微调(Prompt-tuning)与 Prefix-tuning区别
  • WPS如何接入DeepSeek(通过JS宏调用)
  • PostgreSQL 18新特性之DML语句RETURNING增强
  • Gitlab中如何进行仓库迁移
  • 多光谱成像技术在华为Mate70系列的应用
  • 单例模式几种实现
  • 安全研究员职业提升路径
  • 运维_Mac环境单体服务Docker部署实战手册
  • 《手札·开源篇》数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%?
  • ElementUI的常用组件及使用技巧
  • 微服务..
  • HTML与CSS常见问题总结
  • MAC国内安装Homebrew的方法
  • 【LeetCode 刷题】动态规划(2)-背包问题
  • 【自开发工具】SQLSERVER的ImpDp和ExpDp工具汇总
  • DeepSeek时代:百度们亟需“深度求索”
  • 信息科技伦理与道德3-3:智能决策
  • SickOs 1.2靶机(超详细教学)
  • UnoCSS 自定义规则
  • 【机器学习】数据预处理之scikit-learn的Scaler与自定义Scaler类进行数据归一化
  • ProcessingP5js数据可视化
  • Chapter2:C#基本数据类型
  • Spring Boot 中的监视器是什么
  • Elasticsearch去分析目标服务器的日志,需要在目标服务器上面安装Elasticsearch 软件吗
  • Groovy语言的物联网
  • 项目部署问题