集群的分裂 
当集群由于网络原因分裂为几个单独的组时(一组可能是单节点,也可能是几个互联的节点),数据出现不一致,此时可能产生脑裂及数据不一致。这种情况 下,只有一组节点能够继续提供服务,这组节点的状态是primary。当这种状况发生时,galera cluster会启动特别的仲裁算法来选举一个组件作为primary组件。
cluster size决定了quorum仲裁的投票数(因此是单数比较好,避免产生脑裂——这扩展到其他的设备也是适用的,比如交换机、网络、数据中心,至少使用3 个),当一个节点不再有响应并被推测不再属于集群的时候,galera就会启动一次仲裁选举。可以使用evs.suspect_timeout来微调这个 no response timeout,默认设置是5秒。当galera进行选举时,大部分原来连接保持的节点所在的部分会作为主,但分裂后的节点都还是活着的。当分裂发生后, 获得加权仲裁的一组成为主,其他没货的权重的节点状态变为non-primary并尝试去连接主。
加权需要有“绝大部分”因此两个节点不能成为集群,如果一个faliure另一个也会自动成为non-primary状态

脑裂的情况
集群错误导致数据节点之间互相独立的情况称为脑裂。脑裂发生时,数据可能发生无可挽回的损坏,比如两个数据节点各自独立的更新了同一张表的同一行数 据。像其他基于权重的系统一样,当仲裁算法失效无法选出主节点时,galera集群也会出现脑裂。这种情况会发生在例如只有两个节点的cluster集群 或者在无备份交换机的情况下主交换机坏掉的时候。
为最小化偶数节点集群环境中发生脑裂的风险,要保证集群按照肯定能产生主的方式分开,例如4 node cluster -> 3 (Primary) + 1 (Non-primary)。可以在运行过程中对节点的权重作调整
SET GLOBAL wsrep_provider_options="pc.weight=3";
galera通过分发携带权重的消息来应用新的权重值,但并没有将这一变化通知应用的机制。但是注意!当改变权重消息发送的时刻,集群发生了分裂, 就会导致整个集群都变为non-primary。这种情况就只能等待重新合并或者查看那个部分是最新数据,然后把它当做第一个节点来重新启动。

node1: pc.weight = 2
node2: pc.weight = 1
node3: pc.weight = 0

三个节点按以上方法配置权重,如果同时kill节点2和节点3,节点1会成为主,但kill节点1,,2和3会变为non-primary

galera仲裁者Arbitrator
galera仲裁者是集群的一员,参与投票,但不真正参与复制。
galera仲裁者的设立出于以下两个目的:
1、偶数节点时,仲裁者作为一个节点使集群成为奇数,从而避免脑裂
2、它可以请求一个连续的应用状态快照,可用来做备份
尽管仲裁者不存数据,它必须能够流经所有的复制流,所以把仲裁者放在一个和其他节点网络连接差的网络环境里会导致整个cluster的性能变差。仲裁者倒了并不会影响cluster的操作,可以在任何时间挂一个新的节点上去

启动galera仲裁者
Galera Arbitrator是一个与cluster独立的进程,叫做garbd。这意味着必须单独启动它,同时也意味着不能通过my.cnf来配置仲裁者。如何 配置仲裁者取决于如何启动它。当仲裁者启动时,脚本在其过程中执行sudo语句作为用户nobody。但在Fedora和其他一些Linux分支版本中, 默认的sudo配置阻止了用户非tty连接的操作。为避免这一点,需要在/etc/sudoers文件中去掉Defaults requiretty这一行。
1、用shell启动仲裁者
用shell启动仲裁者,有两个选项来配置。首先可以通过命令行来设置参数

$ 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就需要设置密码。如果不想每次用shell启动仲裁者都输出这些项,可以在配置文件中设置想使用的选项

# arbtirator.configgroup = example_cluster
address = gcomm://192.168.1.1,192.168.1.2,192.168.1.3

然后启动仲裁者时使用--cfg

$ garbd --cfg /path/to/arbitrator.config

--help参数获取帮助

$ garbd --helpUsage: garbd [options] [group address]

2、以服务来启动仲裁者
当以服务的方式来启动仲裁者时,不管用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.htmlGALERA_OPTIONS="socket.ssl_cert=/etc/galera/cert/cert.pem;socket.ssl_key=/$"# Log file for garbd. Optional, by default logs to syslogLOG_FILE="/var/log/garbd.log"

