准备
软件版本
在安装前需要确定要安装的目标MariaDB数据库版本。
- 若MariaDB版本小于10.1需安装MySQL-wsrep补丁和Galera;
- 若大于等于10.1,MariaDB安装包中已经集成Galera;
- 若MariaDB版本小于10.4使用Galera 3;
- 若MariaDB版大于等于10.4,则Galera版本为Galera 4。
Swap空间
使用writeset缓存在写入状态转移时需要更多内存。要控制 writeset 缓存的内存使用情况,请检查 Galera 参数:gcs.recv_q_hard_limit
、gcs.recv_q_soft_limit
和 gcs.max_throttle
。
假设
在安装配置前,做如下假设:
- 需要配置的集群有两个数据库服务器节点;
- 为了避免集群脑裂,Galera需要有至少三个节点,因此需要加入一个仅作仲裁使用的仲裁节点;
- 三个节点的IP地址分别如下:
节点角色 | 节点名称 | IP地址 |
---|---|---|
数据库 | RetroFire | 192.168.1.11 |
数据库 | RetroEarth | 192.168.1.12 |
仲裁 | RetroMetal | 192.168.1.13 |
安装
数据库节点
登录数据库节点服务器,在Debian系统上使用如下命令安装MariaDB
和Galera Cluster
:
sudo apt-get install mariadb-server galera-4
仲裁节点
仲裁节点仅起到两个数据库节点无法同步或出现故障时的仲裁作用,防止集群出现脑裂,不会负责数据同步和数据库服务,因此负载较轻,可安装在其他应用的服务器上。当集群数据库节点大于等于3时,不需要仲裁节点。
在仲裁节点上,使用如下命令安装仲裁服务:
sudo apt-get install galera-arbitrator-4
编辑集群配置
数据库节点配置
在/etc/mysql
目录中有mariadb的配置文件
mariadb.cnf
为全局配置;conf.d
目录中存放全局参数;mariadb.conf.d
目录存放MariaDB的参数;- 其中
60-galera.cnf
为集群配置文件:- 激活主要参数,修改集群名称,集群地址;
50-server.cnf
为数据库服务配置文件:- 激活log_bin参数,通过二进制日志来在两个节点同步数据。
- 其中
配置文件的样例部分节选如下:
50-server.cnf
,两个节点配置内容一致
[mysqld]
# 可参考以下参数修改
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
60-galera.cnf
,需要对两个节点分别配置
# 激活wsrep
wsrep_on=1
# wsrep库的绝对路径
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# 集群名称,在两个节点上需要保持一致
wsrep_cluster_name="RetroDatabase Cluster"
# 集群各节点地址,Galera集群需要至少三个节点以防止脑裂,如配置双节点集群,需要加入第三个仲裁节点的地址
wsrep_cluster_address="gcomm://192.168.1.11,192.168.1.12,192.168.1.13"
# 当前节点名称,各节点不能相同
wsrep_node_name="RetroFire"
# 当前节点IP地址
wsrep_node_address="192.168.1.11"
仲裁节点配置
修改仲裁节点上的/etc/default/garb
文件进行配置,以下是样例。
# 逗号分隔的集群各节点IP地址,包含仲裁节点,默认端口是4567
GALERA_NODES="192.168.1.11:4567,192.168.1.12:4567,192.168.1.13:4567"
# 集群名称,需要和其他数据库节点配置文件中一致
GALERA_GROUP="RetroDatabase Cluster"
首次启动集群
初始化
在所有数据库节点使用如下命令停止数据库服务:
sudo systemctl stop mariadb
在所有数据库节点删除默认生成的空数据库,并重新生成默认数据库:
sudo rm -rf /var/lib/mysql/
sudo mariadb-install-db
首次启动
在其中一个数据库节点启动集群:
sudo galera_new_cluster
完成后,在其他数据库节点按常规方法启动数据库服务加入集群:
sudo systemctl start mariadb
在仲裁节点启动仲裁服务:
sudo systemctl start garb
集群状态验证
在任何一个数据库集群,使用mysql
命令进入数据库操作环境,通过mysql命令show status like 'wsrep_cluster_size';
来确认集群激活的节点数量。
wells@earth:~$ mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2173
Server version: 10.5.21-MariaDB-0+deb11u1-log Debian 11
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.003 sec)
关闭和再次启动
关闭集群
依次在各数据库节点使用如下命令关闭数据库服务:
sudo systemctl stop mariadb
在仲裁节点使用如下命令关闭服务:
sudo systemctl stop garb
再次启动集群
在最后一个关闭的数据库节点使用sudo galera_new_cluster
启动集群,如果无法成功启动,执行以下操作:
- 观察所有结点的数据库服务和仲裁服务的进程时候还有残留,如果有需要停止后才能再次启动集群;
- 若所有相关进程都已停止,修改该节点的
/var/lib/mysql/grastate.dat
文件,把safe_to_bootstrap
设为1
- 再次使用
sudo galera_new_cluster
命令启动集群
在其他数据库节点使用如下命令启动数据库服务:
sudo systemctl start mariadb
在仲裁节点启动仲裁服务:
sudo systemctl start garb
集群使用过程中数据库节点的退出和加入
在整个集群还在正常运行时,使用标准的sudo systemctl stop mariadb
、sudo systemctl start mariadb
命令来退出或加入节点。
Galera Cluster 这玩意要用得好其实还真是伤脑筋的,比如发生死锁时(有兴趣可以看看: https://www.wavecn.com/content.php?id=250)。我手头的生产环境还有莫名其妙完全解释不了的一个随机情况,会破坏集群的Consistency,几年都确定不了原因也解决不了。现在都在换硬件平台,不知道又会有什么新情况出现了。
嗯,其实所有的数据库都是一样,调优和解决问题都是很复杂的过程,这就是DBA的价值。
up你好,这个博客是基于WordPress的嘛
是的
很喜欢老师视频,学到很多东西。不知道老师如何进行压力测试的,感觉并发度只有300,似乎有点过低。。。不知道瓶颈在那里。。此致敬礼
我用siege做压力测试,参数是300个并发并且每个循环100次(并非一次结束),随机打开网站的某一个页面。所以实际压力还是有点大,CPU还是挺煎熬的。不过虽然知道在反向代理方面Nginx性能要比HAProxy差一些,但没想到差挺多的。可能是我设置的问题,但是我也尝试了很多种方法调整,但并没有好的结果。
up您好,看过您的视频我也想在我所学的领域来一个power by loongson,组建一个集群。集群硬件方案可以请您指个路嘛,包括系统供电问题,硬盘问题。
具体是什么问题
比如您是如何给每个节点进行供电的,之前看视频的时候猜想是 csps 引出12V供电再通过dcatx给主板,这样的话不是很明白每个节点的硬盘是如何处理的。另外就是您是使用的无盘还是其他方案呢
很简单的,服务器电源12V输出的总功率能达到600W,所以我把它输出给5台设备,每台设备用一个最大功率100W的DC-ATX电源模块将12V电源转为ATX供电即可。
DC-ATX上有硬盘供电
感谢感谢,我的 power by loongson 旅途也要开始了