Skip to content

MariaDB集群部署搭建指南

本搭建文档由 OpenCloudOS 社区用户裴志远编写及共创。

MariaDB 从 10.1 版本开始, 自带 Galera 集群方案插件, 这里我们主要通过 Galera 来实现 MariaDB 的多主集群部署。

一、服务器准备

为了便于描述,假设创建三台虚拟机(服务器)作为 MariaDB 集群节点:

192.168.0.11 mariadb-01

192.168.0.12 mariadb-02

192.168.0.13 mariadb-03

二、最小化安装 OpenCloudOS 9 系统并升级操作系统至最新版

执行命令,将操作系统更新至最新版:

sudo dnf update -y

三、安装 tar、MariaDB 及 Galera 软件包

MariaDB 不在系统预装范围内,需要通过如下命令安装 MariaDB Server 及 Galera:

sudo dnf install -y tar mariadb-server mariadb-server-galera

说明:OpenCloudOS 9 默认没有安装 tar,在数据同步中会使用 tar 命令,在数据库服务安装时要同时安装 tar。

四、配置 MariaDB 服务器

编辑 MariaDB 配置文件/etc/my.cnf.d/mariadb-server.cnf,添加以下内容:

vi /etc/my.cnf.d/mariadb-server.cnf

[galera]
log_bin=mysql-bin
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0 

#节点的名称
wsrep_node_name="192.168.0.11"
#节点的网络地址
wsrep_node_address="192.168.0.11"

#是否启用wsrep复制,默认值为OFF,如果要加入集群,需要开启设置为ON
wsrep_on=ON
#wsrep库的位置,不同系统路径稍有区别
wsrep_provider=/usr/lib64/galera/libgalera_smm.so 
#集群的名称,同一集群中所有节点的值都相等
wsrep_cluster_name="my_galera_cluster" 
#启动时要连接集群节点的地址
wsrep_cluster_address="gcomm://192.168.0.11,192.168.0.12,192.168.0.13"
#用于进行状态快照传输的方式,默认值rsync
wsrep_sst_method=rsync

其他集群服务器只修改 wsrep_node_name、wsrep_node_address 值,其他保持一致。

五、配置防火墙

防火墙开发以下端口:

4567:是 Galera 做数据复制的通讯和数据传输端口,需要在防火墙放开 TCP 和 UDP

4568:是 Galera 做增量数据传输使用的端口(Incremental State Transfer, IST),需要防火墙放开 TCP

4444:是 Galera 做快照状态传输使用的端口(State Snapshot Transfer, SST),需要防火墙放开 TCP

3306:数据库访问端口,需要防火墙放开 TCP

firewall-cmd --permanent --add-port=4567/udp &&
firewall-cmd --permanent --add-port=4567/tcp &&
firewall-cmd --permanent --add-port=4568/tcp &&
firewall-cmd --permanent --add-port=4444/tcp &&
firewall-cmd --permanent --add-port=3306/tcp &&
firewall-cmd --reload

六、关闭 selinux

需要关闭 selinux,否则主节点同步会出现错误,执行如下命令:

vi /etc/selinux/config

修改内容:

SELINUX=disabled

七、集群启动

第一个节点设置服务开机自行启动并启动:

systemctl enable mariadb
galera_new_cluster

其余节点:

systemctl enable mariadb
systemctl start mariadb

如其余节点启动失败时,先查询 grastate.dat 文件信息:

vi /var/lib/mysql/grastate.dat

如果文件为空,可先运行一次 galera_new_cluster,启动后停止数据库服务,此时会生成 grastate.dat 文件,修改 seqno 值为 1,safe_to_bootstrap 值为 0。

# GALERA saved state
version: 2.1
uuid:    f9f2b746-530c-11ef-ae22-97ac8e0e3d4e
seqno:   1
safe_to_bootstrap: 0

重新启动:

systemctl start mariadb

备注:首次加入集群数据库启动时间较长,需耐心等待。建议设置数据库服务自动启动后,重启服务器,等待数据同步后集群服务配置完成。

八、测试集群

登录数据库:

mysql -u root -p

使用 show status like 'wsrep_cluster_size';查看集群节点数:

MariaDB [(none)]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

表示有 3 个节点在运行

九、重启集群

集群服务器全部关闭后再次启动,需要修改集群状态文件。在任一主机上,打开 /var/lib/mysql/grastate.dat 文件,修改 seqno 值为 1,safe_to_bootstrap 值为 1:

vi /var/lib/mysql/grastate.dat

# GALERA saved state
version: 2.1
uuid:    f9f2b746-530c-11ef-ae22-97ac8e0e3d4e
seqno:   1
safe_to_bootstrap: 1

重新启动集群:

galera_new_cluster

其他主机修改 seqno 值为 1,safe_to_bootstrap 值为 0:

# GALERA saved state
version: 2.1
uuid:    f9f2b746-530c-11ef-ae22-97ac8e0e3d4e
seqno:   1
safe_to_bootstrap: 0

重新启动:

systemctl start mariadb