高可用实施遇到的脑裂问题?

在实施高可用的过程当中,一般会采用主备或多活的情况,无论是主备或多活都需要有仲裁机制,本人在实施RHCS和mariadb的galera集群都遇到脑裂的情况,出现这种主要是仲裁之间网络中断或不稳定导致,各位大神有没有好点的解决方案。

参与26

4同行回答

jxnxsdengyujxnxsdengyu课题专家组系统工程师江西农信
一是多配置仲裁网络,比如一个仲裁网络不够,再来一个仲裁网络。二是丰富仲裁方式的类型,比如节点间网络仲裁,和磁盘仲裁。通常HACMP都是有2种仲裁网络+磁盘仲裁,三个仲裁方式互相保护。...显示全部

一是多配置仲裁网络,比如一个仲裁网络不够,再来一个仲裁网络。
二是丰富仲裁方式的类型,比如节点间网络仲裁,和磁盘仲裁。
通常HACMP都是有2种仲裁网络+磁盘仲裁,三个仲裁方式互相保护。

收起
银行 · 2017-08-08
浏览2793
byethenbyethen系统工程师CMBC
凡是集群体系架构,脑裂问题应该都是不可逃避的问题。目前AIX平台HACMP的仲裁已经变成磁盘仲裁了,与数据访问是统一的,这种方式也是合理的,因为可以访问到数据也就意味着该节点可用,从而保证存活节点和能访问到数据的节点一致,不到导致资源争抢而产生数据的损坏。目前的开源集群...显示全部

凡是集群体系架构,脑裂问题应该都是不可逃避的问题。

  1. 目前AIX平台HACMP的仲裁已经变成磁盘仲裁了,与数据访问是统一的,这种方式也是合理的,因为可以访问到数据也就意味着该节点可用,从而保证存活节点和能访问到数据的节点一致,不到导致资源争抢而产生数据的损坏。
  2. 目前的开源集群软件,基本通过其它机制已经可以规避脑裂问题,比如zookeeper的从众机制,必须大于一半以上的节点投票。
    3.HA的锁机制,对于数据磁盘上锁,也可以有效规避在出现脑裂时可能产生的后果。
收起
银行 · 2017-08-08
浏览2566
zwz99999zwz99999系统工程师dcits
ls基本都回答了,在实现高可用性架构时,脑裂问题都要提前规划预防,目前的ha架构多半是采用磁盘作为仲裁盘了,如果集群中节点个数为2个多半是采用磁盘作为仲裁盘,如果节点个数多于两个以上建议检查节点作为仲裁,像ibm 的gpfs就是这种方式!...显示全部

ls基本都回答了,在实现高可用性架构时,脑裂问题都要提前规划预防,目前的ha架构多半是采用磁盘作为仲裁盘了,如果集群中节点个数为2个多半是采用磁盘作为仲裁盘,如果节点个数多于两个以上建议检查节点作为仲裁,像ibm 的gpfs就是这种方式!

收起
系统集成 · 2017-08-08
浏览2680
y18511664518y18511664518技术总监长城超云
GALERA ARBITRATOR因为Galera集群需要至少3个节点组成集群,才不会发生脑裂状况。Galera集群部署推荐的是至少三个实例或三个节点或三个数据中心等等。如果添加一个节点会成本太高,比如添加多一台数据库服务器,那你可以选择使用Galera Arbitrator。Galera Arbitrator就是集群...显示全部

GALERA ARBITRATOR
因为Galera集群需要至少3个节点组成集群,才不会发生脑裂状况。
Galera集群部署推荐的是至少三个实例或三个节点或三个数据中心等等。
如果添加一个节点会成本太高,比如添加多一台数据库服务器,那你可以选择使用Galera Arbitrator。Galera Arbitrator就是集群中的一份子,可以参与投票,但不参与实际的复制。
注意:虽然Galera Arbitrator不参与复制,但它和其他节点一样也会接受数据。你必须确保他的网络连接。
Galera Arbitrator有两个用途:
• 当集群为偶数节点时,它的加入以避免脑裂的发生。
• 同时它能够用于备份,例如快照功能。
111111.png

111111.png

