Mariadb Galera Cluster 部署
admin
2023-03-24 17:41:39
0次

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


启动集群

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

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]部分:

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


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为空,否则无法启动。

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 state
version: 2.1
uuid:    8736f68d-0af7-11e7-aba5-9a9e6a4d342c
seqno:   15
safe_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 


上一篇:memcache配置

下一篇:用lnmp搭建discuz论坛

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...