高可用集群基本概念与heartbeat文本配置接口

一、高可用集群基本概念:

什么是高可用集群:

     所谓高可用集群,就是在出现故障时,可以把业务自动转移到其他主机上并让服务正常运行的集群构架
>    高可用集群的构架层次: 
    1. 后端主机层: 这一层主要是正在运行在物理主机上的服务。
    1. Message layer: 信息传递层,主要传递心跳信息
        1. Cluster Resources Manager(CRM): 集群资源管理器层,这一层是心跳信息传递层管理器。用于管理信条信息的传递和收集
        1. Local Resources Manager(LRM): 本地资源管理器层, 用于对于收集到的心跳信息进行资源决策调整。是否转移服务等等
        1. Resource Agent(RA): 资源代理层,这一层主要是具体启动或停止具体资源的脚本。遵循{start|stop|restart|status}服务脚本使用格式

各层次实现的软件和对应关系

    1. Message layer层: - 1) heartbeat v1 - 2) heartbeat v2 - 3) heartbeat v3 - 4)(OpenAIS)corosync - 5) cman
    1. CRM层 - 1) heartbeat v1: 使用文本配置接口haresources - 2) heartbeat v2: 通过一个crmd服务来实现配置,各节点都需要运行crmd服务,并且使用crmsh或者heartbeat-gui来进行配置 - 3) heartbeat v3: heartbeat + pacemaker + cluster-glue pacemaker: 集群资源管理器服务 CLI: crm(SuSE), pcs(redhat) GUI: hawk, LCMC, pacemaker-mgmt cluster-glue: 可以做为中间粘合层,使用其他资源管理器例如crmsh - 4) cman: 使用rgmanager(resource group manager)实现管理, 具有Failover Domain故障转移域这一特性 也可以使用RHCS(Redhat Cluster Suite)套件来进行管理: Conga的全生命周期接口 - 5) corosync: 使用rgmanager或者pacemaker
    1. LRM层通常和CRM层在实现上是通过CRM的一个组件实现
    1. RA层- 1) heartbeat legacy: heartbeat的传统类型 - 2) LSB:/etc/rc.d/init.d/* - 3) OCF(Open Cluster Framework):有提供商提供,有pacemaker,linbit - 4) STONITH: 用来联合硬件设备工作,可以把故障机电源强制关闭。
    1. keepalive的组合: keepalive不同于上面所述的重量级构架,比较独特使用vrrp接口实现,配置简单轻量级。通常与一下服务同时使用- 1) keepalive + ipvs - 2) keepalive + haproxy

RHEL OR CentOS高可用集群解决方案:

    1. RHEL(CentOS)5: - 1) 自带: RHCS(cman+rgmanager) - 2) 选用第三方:corosync+pacemaker, heartbeat(v1或v2), keepalived
    1. RHEL(CentOS)6: - 1) RHCS(cman+rgmanager) - 2) corosync+rgmanager - 3) cman+pacemaker - 4) heartbeat v3 + pacemaker - 5) keepalived

应用方式:

       -         1) 做前端负载均衡器的高可用:keepalived
       -         2) 做大规模的高用集群:corosync(cman)+pacemaker

资源隔离:解决资源征用问题

       +     1. 场景一: 
                    当集群中分裂出两组子集群,并且两个子集群之间并不能通信时, 两个子集群会发生资源征用。如果两集群同时征用后端存储系统,则会造成灾难性的文件系统崩溃。
                    为了解决此问题,集群系统引入了投票机制,只有拥有半数以上合法票数的集群才能存活,否则退出集群系统。 
                        votes: 投票权
                        total: 总票数
                        quarum: 满足法定人数,半数以上
      +      2. 场景二: 
                    如果集群为偶数时,如果集群分裂,两边可能都掌握相等的票数,因此集群系统不应该为偶数,如果是偶数则需要一个额外的ping节点参与投票。 
      +      3. 当分裂的票数不足集群退出集群系统后,为了保证它们永远不会征用资源需要STONITH机制来进行资源隔离。
                    STONITH具体来说,就是通过硬件设备,使得退出的主机重启或者关机。或者通过交换机阻断推出集群主机的向外通信和资源通信网络
                <img data-w="" data-ratio="0.5755395683453237" data-type="png" id="c1452782766264" class="" src="http://mmbiz.qpic.cn/mmbiz/IP70Vic417DO0k61G40AMP5XpXibZr5Oib9b4BtkthvibELCujY2Ia3yzXI4IRjBhE3sB2lQU8lHU1IqlAImkEs6HA/0?wx_fmt=png" title="1452664172306901.png" alt="brain split.png" style="width: 916px;height: 516px" _src="http://mmbiz.qpic.cn/mmbiz/IP70Vic417DO0k61G40AMP5XpXibZr5Oib9b4BtkthvibELCujY2Ia3yzXI4IRjBhE3sB2lQU8lHU1IqlAImkEs6HA/0?wx_fmt=png" height="516" width="916">

HA集群的工作模型:

    1. A/P: two node: 主被模型,要借助于ping node 工作
      1. N-M: N个节点M个服务, N>M, 活动节点为N, 备用节点为N-M
      1. N-N: N个节点N个服务, N节点都有服务,如果一个坏了,会有一个节点运行多个服务
      1. A/A: 双主模型,两个节点都是活动的。两个节点运行两个不同的服务。也可以提供同一个服务,比如ipvs, 前端基于DNS轮询。

资源转移的限定方式:

    1. rgmanager: failover domain: 故障转移域,设定一个资源只能在哪些主机上面转移 priority: 设定,在一个转移域中,哪些主机优先被转移资源
        1. pacemaker: 通过资源约束,和粘性来限定资源转移方式。 资源黏性: 如果两个节点倾向性位置约束一致,资源对哪个节点粘性为正值,则留在哪个节点。 资源约束(3种类型): 位置约束:资源更倾向于哪个节点上;通过一个数值来表示。 1) inf: 无穷大 2) n: 倾向于运行在某节点 3) -n: 倾向于离开某节点 4) -inf: 负无穷,如果所有节点全不可选,只能在此节点。 排列约束:资源运行在同一节点的倾向性; 1) inf: 两者永远在一起 2) -inf: 两者永远不再一起 顺序约束:资源启动次序及关闭次序; 例子:如何让web service中的三个资源,vip, httpd, filesystem运行在同一节点 1. 排列约束,说明三个在一起可能性inf 2. 资源组(resource group), 三个资源定义在一个组内,然后这个组决定在某一个节点上启动 3. 定义顺序约束,保证启动顺序,vip–filesystem–httpd 对称性与非对称性: 对称性: 默认所有节点都能转移资源。 非对称性; 有些节点不能转移资源。

如果节点不再成为集群节点成员时,如何处理运行于当前节点的资源:

  stoped:直接停止服务
            ignore: 忽略,以前运行什么服务现在还运行什么。 
            freeze:事先建立的连接,接续保持,不再接收新的请求。
            suicide: kill掉服务。 

一个资源刚配置完成时,是否启动。

  target-role: 目标角色,可以为启动,也可以为不启动。 

资源代理类型(RA):

    heartbeat legacy: 传统类型
            LSB: /etc/rc.d/init.d/ 下面的服务脚本
            OCF: 
            STONITH: 专门用来实现资源隔离的

资源类型:

  primitive, native : 主资源,只能运行于一个节点。 
            group: 组资源
            clone: 克隆资源,所有节点都运行的资源,首先是主资源。 
                通常为STONITH资源, Cluster filesystem, 分布式锁
                    1) 最多运行的最大数。 总clone数
                    2) 每一个节点上最多运行几个。 
                    master/slave: 主从资源内容,只能克隆两份,主的能读能写,从的不能做任何操作

二、配置heartbeat2基于haresource配置的高可用集群

配置前所需要的准备:

    1. 节点名称:集群每个节点的名称都得能互相解析, 保证/etc/hosts中主机名的正反解析结果必须跟“uname -n”的结果保持一致;
      1. 时间必须得同步,使用网络时间服务器同步时间,可以使用ntpd服务实现
      1. 为方便起见:各节点间能基于ssh密钥认证通信。 可以使用一下命令进行生产和copy秘钥
     # ssh-keygen -t rsa
     # ssh-copy-id root@192.168.253.134
    4. 两台主机的hosts地址配置如下
    192.168.253.133node1.playground.com    192.168.253.134node2.playground.com

安装heartbeat2, 由于heartbeat-pils在CentOS 6.5 后已经被cluster-glue取代了,因此需要手动解决依赖关系

  1. 依赖关系:
    # yum install perl-TimeDate net-snmp-libs libnet PyXML
  1. 安装heartbeat的三个组件
    # rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm

把两个httpd服务做成高可用

配置heartbeat的配置文件

     把配置文件的范例复制到,配置文件的目录中
     # cp /usr/share/doc/heartbeat-2.1.4/ha.cf /etc/ha.d/ha.cf
   2. 编辑配置文件 
     # vim /etc/ha.d/ha.cf 
       logfile /var/log/ha-log
       keepalive 2
       deadtime 15
       warntime 10
       udpport 694
       mcast eth0 225.0.130.1 694 1 0
       auto_failback on
       ping 192.168.253.2
       node    node1.playground.com
       node    node2.playground.com
     # scp /etc/ha.d/ha.cf node2.playground.com:/etc/ha.d/ha.cf

配置资源

    把haresource范例复制到配置文件目录中
    # cp /usr/share/doc/heartbeat-2.1.4/haresources /etc/ha.d/
    # vim /etc/ha.d/haresources 添加如下内容,意思是服务首先运行在node1上,后面配置vip和服务资源
        node1.playground.com    192.168.253.100/24/eth0 httpd

    把资源配置文件复制到node2
    # scp /etc/ha.d/haresources node2.playground.com:/etc/ha.d/haresources

配置认证文件:

    # cp /usr/share/doc/heartbeat-2.1.4/authkey /etc/ha.d/authkey     
    # chomd 600 /etc/ha.d/authkey
    # openssl rand -hex 10 
        8499636794b07630af98
        # vim /etc/ha.d/authkey 
        auth 2
        #1 crc        2 sha1 8499636794b07630af98
        #3 md5 Hello!
    # scp /etc/ha.d/authkey node2.playground.com:/etc/ha.d/authkey

安装httpd服务:

    这里不详细说了,就是确保服务正常,并且保证开机不能自动启动,最后关掉服务。让heartbeat自己控制服务启动。

启动集群服务:

    # service heartbeat start 
    # service node2.playground.com heartbeat start

配置集群服务使得两个node共享后端nfs文件系统的资源,需要开一台新主机192.168.253.135,导出/var/www/share文件夹

    # vim /etc/exports     
        /var/www/share  192.168.253.0/24(rw)
    # service nfs start 
    # echo 'web from share' > /var/www/share/index.html 
    # chown apache /var/www/share/index.html

调着haresource文件

    # vim /etc/haresources     
        node1.playground.com    192.168.253.100/24/eth0 Filesystem::192.168.253.135:/var/www/share::/var/www/html::nfs  httpd
    同步到两个节点
    # scp /etc/haresources node2.playground.com:/etc/haresources

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2016-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

手把手 | 20行Python代码教你批量将PDF转为Word

2965
来自专栏java达人

Kafka漫游记

我是一条消息,从我被生产者发布到topic的时候,我就清楚自己的使命:被消费者获取消费。但我一直很纳闷,把我直接推送给消费者不就行了,为什么一定要先推送到类似队...

2537
来自专栏静晴轩

Gulp探究折腾之路(I)

前言: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完...

3728
来自专栏代码世界

Python中的logger和handler到底是个什么鬼

最近的任务经常涉及到日志的记录,特意去又学了一遍logging的记录方法。跟java一样,python的日志记录也是比较繁琐的一件事,在写一条记录之前,要写好多...

3259
来自专栏前端开发

小程序的全栈开发新时代

小程序·云开发是微信团队和腾讯云团队共同研发的一套小程序基础能力,简言之就是:云能力将会成为小程序的基础能力。整套功能是基于腾讯云全新推出的云开发(Tencen...

1774
来自专栏Java职业技术分享

分布式 | Dubbo 架构设计详解

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度...

2280
来自专栏happyJared

程序员神器,IntelliJ IDEA 2018.1 正式发布

3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再次让人眼前一亮:什么,还能这么玩?

921
来自专栏FreeBuf

浅谈php安全

这段时间一直在写一个整站,前几天才基本完成了,所以抽个时间写了一篇对于php安全的总结。 技术含量不高,过不了也没关系,希望能一些准备写网站的朋友一点引导。 在...

4598
来自专栏智能大石头

NewLife.Net——构建可靠的网络服务

老规矩,先上源码:https://github.com/nnhy/NewLife.Net.Tests

1140
来自专栏Golang语言社区

go语言最快最好运用最广的web框架比较(大多数人不了解的特性)

如果你为自己设计一个小应用程序,你可能不需要一个Web框架,但如果你正在进行生产,那么你肯定需要一个,一个好的应用程序。

3994

扫码关注云+社区

领取腾讯云代金券