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和 ...
随机推荐
- NodeJs解析web一例
var http = require('http'); var fs = require('fs'); var url = require('url'); http.createServer(func ...
- 关于JDK 安装,以及Java环境的设置
关于JDK 安装,以及Java环境的设置 1.下载JDK1.6,选择对应的安装路径 2.配置相应的Java 环境变量 A.属性名称:JAVA_HOME 属性值:C:\Program Files\Jav ...
- WCF中常用的binding方式
WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务.WSHttpBinding: 比 Basi ...
- MVC开发基础
新建--项目--ASP.NET MVC 4 WEB 应用程序 MVC: M--Model 模型层 放置数据访问类,linq V--View 视图层 界面层 aspx文件.只 ...
- {Reship}{KMP字符串匹配}
关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827
- TSP问题——动态规划
Traveling Salesman Problem Description: Time Limit: 4sec Memory Limit:256MB 有编号1到N的N个城市,问从1号城市出发, ...
- varchar(n),nvarchar(n) 长度、性能、及所占空间的说明
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- MVC项目
MVC 项目分析: 1.AssemblyInfo.cs 保存管理文件发布的一些属性和版本号 2.Content文件夹(保存相关的样式文件.CSS),scripts文件夹(保存相关的),fonts文件 ...
- c#利用反射获取对象属性值
public static string GetObjectPropertyValue<T>(T t, string propertyname){ Type type = type ...
- 又是一天String
(1) Length of Last Word 解题思路:使用length记录最后一个单词的长度.从最后一个字符开始,如果是空字符,length不变.如果不是空字符,length++,直到再次遇到空字 ...