Mariadb Galera Cluster 部署

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

不同于标准的MySQL服务器和MySQL集群,MySQL / MariaDB Galera集群在启动方式上有一些细小的区别。Galera需要在集群启动一个节点作为参考点,剩余的节点才能加入形成集群。这个过程被称为集群引导。引导是一个初始步骤,引导数据库节点作为主节点,其它节点将主节点作为参考点同步数据。


启动集群

在三台机器上安装mariadb,并做初始化配置。在第一台节点上修改/etc/my.cnf.d/server.cnf 的内容,在[galera]部分添加集群配置:

1

2

3

4

5

6

7

8

9

10

11

12

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address='gcomm://'    #第一个启动节点配置

wsrep_cluster_name='mariadb_cluster'

wsrep_node_address='192.168.0.56'   #本机IP地址

wsrep_node_name='mariadb_node1'    #集群节点名称

wsrep_sst_method=rsync

  

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0


在第二台和第三台节点上配置/etc/my.cnf.d/server.cnf 文件的[galera]部分:

1

2

3

4

5

6

7

8

9

10

11

12

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address='gcomm://192.168.0.56,192.168.0.58'

wsrep_cluster_name='mariadb_cluster'

wsrep_node_address='192.168.0.57'

wsrep_node_name='mariadb_node2'

wsrep_sst_method=rsync

  

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0


1

2

3

4

5

6

7

8

9

10

11

12

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address='gcomm://192.168.0.56,192.168.0.57'

wsrep_cluster_name='mariadb_cluster'

wsrep_node_address='192.168.0.58'

wsrep_node_name='mariadb_node3'

wsrep_sst_method=rsync

  

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

如果要启动Mariadb Galera Cluster ,首先选择node1节点为初始节点,将node1作为第一个启动节点,并且设置gcomm为空,否则无法启动。

1

wsrep_cluster_address='gcomm://'

nide1启动命令(不同版本的不同启动方式):

$ service mysql bootstrap # sysvinit

$ service mysql start --wsrep-new-cluster # sysvinit

$ galera_new_cluster # systemd

$ mysqld_safe --wsrep-new-cluster # command line


node1启动之后,依次启动node2和node3. 之后修改node1 "wsrep_cluster_address"配置,添加上其它集群节点IP.

1

$ systemctl start mariadb

查看系统端口是否存在,默认情况下系统会监听3306,4567端口。

登录数据库,查看集群节点是否加入:

1

MariaDB [(none)]> SHOW STATUS LIKE"wsrep_cluster_size";

1

2

3

4

5

+--------------------+-------+

| Variable_name   | Value |

+--------------------+-------+

| wsrep_cluster_size | 3   |

+--------------------+-------+

可以通过 wsrep_cluster_status 和 wsrep_local_state_comment 查看节点的同步状态。

1

2

3

4

5

6

7

MariaDB [(none)]> show status like "wsrep_cluster_status";

+----------------------+---------+

| Variable_name     | Value   |

+----------------------+---------+

| wsrep_cluster_status | Primary |

+----------------------+---------+

1 row in set (0.00 sec)

1

2

3

4

5

6

7

MariaDB [(none)]> show status like "wsrep_local_state_comment";

+---------------------------+--------+

| Variable_name          | Value  |

+---------------------------+--------+

| wsrep_local_state_comment | Synced |

+---------------------------+--------+

1 row in set (0.00 sec)


警告:对一个已存在的集群添加新的节点时,不要使用引导的方式(bootstrap)启动这个节点,不能在一个集群中使用两个引导节点。


故障恢复和重启集群


当我们的mariadb Galera Cluster集群需要重启(意外宕机)时,未来保证数据的完整性,选择合适的主节点作为引导启动节点非常重要,如果启动顺序不正确可能会造成数据丢失或者无法启动。


