在龙芯3A2000C Debian平台配置两节点双活Maria Galera Cluster

准备

软件版本

在安装前需要确定要安装的目标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_limitgcs.recv_q_soft_limitgcs.max_throttle

假设

在安装配置前,做如下假设:

  • 需要配置的集群有两个数据库服务器节点;
  • 为了避免集群脑裂,Galera需要有至少三个节点,因此需要加入一个仅作仲裁使用的仲裁节点;
  • 三个节点的IP地址分别如下:
节点角色 节点名称 IP地址
数据库 RetroFire 192.168.1.11
数据库 RetroEarth 192.168.1.12
仲裁 RetroMetal 192.168.1.13

安装

数据库节点

登录数据库节点服务器,在Debian系统上使用如下命令安装MariaDBGalera 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 mariadbsudo systemctl start mariadb命令来退出或加入节点。

12 thoughts on “在龙芯3A2000C Debian平台配置两节点双活Maria Galera Cluster

  1. 很喜欢老师视频,学到很多东西。不知道老师如何进行压力测试的,感觉并发度只有300,似乎有点过低。。。不知道瓶颈在那里。。此致敬礼

    1. 我用siege做压力测试,参数是300个并发并且每个循环100次(并非一次结束),随机打开网站的某一个页面。所以实际压力还是有点大,CPU还是挺煎熬的。不过虽然知道在反向代理方面Nginx性能要比HAProxy差一些,但没想到差挺多的。可能是我设置的问题,但是我也尝试了很多种方法调整,但并没有好的结果。

  2. up您好,看过您的视频我也想在我所学的领域来一个power by loongson,组建一个集群。集群硬件方案可以请您指个路嘛,包括系统供电问题,硬盘问题。

      1. 比如您是如何给每个节点进行供电的,之前看视频的时候猜想是 csps 引出12V供电再通过dcatx给主板,这样的话不是很明白每个节点的硬盘是如何处理的。另外就是您是使用的无盘还是其他方案呢

        1. 很简单的,服务器电源12V输出的总功率能达到600W,所以我把它输出给5台设备,每台设备用一个最大功率100W的DC-ATX电源模块将12V电源转为ATX供电即可。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据