失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Linux 搭建 MariaDB Galera Cluster 高可用集群

Linux 搭建 MariaDB Galera Cluster 高可用集群

时间:2023-05-03 07:46:38

相关推荐

Linux 搭建 MariaDB Galera Cluster 高可用集群

MariaDB Galera Cluster 集群介绍

MariaDB Galera Cluster(下文简称MGC集群),是一套在MySQL innodb存储引擎上面实现多主、数据实时同步以及强一致性的关系存储架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去,在数据方面完全兼容 MariaDB 和 MySQL。

MGC 是基于 Galera 协议的高可用方案:

Galera 是 Codership 提供的多主数据同步复制机制,可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据一致性。MGC 集群是由节点组成的,推荐配置至少 3 个节点,但是也可以运行在 2 个节点上。每个节点都包含完整的数据副本。

MGC 最大的优势:强一致性、无同步延迟

MGC 的优点:

1、同步复制 Synchronous replication

2、Active-active multi-master 拓扑逻辑

3、可对集群中任一节点进行数据读写

4、自动成员控制,故障节点自动从集群中移除

5、自动节点加入

6、真正并行的复制,基于行级

7、直接客户端连接,原生的 MySQL 接口

8、每个节点都包含完整的数据副本

9、多台数据库中数据同步由 wsrep 接口实现

MGC 的缺点:

1、目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制,因此创建用户将会被复制,但是insert intomysql.user…将不会被复制

2、DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.

3、在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…

4、查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。

5、允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。

6、由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

7、XA事务不支持,由于在提交上可能回滚。

8、整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

9、集群节点建议最少3个。

10、如果DDL语句有问题将破坏集群。

MGC 原理描述

MGC 会使用大概4 个端口号

3306:数据库对外服务的端口号

4444:请求 SST。 SST: 指数据镜象传输端口,使用方法 xtrabackup , rsync ,mysqldump

4567: 组成员之间进行沟通的一个端口号

4568: 传输 IST 用的。相对于 SST 来说的一个增量。

PXC 的架构示意图

部署 MGC 高可用集群

集群 统一使用CentOS 7.9

首先配置好主机名、静态IP、关闭 firewalld 防火墙、SElinux、交换分区 swap、修改内核参数、配置阿里云 repo 源、配置时间同步等等

安装 MGC 集群

Installing MariaDB with yum/dnf - MariaDB Knowledge Base

MGC 属于 Multi-master Replication(多主复制)。多主复制意味着支持对任意节点的读写,数据会同步复制到其他节点。

配置 yum 源

分别在mysql1 、mysql2 和 mysql3 上做如下操作:

vim /etc/yum.repos.d/MariaDB.repo

[mariadb]name = MariaDBbaseurl = /10.7/centos7-amd64gpgkey=/RPM-GPG-KEY-MariaDBgpgcheck=1或者使用国内yum源[mariadb]name=mariadbbaseurl=https://mirrors.tuna./mariadb/yum/10.7/centos7-amd64/gpgkey=/RPM-GPG-KEY-MariaDBgpgcheck=1

导入 KEY

rpm --import /RPM-GPG-KEY-MariaDB

#安装 qpress

yum -y install /yum/release/7/RPMS/x86_64/qpress-11-1.el7.x86_64.rpm

yum -y install MariaDB-server galera-4 MariaDB-client MariaDB-shared MariaDB-backup MariaDB-common MariaDB-server-debuginfo MariaDB-client-debuginfo MariaDB-shared-debuginfo MariaDB-backup-debuginfo MariaDB-common-debuginfo

修改数据库 root 密码

三个节点都安装完软件包之后,接下来只对第一个节点 mysql1 进行修改密码操作。

#先启动 maridbd服务。

systemctl start mysqld

使用空密码登录 MySQL

mysql -u root -p

更改 root 用户的密码,之后退出。

mysql> alter user 'root'@'localhost' identified by 'NEWPASSWORD';

mysql> exit

关闭 MySQL 服务。

systemctl stop mysqld

注意:以上修改密码操作只需在第一个节点进行即可。配置好第二个和第三个节点,启动服务操作后会自动复制到其他节点中。

mysql2和 mysql3上的 mysql 服务,现在不需要启动。

配置 MGC 集群第 1 个节点

配置第一个节点 mysql1 的 /etc/f.d/f

vim /etc/f.d/f

