千家信息网

Mariadb Galera Cluster 部署

发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,不同于标准的MySQL服务器和MySQL集群,MySQL / MariaDB Galera集群在启动方式上有一些细小的区别。Galera需要在集群启动一个节点作为参考点,剩余的节点才能加入形成集群。这
千家信息网最后更新 2025年01月28日Mariadb Galera Cluster 部署

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


启动集群

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

wsrep_on=ONwsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_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=rowdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2bind-address=0.0.0.0


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

wsrep_on=ONwsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_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=rowdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2bind-address=0.0.0.0


wsrep_on=ONwsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_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=rowdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2bind-address=0.0.0.0

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

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.

$ systemctl start mariadb

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

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

MariaDB [(none)]> SHOW STATUS LIKE"wsrep_cluster_size";
+--------------------+-------+| Variable_name   | Value |+--------------------+-------+| wsrep_cluster_size | 3   |+--------------------+-------+

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

MariaDB [(none)]> show status like "wsrep_cluster_status";+----------------------+---------+| Variable_name     | Value   |+----------------------+---------+| wsrep_cluster_status | Primary |+----------------------+---------+1 row in set (0.00 sec)
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状态,则应仅引导集群。在选择采取的行动时应该小心,否则可能会导致拆分集群或丢失数据。

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

1、找到最后一个停机的节点(seqno 数字最高的节点为下一次启动的主节点,应该首先启动):

# cat /maria-data/mysql/grastate.dat # GALERA saved stateversion: 2.1uuid:    8736f68d-0af7-11e7-aba5-9a9e6a4d342cseqno:   15safe_to_bootstrap: 0

提示: 如果所有的节点都是seqno的值都为-1,而且我们知道哪一个节点的优先级高,那么我们可以手动指定此节点为引导节点,修改grastate.dat文件的safe_to_bootstrap =1,然后启动此节点。


2、如果所有节点因为突然宕机导致数据库停止,我们需要找到数据同步最完整的节点作为启动节点,可以在每个节点上使用如下命令:

$ mysqld --wsrep-recover...2016-11-18 01:42:15 36311 [Note] InnoDB: Database was not shutdown normally!2016-11-18 01:42:15 36311 [Note] InnoDB: Starting crash recovery....2016-11-18 01:42:16 36311 [Note] WSREP: Recovered position: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f:114428...


提示信息中,在Recovered position 后所指定的ID,就是我们需要首先启动的数据库节点。修改此节点grastate.dat 配置文件 "safe_to_bootstrap: 1",启动此节点即可。





参考文档:

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

http://galeracluster.com/documentation-webpages/restartingcluster.html


节点 集群 数据 配置 数据库 状态 同步 命令 文件 方式 参考 选择 不同 端口 系统 部分 三台 保证 提示 合适 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全对经济的意义 江阴中科曙光服务器维修服务站 计算机网络技术会变老 原神国际服改服务器 网络安全平台动态口令 小学课堂网络安全教育课题 使用代理服务器会泄露信息吗 网络安全建设效果 我的世界手机版定位服务器进不去 软件测试对应软件开发阶段 网络安全教育上下功夫 数据怎么来的怎么连接的数据库 锡山区软件开发差异 华为软件开发外包公司有哪些 软件开发项目汇报模板 中科大网络安全作业 深圳皇家网络技术 mysql复制行数据库 网络安全事故情况说明 图片处理算法软件开发 黎明杀机加速什么服务器好 锡林郭勒软件开发 如何新建学生管理数据库 新乡市红旗区悦动网络技术 互联网综合金融科技有限公司 网络安全自律计划书 无线网卡域名服务器设置 互联网产业科技创新大会 广州服务贸易数据库官网 网民如何网络安全防范
0