部署 MariaDB Galera Cluster 数据库集群( OS:Centos 7.9.2009 )( MariaDB:10.11.5-MariaDB-log )

MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。

MariaDB Galera Cluster 介绍

MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎(虽然有对MyISAM实验支持 – 看wsrep_replicate_myisam系统变量)。

主要功能:

1、同步复制
2、真正的multi-master,即所有节点可以同时读写数据库
3、自动的节点成员控制,失效节点自动被清除
4、新节点加入数据自动复制
5、真正的并行复制,行级
6、用户可以直接连接集群,使用感受上与MySQL完全一致

优势:

1、因为是多主,所以不存在Slavelag(延迟)
2、不存在丢失事务的情况
3、同时具有读和写的扩展能力
4、更小的客户端延迟
5、节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

技术:

Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。

Galera插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制。

当客户端发出一个commit的指令,在事务被提交之前,所有对数据库的更改都会被write-set收集起来,并且将 write-set 纪录的内容发送给其他节点。

write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。

如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。

安装

安装环境准备

安装MariaDB集群至少需要3台服务器(如果只有两台的话需要特殊配置,请参照官方文档)
在这里,我列出试验机器的配置:
操作系统版本:CentOS]7.9

MariaDB-Galra-Cluster-1:172.30.88.112

MariaDB-Galra-Cluster-2:172.30.88.113

MariaDB-Galra-Cluster-3:172.30.88.114

修改/etc/hosts文件

echo "
172.30.88.112 MariaDB-Galra-Cluster-1
172.30.88.113 MariaDB-Galra-Cluster-2
172.30.88.114 MariaDB-Galra-Cluster-3
" >> /etc/hosts

为了保证节点间相互通信,需要禁用防火墙设置(如果需要防火墙,则参照官方网站增加防火墙信息设置)

systemctl disable firewalld --now

然后将/etc/sysconfig/selinuxselinux 设置成 disabled ,这样初始化环境就完成了。

安装 MariaDB

编辑/etc/yum.repos.d/MariaDB.repo文件

# MariaDB 10.11 CentOS repository list - created 2023-08-23 09:49 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/10.11/centos/$releasever/$basearch
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.11/centos/$releasever/$basearch
module_hotfixes = 1
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1

安装

yum install -y MariaDB-server MariaDB-client

可能会报错,需要pv依赖包

yum install -y epel-release

安装 MariaDB Galera Cluster

yum install galera rsync

配置 MariaDB Galera Cluster

systemctl start mariadb
# mysql_secure_installation (这个在10.11.5-MariaDB版本中没有)
systemctl stop mariadb

在各个结点上进行Cluster的安装配置

MariaDB-Galra-Cluster-1

编辑/etc/my.cnf.d/server.cnf

# this is only for the mysqld standalone daemon
[mysqld]
skip_name_resolve=ON
relay_log=mysql-relaylog
relay_log_index=mysql-relaylog
relay_log_purge=OFF
slow_query_log=ON
server-id=10
innodb_file_per_table=ON
binlog_format=ROW
log_bin=node1-binlog
log_slave_updates=ON
expire_logs_days=10
max_binlog_size=50M

#
# * Galera-related settings
#
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://MariaDB-Galra-Cluster-1,MariaDB-Galra-Cluster-2,MariaDB-Galra-Cluster-3"
wsrep_node_name=MariaDB-Galra-Cluster-1
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
wsrep_cluster_name=“MariaDB_Cluster”
wsrep_node_address=172.30.88.112
##wsrep_sst_method=rsyn
#
# Optional setting
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=1024M
##wsrep_sst_auth=sstuser:sStUser_PassWd

MariaDB-Galra-Cluster-1节点数据库命令行执行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

FLUSH PRIVILEGES;

use mysql;
select user,host,password,plugin from user;

## 下面的语句暂时不执行
# create user 'sstuser'@'localhost' identified by 'sStUser_PassWd';
# grant reload, lock tables, replication client, process on *.* to 'sstuser'@'localhost';