[client]socket=/var/lib/mysql/mysql.sock[mysqld]server-id=1datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socklog-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidbinlog_expire_logs_seconds=604800skip-external-lockingskip-name-resolvemax_connections=5000connect_timeout=5wait_timeout=600max_allowed_packet=16Mthread_cache_size=128sort_buffer_size=4Mbulk_insert_buffer_size=16Mtmp_table_size=32Mmax_heap_table_size=32Mcharacter-set-client-handshake = FALSEcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'wsrep_causal_reads=ONwsrep_provider_options="gcache.size=128M"wsrep_certify_nonPK=ONlog-bin=/data/mariadb/data/mysql-binlog_slave_updates=1query_cache_size=0wsrep_on=ONwsrep_provider=/usr/lib64/galera-4/libgalera_smm.sowsrep_cluster_name=MGC-Clusterwsrep_cluster_address=gcomm://192.168.1.231,192.168.1.232,192.168.1.233wsrep_node_name=mysql1wsrep_node_address=192.168.1.231wsrep_sst_method=xtrabackup-v2wsrep_sst_method=rsyncbinlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2wsrep_slave_threads=8innodb_flush_log_at_trx_commit=0innodb_buffer_pool_size=500M

/etc/f.d/f 增加的参数说明:

# 集群通讯地址

wsrep_cluster_address=gcomm://192.168.1.231,192.168.1.232,192.168.1.233

# 本节点的地址

wsrep_node_address=192.168.1.231

# 本节点的名称

wsrep_node_name= mysql1

这些内容也同样对 mysql2.和 mysql3 进行配置,只有两个参数wsrep_node_name, wsrep_node_address配置的值需要修改一下

扩展:主配置文件 f 其他参数说明

wsrep_provider #指定 Galera 库的路径。

wsrep_cluster_name #指定集群的逻辑名称,集群内的所有节点,这个名称必须一致。

wsrep_cluster_address #指定集群内节点的 IP 地址,建议将集群节点都配上。

wsrep_node_name #指定单个节点的逻辑名称,如果没有指定,将使用 hostname 作为逻辑名称。

wsrep_node_address #指定此特定节点的 IP 地址。

wsrep_sst_method #默认的使用 Percona Xtrabackup 进行 State Snapshot Transfer

(SST),强烈建议使用 wsrep_sst_method=xtrabackup-v2

binlog_format #Galera 只支持 row-level replication,默认设置为 binlog_format=ROW。

innodb_autoinc_lock_mode #Galera 只支持 lock mode 为 2 的 InnoDB 引擎,默认设置为 innodb_autoinc_lock_mode=2。

引导 GRC 集群启动并将其他节点加到集群中

1、在第一个节点上引导 GRC 集群启动

在第一个节点 mysql1 使用如下命令引导 PXC 集群启动

galera_new_cluster

为确保初始化完成,可以使用如下命令查看

登录 MySQL

mysql -u root -p

mysql> show status like 'wsrep%';

可以看到集群数量是 1,本节点为Synced状态,表示连接成功,并且准备好进行 write-setreplication。

注意:所有其他节点的数据和配置都会被第一个节点的数据覆盖,不要同时加入多个节点,避免数据或网络开销过大。等一个节点加入成功后,再加入另一个新节点。

启动第二个节点

systemctl start mysqld

启动完成后,mysql2 会接到 mysql1的数据,可以使用如下命令查看状态

mysql -u root -p

登录到 MySQL 后,输入如下命令

mysql> show status like 'wsrep%';

可以看到 wsrep_cluster_size 的值是 2 表示集群已经有 2 个节点了。

wsrep_local_state_comment 的值是 Synced 表示已经同步了。

注意 如果 wsrep_local_state_comment 的状态是 Joiner,表示正在同步,请不要启动第三个节点的服务。

启动第三个节点

注意:确认好第二个节点的状态为Synced后,再启动第三个节点。

步骤与启动第二个节点相同

systemctl start mysqld

启动完成后,mysql3会接到集群,可以使用如下命令查看状态

mysql -u root -p

登录到 MySQL 后,输入如下命令

mysql> show status like 'wsrep%';

测试数据同步

在 mysql3 上删除 test 库

drop database test;

模拟故障

测试 单点故障

首先停止 mysql3

在 mysql2 上观察停止 mysql1

测试 全部故障

这时候直接 start 发现无法启动

因为是同时关闭,seqno 号无法提供有效的信息,无从判断最后的有效节点

在任意节点

模拟 2台故障

MGC 集群只有有任意节点存活,其他节点即可加入。

seqno 选择数值大的优先启动

全新节点加入

配置好主机名、静态IP、关闭 firewalld 防火墙、SElinux、交换分区 swap、修改内核参数、配置阿里云 repo 源、配置时间同步等等所有节点都要添加 新节点的 IP和主机名

准备工作做完后,在新节点安装 MGC

yum -y install MariaDB-server MariaDB-Galera-server galera-4 MariaDB-client MariaDB-shared MariaDB-backup MariaDB-common MariaDB-server-debuginfo MariaDB-client-debuginfo MariaDB-shared-debuginfo MariaDB-backup-debuginfo MariaDB-common-debuginfo启动 mysql加入 slave 节点

创建 slave 复制用户

垣份手游 娱乐平台-手游公益服

如果觉得《Linux 搭建 MariaDB Galera Cluster 高可用集群》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。