mysql galera cluster 集群的分裂与仲裁机制
当集群由于网络原因分裂为几个单独的组时(一组可能是单节点,也可能是几个互联的节点),数据出现不一致,此时可能产生脑裂及数据不一致。这种情况 下,只有一组节点能够继续提供服务,这组节点的状态是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
联系&投稿:service@evister.com


mysql galera cluster 集群的分裂与仲裁机制的更多相关文章
- Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)
(注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一 搭建环境: 1 Ubuntu16.04版本(系 ...
- 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇
前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...
- Centos 7 下 Mysql 5.7 Galera Cluster 集群部署
一.介绍 传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性 ...
- 一次galera cluster集群故障节点无法启动问题排查
现象 环境: Server version: 10.0.25-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e 配置文件: [root@node-2 ...
- Mysql Innodb cluster集群搭建
之前搭建过一个Mysql Ndb cluster集群,但是mysql版本是5.7的,看到官网上mysql8的还是开发者版本,所以尝试搭建下mysql Innodb cluster集群. MySQL的高 ...
- MariaDB Galera Cluster集群搭建
MariaDB Galera Cluster是什么? Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://g ...
- MariaDB Galera Cluster集群
一.MariaDB Galera Cluster概要: 1.简述: MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步 ...
- 基于Galera Cluster多主结构的Mysql高可用集群
Galera Cluster特点 1.多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的 2.同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失 3.并发复制:从 ...
- 关于Oracle的rac集群和mysql Galera Cluster的想法
到了新公司,公司用的是rac,我比较熟悉mysql第三方的集群方案Galera Cluster这类多主集群, 下面是我参考了他人对rac的介绍,然后和mysql方案进行的臆测级别的分析对比. rac和 ...
随机推荐
- maven本地安装jar包同时生成pom文件
maven 本地安装jar包:mvn install:install-file -Dfile=本地路径/ojdbc12.jar -DgroupId=com.oracle -DartifactId=oj ...
- DUBBO参数验证
public class ValidationParameter implements Serializable { private static final long seria ...
- jenkins配置自动发送邮件
1.开通QQ的SMTP服务,需要发一条短信,qq会给你一个密码(不是你的QQ邮箱密码哦) 2.安装 Email Extension Plugin 插件 3.进入系统管理--系统设置 3.1按照如下图设 ...
- C# MVC ( 将控制器的实体类注册到视图 )
(1)控制器 代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...
- js浏览器对象的属性和方法
1.window对象 /*1.计算浏览器窗口大小*/ //不算滚动条: var width = window.innerWidth; var height = window.innerHeight; ...
- 【原】如何在jQuery中实现闭包
原生JS中,闭包虽好用,但是很难用好,在jQuery中一样,都有一些点需要我们注意.jQuery中使用闭包的常见情况有以下几种: 1.$(document).ready()的参数 我们在写jQuery ...
- Samba安装配置
Samba简介 Samba官网:http://www.samba.orgSMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不 ...
- RedHat6安装gcc
RedHat RHEL 6.0安装gcc的方法 最近在折腾RedHat6.0 ,全是命令,号称比windows安全的Linux,没有界面,也不知道所谓的专家们如何比的,一个界面做的非常好的Window ...
- 去除bootstrap模态框半透明阴影
当使用bootstrap模态框默认自带半透明阴影,如果想要去除阴影,需要怎么做呢? 今天在项目中我遇到了这个问题,想要去除模态框的阴影,试了好久都没解决.后来问同事的时候才知道,当模态框弹出后,会加上 ...
- 原生JS封装简单动画效果
原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...