这个配置文件需放在系统的服务配置文件目录下,常见的如/etc下。之后可启动garb服务。用init的:# service garb start 用systemd的,# systemctl start garb
除了标准配置,cluster集群的所有参数也都适用于仲裁者,除了那些以repl为前缀的。当用shell启动的时候,可以使用--option参数来设置。 

 

易维(深圳)科技有限公司

多维你的世界

微信:EVisYOJOY

微博:http://weibo.com/EVisYOJOY

官网:http://www.evister.com/

联系&投稿:service@evister.com

                                                                                       

mysql galera cluster 集群的分裂与仲裁机制的更多相关文章

  1. Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)

    (注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一  搭建环境: 1 Ubuntu16.04版本(系 ...

  2. 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇

    前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...

  3. Centos 7 下 Mysql 5.7 Galera Cluster 集群部署

     一.介绍 传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性 ...

  4. 一次galera cluster集群故障节点无法启动问题排查

    现象 环境: Server version: 10.0.25-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e 配置文件: [root@node-2 ...

  5. Mysql Innodb cluster集群搭建

    之前搭建过一个Mysql Ndb cluster集群,但是mysql版本是5.7的,看到官网上mysql8的还是开发者版本,所以尝试搭建下mysql Innodb cluster集群. MySQL的高 ...

  6. MariaDB Galera Cluster集群搭建

    MariaDB Galera Cluster是什么?   Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://g ...

  7. MariaDB Galera Cluster集群

    一.MariaDB Galera Cluster概要: 1.简述: MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步 ...

  8. 基于Galera Cluster多主结构的Mysql高可用集群

    Galera Cluster特点 1.多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的 2.同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失 3.并发复制:从 ...

  9. 关于Oracle的rac集群和mysql Galera Cluster的想法

    到了新公司,公司用的是rac,我比较熟悉mysql第三方的集群方案Galera Cluster这类多主集群, 下面是我参考了他人对rac的介绍,然后和mysql方案进行的臆测级别的分析对比. rac和 ...

随机推荐

  1. vba 笔记

    1.PlanWS5.Range("D5:E13").Copy   复制PlanWS5.Range("G5:H13").PasteSpecial Paste:=x ...

  2. Python爬虫抓取糗百的图片,并存储在本地文件夹

    思路: 1.观察网页,找到img标签 2.通过requests和BS库来提取网页中的img标签 3.抓取img标签后,再把里面的src给提取出来,接下来就可以下载图片了 4.通过urllib的urll ...

  3. npm库下载缓慢解决方案

    淘宝针对国内下载npm库缓慢的问题,使用建立自己的cnpm库,可以很方便使用在公司内部使用. 地址:http://npm.taobao.org/ $ npm install -g cnpm --reg ...

  4. Office 365 系列五 -------- Imap邮箱迁移步骤

    当客户购买了我们的Office 365之后,第一个功能必然是会用我们的企业邮箱,如果企业之前是用 263.腾讯.网易等的邮件厂商的话,必然会涉及到邮件的迁移, 其实说到邮箱迁移,我们办法很多,如果人数 ...

  5. 最近使用JQuery Easyui 碰到的几个奇怪问题

    最近项目想尝试Easyui来做做前端界面,但是刚开始就碰到几个问题,记录下来,免得忘了. 1. 点击添加或修改按钮后,弹出窗体,窗体内容参加“href”属性远程加载 问题:第一次弹出窗体正常,但是再次 ...

  6. Nginx的nginx.conf配置文件中文注释说明

    #运行用户    user www-data;        #启动进程,通常设置成和cpu的数量相等    worker_processes  1;    #全局错误日志及PID文件    erro ...

  7. AS3 转 Java

    不错,我就是as3转java的程序猿. 大概两年前加过as3的QQ群里,有很多群友说as3发展前景不好,很多要转语言.我当时也想转,一直苦于没机会.现在机会终于来了... 首先说明一点,as3并不会像 ...

  8. reference

    z@z:~$ g++ -std=c++11 ref.cpp ref.cpp:7:10: error: invalid conversion from 'int' to 'int*' [-fpermis ...

  9. Android_layout 布局(二)

    昨天学习了layout 布局的线性布局和相对布局. 今天我们学习剩余的三个布局,分别是: 一.帧布局(FrameLayout) 在这个布局中,所有的子元素都不能被指定放置的位置,它们通通放于这块区域的 ...

  10. CentOS6.5中配置Rabbitmq3.6.6集群方案

    一.安装Erlang环境 1.下载erlang源代码 wget http://erlang.org/download/otp_src_19.1.tar.gz 2.安装依赖相关库文件 yum insta ...