Swap空间
使用writeset缓存在写入状态转移时需要更多内存。要控制 writeset 缓存的内存使用情况,请检查 Galera 参数:
gcs.recv_q_hard_limit
、
gcs.recv_q_soft_limit
和
gcs.max_throttle
。
在安装配置前,做如下假设:
需要配置的集群有两个数据库服务器节点;
为了避免集群脑裂,Galera需要有至少三个节点,因此需要加入一个仅作仲裁使用的仲裁节点;
三个节点的IP地址分别如下:
数据库节点
登录数据库节点服务器,在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参数,通过二进制日志来在两个节点同步数据。
# 可参考以下参数修改
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
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
命令来退出或加入节点。
Post Views: 607
TECH 技术Tags : Galera, MariaDB, mysql, 数据库, 集群, 龙芯
Galera Cluster 这玩意要用得好其实还真是伤脑筋的,比如发生死锁时(有兴趣可以看看: https://www.wavecn.com/content.php?id=250)。我手头的生产环境还有莫名其妙完全解释不了的一个随机情况,会破坏集群的Consistency,几年都确定不了原因也解决不了。现在都在换硬件平台,不知道又会有什么新情况出现了。
我用siege做压力测试,参数是300个并发并且每个循环100次(并非一次结束),随机打开网站的某一个页面。所以实际压力还是有点大,CPU还是挺煎熬的。不过虽然知道在反向代理方面Nginx性能要比HAProxy差一些,但没想到差挺多的。可能是我设置的问题,但是我也尝试了很多种方法调整,但并没有好的结果。
比如您是如何给每个节点进行供电的,之前看视频的时候猜想是 csps 引出12V供电再通过dcatx给主板,这样的话不是很明白每个节点的硬盘是如何处理的。另外就是您是使用的无盘还是其他方案呢
近期评论