如果一个数据中心失败或者是断开连接,并且它与Galera Arbitrator是接连的话,那Galera Arbitrator就会作为中间件的扩展。例如node1与node2是断开连接的,此时若node1与Galera Arbitrator、node2与Galera Arbitrator连接的话,那Galera Arbitrator作为中间件将会为node1与node2连接通信。
尽管Galera Arbitrator不存储数据,但它必须可以看到所有的流量的传输复制。如果Galera Arbitrator放在一个网络环境较差的地方,那它连接到集群的时候,可能会导致集群执行或性能下降。
如果Galera Arbitrator失败的话,它不会影响集群的正常操作。你可以将一个新的实例加入到集群中,可以有多个实例运行在集群中。
有关Galera Arbitrator备份的设置,可参考Galera 集群备份
STARTING GALERA ARBITRATOR
Galera Arbitrator在Galera集群中是一个单独的进程。这意味着,你需要独立启动它。这也意味着你不能通过数据库配置文件的方式来启动,比如不能通过my.cnf启动。
Galera Arbitrator在启动的时候,脚本会在无人使用的进程中执行sudo声明,有一个特定问题在Fedora和其他版本的Linux中,这默认用户没有操作sudo配置的权限。要修正这个问题需要编辑/etc/sudoers中的Defaults requiretty,把这个注释掉即可。这样就可以防止操作系统阻塞Galera Arbitrator。
Starting Galera Arbitrator from the Shell
当开始通过shell命令执行Galera Arbitrator的时候,首先你需要通过命令行参数配置。例如:
$ garbd --group=example_cluster \

 --address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3" \\
 --option="socket.ssl_key=/etc/ssl/galera/server-key.pem;socket.ssl_cert=/etc/ssl/galera/server-cert.pem;socket.ssl_ca=/etc/ssl/galera/ca-cert.pem;socket.ssl_cipher=AES128-SHA""

如果你使用SSL的方式,则你需要输入密码。否则会有terminate called after throwing an instance of ‘gu::NotSet’的SSL提示。
如果你不想每次通过shell方式启动Galera Arbitrator,那你可以自定义配置文件中执行。
例如配置文件如下:

arbtirator.config

group = example_cluster
address = gcomm://192.168.1.1,192.168.1.2,192.168.1.3
当你开始启动Galera Arbitrator,使用--cfg选项。
例如:
$ garbd --cfg /path/to/arbitrator.config
更多的参数,可用过--help来查看帮助。
$ garbd --help

Usage: garbd [options] [group address]

Configuration:
-d [ --daemon ] Become daemon
-n [ --name ] arg Node name
-a [ --address ] arg Group address
-g [ --group ] arg Group name
--sst arg SST request string
--donor arg SST donor name
-o [ --options ] arg GCS/GCOMM option list
-l [ --log ] arg Log file
-c [ --cfg ] arg Configuration file

Other options:
-v [ --version ] Print version
-h [ --help ] Show help message
除了标准的配置,Galera集群中任何配置,都可用于Galera Arbitrator,除了那些repl前缀的命令。
当你从shell启动的话,你可以使用 --option 来设置参数。
更多Galera Arbitrator参数可参考Galera 参数
Starting Galera Arbitrator as a Service
当开始Galera Arbitrator服务时,无论你使用init或者systemd,通过shell命令,指定不同的配置文件,来启动不用的服务,以实现灵活启动。

Copyright (C) 2013-2015 Codership Oy

This config file is to be sourced by garbd service script.

A space-separated list of node addresses (address[:port]) in the cluster:

GALERA_NODES="192.168.1.1:4567 192.168.1.2:4567"

Galera cluster name, should be the same as on the rest of the node.

GALERA_GROUP="example_wsrep_cluster"

Optional Galera internal options string (e.g. SSL settings)

see http://galeracluster.com/documentation-webpages/galeraparameters.html

GALERA_OPTIONS="socket.ssl_cert=/etc/galera/cert/cert.pem;socket.ssl_key=/$"

Log file for garbd. Optional, by default logs to syslog

LOG_FILE="/var/log/garbd.log"
为了让Galera Arbitrator使用配置文件启动,需要你把他放到系统配置文件中,因操作系统发行版而异,而放到不同的地方,通常是放在/etc下。
通常位置:
• /etc/defaults/
• /etc/init.d/
• /etc/systemd/
• /etc/sysconfig/
检查你的发行版的来确定配置文件放在哪里。
一旦你把配置文件放到对的地方,你可以用garb命令来启动服务。

service garb start

或者

systemctl start garb

之后它会执行配置文件里面设置的参数来运行对集群的监听。
参考一下吧。

收起
金融其它 · 2017-08-08
浏览2579

提问者

ymzhong
系统架构师中信

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-08-08
  • 关注会员:5 人
  • 问题浏览:6207
  • 最近回答:2017-08-08
  • X社区推广