corosync集群的选举算法
《Cluster Concepts》
http://linux-ha.org/wiki/Cluster_Concepts
《Managing Computers with Automation》
http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html
《clusters and quorums》
http://docs.openstack.org/ha-guide/intro-ha-concepts.html#clusters-and-quorums
《votequorum - Votequorum Configuration Overview》
http://manpages.ubuntu.com/manpages/saucy/man5/votequorum.5.html
集群(cluster)中的概念有:
1、subcluster,子集群。集群中发生了脑裂,分裂成若干个子集群,每个子集群中的节点无法与其它子集群的节点联系。
2、fencing,栅栏。指像栅栏一样,将子集群与资源隔离开,使子集群无法访问资源。
3、quorum,法定票数。只有达到法定票数的子集群才能继续工作,无法达到法定票数的子集群被栅栏隔离开。
4、vote,投票。每个节点拥有1票,计算某个子集群中的总票数,就是这个子集群中有多少个节点。
法定票数=大于集群节点总数的一半的最小整数。例如,节点总数是3,节点总数的一半是1.5,大于1.5的最小整数是2,即法定票数是2。如果节点总数是4,则法定票数是3。
假如有一个9个节点的集群:{a0, a1, a2, a3, a4, a5, a6, a7, a8},则法定票数是5,若因为网络问题发生脑裂,以下是所有可能性的其中几种:
可能性一:{a0, a1, a2}, {a3, a4, a5}, {a6, a7, a8},分裂成了3个子集群,则每个子集群的票数是3、3、3,都小于法定票数5,不满足法定票数的子集群被栅栏隔离,全部子集群都被隔离,整个集群处于无法工作的状态。
可能性二:{a0, a1, a2, a3, a4}, {a5, a6, a7, a8},分裂成了2个子集群,则每个子集群的票数是5、4,只有一个子集群的票数达到法定票数5,该集群得以继续工作,不满足法定票数的子集群被栅栏隔离,整个集群可以继续工作。
可以看出,一个集群中,能够达到法定票数的子集群最多只能有一个。
对于集群中一些不支持并发的资源,如磁盘资源,在发生脑裂时,如果不使用栅栏,每个子集群都具有写入磁盘资源的权限,这将破坏磁盘数据。
注意:脑裂概念和子集群中的节点不可用的概念不要混淆起来。例如法定票数=3,子集群{a0, a1, a2},达到了法定票数,能够继续工作,但a2节点可能已经处于不可用状态,但a2还是属于这个子集群。子集群是一个逻辑概念,其实子集群{a0, a1, a2}相当于a0只知道a1、a2的存在,a1只知道a0、a2的存在,a2只知道a0、a1的存在。即使a2节点处于不可用状态,只要满足前的“知道存在”关系,a2就还在这个子集群中。子集群中的资源还是能在可用节点上转移。
对于只有2个节点的集群,法定票数是2,当发生脑裂时,两个子集群的票数都是1,不满足法定票数,此时整个集群都无法工作。这也是官网推荐的最小集群节点数量为3的原因。个人认为,如果不存在不能并发的资源,其实脑裂也无妨。如果想两个节点都能工作,编辑corosync.conf,在quorum语块中显示指定“two_node: 1”:
quorum {
provider: corosync_votequorum
two_node: 1
}
如果超过2个节点加入集群,two_node自动失效。
corosync集群的选举算法的更多相关文章
- 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告
实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...
- 2、corosync集群初步
配置高可用集群 配置环境:两台centos7 192.168.184.141 192.168.184.142 corosync v2 + pacemaker corosync v2:vote sys ...
- Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)
Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...
- 3、基于多播、安全认证的corosync集群(VIP、Httpd、Filesystem)
Messaging Layer --> CRM --> RA systemd:/usr/lib/systemd/system systemd有一个特性,即便一个服务开机启动,但是在 ...
- Redis集群master选举时长测试
在一台物理机上启动6个Redis实例,组成3主3从集群,端口号依次为:1379 ~ 1384,端口号1379.1380和1384三个为master,端口1379的进程ID为17620.现将进程1762 ...
- 借 redis cluster 集群,聊一聊集群中数据分布算法
Redis Cluster 集群中涉及到了数据分布问题,因为 redis cluster 是多 master 的结构,每个 master 都是可以提供存储服务的,这就会涉及到数据分布的问题,在新的 r ...
- 负载均衡集群之LVS算法和模型
LVS-->Linux Virtual Server 实现算法-->静态/动态,共10种 静态算法: rr(round robin): 解析:轮叫算法,即0-9循环 ...
- Kafka集群副本分配算法解析
副本分配算法如下: 将所有N Broker和待分配的i个Partition排序. 将第i个Partition分配到第(i mod n)个Broker上. 将第i个Partition的第j个副本分配到第 ...
- Zookeeper在Dubbo中的作用及Zk集群的选举原理
转自 : https://blog.csdn.net/zh15732621679/article/details/80723358
随机推荐
- Puppent 基本使用方法
简单的文件配置 master端 vim /etc/puppet/manifests/site.pp ###########################内容如下 node default{ file ...
- uIP学习笔记
uIP学习笔记 从零开始使用uIP freemodbus modbus TCP 学习笔记
- Mybatis 一对一,一对多,多对一,多对多的理解
First (一对一) 首先我来说下一对一的理解,就是一个班主任只属于一个班级,一个班级也只能有一个班主任.好吧这就是对于一对一的理解 怎么来实现呢? 这里我介绍了两种方式: 一种是:使用嵌套结果映射 ...
- vim 操作(转)
高效率移动编辑1.在插入模式之外基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就像一个“哑巴”编辑器一样.很多新手都会一直呆在插入模式里面,因为这样易于使用.但 VIM 的 ...
- 在win7/8/10鼠标右键添加带管理员权限的“在此处打开命令窗口”
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Drive\shell\runas]@="@shell32.dll,-8506 ...
- 栅栏cyclicbarrier
栅栏类似闭锁,但是它们是有区别的. 1.闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的线程 ...
- IIS Express允许外部访问(外部调试)
Visual Studio配合IIS Express为Web开发提供了强劲的调试功能,本文介绍IIS Express如何在调试模式下让局域网的其他设备进行访问,以便进行测试. 1.打开IIS Expr ...
- LINUX中磁盘挂载与卸除
一.挂载格式与参数说明: 要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个命令啦! 不过,这个命令真的是博大精深-粉难啦!我们学简单一点啊- ^_^ [root@www ~]# ...
- 【将txt文本转图片】
[测试类] public static void main(String[] args) { try { File textFile = new File("F:\\java56班\\ecl ...
- 编程实现prim算法和Dijkstra算法。
网址链接:http://blog.csdn.net/anialy/article/details/7603170