MariaDB-Galra-Cluster-2

编辑/etc/my.cnf.d/server.cnf

# this is only for the mysqld standalone daemon
[mysqld]
skip_name_resolve=ON
relay_log=mysql-relaylog
relay_log_index=mysql-relaylog
relay_log_purge=OFF
slow_query_log=ON
server-id=20
innodb_file_per_table=ON
binlog_format=ROW
log_bin=node2-binlog
log_slave_updates=ON
expire_logs_days=10
max_binlog_size=50M

#
# * Galera-related settings
#
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://MariaDB-Galra-Cluster-1,MariaDB-Galra-Cluster-2,MariaDB-Galra-Cluster-3"
wsrep_node_name=MariaDB-Galra-Cluster-2
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
wsrep_cluster_name=“MariaDB_Cluster”
wsrep_node_address=172.30.88.113
##wsrep_sst_method=rsyn

#
# Optional setting
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=1024M
##wsrep_sst_auth=sstuser:sStUser_PassWd

MariaDB-Galra-Cluster-3

编辑/etc/my.cnf.d/server.cnf

# this is only for the mysqld standalone daemon
[mysqld]
skip_name_resolve=ON
relay_log=mysql-relaylog
relay_log_index=mysql-relaylog
relay_log_purge=OFF
slow_query_log=ON
server-id=30
innodb_file_per_table=ON
binlog_format=ROW
log_bin=node3-binlog
log_slave_updates=ON
expire_logs_days=10
max_binlog_size=50M

#
# * Galera-related settings
#
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://MariaDB-Galra-Cluster-1,MariaDB-Galra-Cluster-2,MariaDB-Galra-Cluster-3"
wsrep_node_name=MariaDB-Galra-Cluster-3
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
wsrep_cluster_name=“MariaDB_Cluster”
wsrep_node_address=172.30.88.114
##wsrep_sst_method=rsyn

在各个节点上启动Cluster

MariaDB-Galra-Cluster-1

/usr/sbin/mysqld --wsrep-new-cluster --user=mysql &

警告⚠:–wsrep-new-cluster 这个参数只能在初始化集群使用,且只能在一个节点使用。

出现 ready for connections ,证明我们启动成功,继续启动其他节点。

MariaDB-Galra-Cluster-2

systemctl restart mariadb

可以查看/var/log/mariadb/mariadb.log,在日志可以看到节点均加入了集群中。

MariaDB-Galra-Cluster-3

systemctl restart mariadb

可以查看/var/log/mariadb/mariadb.log,在日志可以看到节点均加入了集群中。

在各个节点上登录Cluster进行验证

任意节点登录数据库,得到以下结果说明Cluster成功

show status like "wsrep_cluster_size";
show status like "wsrep_%";

验证数据同步

我们在MariaDB-Galera-Cluster-1上新建数据库 galera_test ,然后在MariaDB-Galera-Cluster-2MariaDB-Galera-Cluster-3上查询,如果可以查询到 galera_test 这个库,说明数据同步成功,集群运行正常。

#  MariaDB-Galera-Cluster-1
mysql  -uroot  -proot  -e  "create database galera_test"

# MariaDB-Galera-Cluster-2
mysql  -uroot  -proot  -e  "show databases"

# MariaDB-Galera-Cluster-3
mysql  -uroot  -proot  -e  "show databases"

至此,我们的 MariaDB Galera Cluster 已经成功部署。

参考

Mariadb10 Galera 实验小结
https://blog.51cto.com/u_450955/2353245

MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)
https://www.duoluosb.com/324.html

mariadb galera集群如何启动第一个节点
http://blog.chinaunix.net/uid-77311-id-5766680.html

centos下 mysql/mariadb 开启允许用户远程访问。
https://www.cnblogs.com/guowenrui/p/17145659.html

ChiuYut

2023年08月26日

发布者

ChiuYut

咦?我是谁?这是什么地方? Ya ha!我是ChiuYut!这里是我的小破站!