转载

GALERA ARBITRATOR - 数据库多主集群对应脑裂的解决方案

GALERA ARBITRATOR

因为 Galera 集群需要至少3个节点组成集群,才不会发生脑裂状况。

Galera 集群部署推荐的是至少三个实例或三个节点或三个数据中心等等。

如果添加一个节点会成本太高,比如添加多一台数据库服务器,那你可以选择使用 Galera ArbitratorGalera Arbitrator 就是集群中的一份子,可以参与投票,但不参与实际的复制。

注意:虽然 Galera Arbitrator 不参与复制,但它和其他节点一样也会接受数据。你必须确保他的网络连接。

Galera Arbitrator 有两个用途:

  • 当集群为偶数节点时,它的加入以避免脑裂的发生。

  • 同时它能够用于备份,例如快照功能。

GALERA ARBITRATOR - 数据库多主集群对应脑裂的解决方案

如果一个数据中心失败或者是断开连接,并且它与 Galera Arbitrator 是接连的话,那 Galera Arbitrator 就会作为中间件的扩展。例如 node1node2 是断开连接的,此时若 node1Galera Arbitratornode2Galera Arbitrator 连接的话,那 Galera Arbitrator 作为中间件将会为 node1node2 连接通信。

尽管 Galera Arbitrator 不存储数据,但它必须可以看到所有的流量的传输复制。如果 Galera Arbitrator 放在一个网络环境较差的地方,那它连接到集群的时候,可能会导致集群执行或性能下降。

如果 Galera Arbitrator 失败的话,它不会影响集群的正常操作。你可以将一个新的实例加入到集群中,可以有多个实例运行在集群中。

有关 Galera Arbitrator 备份的设置,可参考 Galera 集群备份

STARTING GALERA ARBITRATOR

Galera ArbitratorGalera 集群中是一个单独的进程。这意味着,你需要独立启动它。这也意味着你不能通过数据库配置文件的方式来启动,比如不能通过 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 

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

原文  https://segmentfault.com/a/1190000005370057
正文到此结束
Loading...