当Galera以节点上的引导命令启动时该   特定节点将到达主状态(检查wsrep_cluster_status的值)。其余的节点只需要一个正常的启动命令,它们将自动查找集群中的现有主组件(PC)并加入组成一个集群。然后,数据同步通过加速器和供体之间的增量状态转移(IST)或快照状态转移(SST)发生。


因此,基本上,如果要启动新集群或集群中没有其他节点处于PRIMARY状态,则应仅引导集群。在选择采取的行动时应该小心,否则可能会导致拆分集群或丢失数据。  


如果集群中主节点运行正常,我们只需要正常启动其他节点。所以做关键的一点是在集群全部宕机之后,我们要找到最后一个退出集群,并且数据是最完整的节点。通过启动这个节点,其他节点启动之后与这个节点同步数据才能保证数据库集群的数据不丢失。


参考文档:  

https://severalnines.com/blog/how-bootstrap-mysqlmariadb-galera-cluster





本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1922986

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
什么是阻抗匹配?如何在设计中使用阻抗匹配变压器
如果你是一名 RF 设计工程师或任何使用过无线电的人,那么“阻抗匹配”一词应该不止一次让你印象深刻。该术语至关重要,因为它直接影响传输功率,从而影响我们无线电模块的范围。本文旨在帮助您从基础了解什么是阻抗匹配,并帮助您使用最常用的阻抗匹配变压器设计自己的阻抗匹配电路。所以,一起来了解下吧。
6101 1
什么是阻抗匹配?如何在设计中使用阻抗匹配变压器
|
3月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
699 139
|
5月前
|
存储 SQL 大数据
告别 Count Distinct 慢查询:StarRocks 高效去重全攻略
在大数据分析中,去重计算(如 Count Distinct)因高计算开销常成为性能瓶颈,尤其在高基数和高并发场景下更为明显。本文以 StarRocks 为分析平台,深入探讨多种去重优化策略,包括使用函数、数据类型转换(如 String 转 Int)、高效数据结构(如 Bitmap 和 HLL),以及物化视图的预计算方案。通过实际案例分析,对比不同方法在性能、精度和易用性方面的优劣,帮助用户在不同业务场景下选择最合适的优化手段。此外,文章还详细解析了如何结合 SQL 查询构建物化视图,以提升去重计算效率,并讨论了精确与近似去重的适用场景。最终目标是为复杂数据分析提供高效、灵活的解决方案。
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
1275 0
|
机器人 异构计算 SoC
实例2:树莓派GPIO控制外部LED灯闪烁
本文是一个关于使用树莓派GPIO控制外部LED灯闪烁的实验教程,介绍了树莓派的基本概念、GPIO接口的使用、RPi.GPIO库的基本操作,以及通过Python编程实现LED灯周期性闪烁的详细步骤和代码示例。
599 1
实例2:树莓派GPIO控制外部LED灯闪烁
|
NoSQL 安全 Redis
AWS迁移教程,Redis迁移到Elasticache
AWS迁移教程,Redis迁移到Elasticache
|
机器学习/深度学习 人工智能 运维
将VAE用于时间序列:生成时间序列的合成数据
变分自编码器(VAEs)是一种生成式人工智能,因其能够创建逼真的图像而备受关注,它们不仅可以应用在图像上,也可以创建时间序列数据。标准VAE可以被改编以捕捉时间序列数据的周期性和顺序模式,然后用于生成合成数据。本文将使用**一维卷积层**、**策略性的步幅选择**、**灵活的时间维度**和**季节性依赖的先验**来模拟温度数据。
331 2
将VAE用于时间序列:生成时间序列的合成数据
|
Java 关系型数据库 MySQL
JPA中实体类属性相关注解与数据表列映射详解
JPA中实体类属性相关注解与数据表列映射详解
813 0
|
Java C# 决策智能
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(下)
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(下)
|
存储 关系型数据库 块存储
带你读《存储漫谈:Ceph原理与实践》——2.3.2 PG 的状态机
带你读《存储漫谈:Ceph原理与实践》——2.3.2 PG 的状态机