欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 38_03 _Linux集群系列之九——高可用集群原理详解之多节点集群 有大用

image.png

image.png

能够利用Messaging Layer 自我实现高可用集群服务的软件叫做 ha-aware

ha-aware application (heihg Availability aware application )

不含有 ha-aware 的程序的电脑,必须借助于 CRM  RA来实现集群功能



image.png

节点能ping通网关,可以认定自己是活动的

仲裁磁盘机制,不停地往共享设备上写资源,从节点监控主节点是否往某磁盘上写数据,一旦监测不到,可以认定主节点故障了

watchdog 看门狗, (linux内核上的功能),watchdog协调同一个节点的多个进程,,,每个进程启动后通过 unix 套接字管道不停地向 watchdog中写数据,如果其它进程看不到这个进程写的数据,它就认为那个进程挂了,或者试图重启那个进程,,马哥不介绍了,因为用得不多


资源粘性:资源对某节点的依赖程度,通过score来定义,

        正数 (有正无穷)

        负数 (有负无穷)


资源约束:

    location: 资源对节点的倾向程度

    collation: 资源间的依赖性(互斥性)

    order:资源的采取动作的次序(哪个先启动)


image.png

两个节点 判断的话,要依赖第三方





image.png

多个节点(奇数节点)法定票数要大于半数

quorum:法定票数



四个节点 (a,b 找不到 c,d  ,,,,c,d 找不到a,b)此时是脑裂


不具备法定票数时,

全局资源策略 (当全局资源不具备法定票数的时候,资源策略,资源管理策略) without_quorum_policy(不满足法定票数的时候策略)

freeze:冻结,不接受新的请求,当然连进来的请求会提供服务(一半时,freeze吧)

stop:停了,(少数时,停掉吧)

ignore:忽略(该运行还是运行,只要没人来stonith,fense)(两节点的时候,不具法定票数,所以要ignore模型)


image.png

来回争用,所以资源隔离是必须的

可以定义某一个节点使用非默认的一票的

image.png

这里 a 4; b 2; c 1; d 2;

总票数是奇数


image.png


image.png


image.png

d挂了,看上面的资源,对abc的倾向性

(通的策略(默认不开放,只开放一两个),堵的策略(默认都开放,只堵一两个)),,

可以让d上的资源对c负无穷大,这样d上的资源就尽可能的在a b 上运行了,堵的策略(默认都开放,只堵一两个)),这叫左对称?

d挂了,d上的资源 默认 a b c 都不让转,,,我们手动开放转到b上,(通的策略(默认不开放,只开放一两个),这叫右对称

可以定义资源组,红帽的rhcs集群中,a b 定义成一组,b c 一组, b c d 再一组,

组就是某一个服务组成的资源

web服务所需的资源(如VIP httpd 文件系统)定义成一个组,叫做故障转移域(failover domain),故障发生时,某资源所能够转移或倾向的节点范围


三个节点各一个服务,第四个节点备用

image.png


RHCS:(redhat cluster suite)红帽集群套件,红帽上的集群名称

Messaging Layer

    heartbeat(v1,v2,v3)

        heartbeat v3        分裂成几个独立的小项目

            heartbeat,pacemaker,cluster-glue

            红帽6.0也提供了heartbeat 

    corosync(红帽6.0(包括6.0)以后):配置和运用上比heartbeat更优越,但是需要与pacemaker组合起来工作,, corosync只是个纯粹的Messaging Layer,相当于heartbeat v3中heartbeat ;;;;corosync支持双主(主/主模型),配置麻烦,要对资源做各种管理

    cman: class manager (红帽5.0版本系列),不是纯粹的Messaging Layer,很多功能整合在内核中,很麻烦;;红帽6.0依然支持cman,cman可以定义成组,(一个服务可包含多个资源,它们同进同退)

    keepalived: 也是一个高可用服务,理论与heartbeat, corosync,cman不太一样,但是keepalived在配置上,应用机制上有独到之处,vip的管理上基于vip来实现(虚拟论文冗余协议来实现),可以简单方便的配置成双主模型,keepalived本身是为了LVS的director高可用而开发的一套组件,keepalived用到LVS的代码来提供LVS的高可用功能;;;便捷性上是keepalived,但是通用性不如前几个

    ultramonkey:不太活跃了, ultra(超级) monkey(猴子),,,,这个马哥不讲了



CRM:需要附着在Messaging Layer 之上才能进行工作

    一,haresources (ha resources高可用资源), heartbeat v1 自带有资源管理器CRM,叫 haresources: ha资源管理,简洁方便

    二,crm, heartbeat v2         1)对 haresources 作了改进,把 haresources 做成了独立的组件.就叫做crm, 需要监听在某个接口上,接受外面的管理工具进行管理(比于基于图形界面来管理集群资源)

                                             2)为了兼容v1,提供了原有的 haresources

    三,pacemaker,   heartbeat v3      资源管理器crm发展为独立的项目,重命名为 pacemaker  (heartbeat 心不跳了,pacemaker  来起搏一下),heartbeat v3中的heartbeat 仅保留核心的Messaging Layer  ;;;;;pacemaker  可运行在 heartbeat v3   或 corosync 之上

    四,rgmanager,cman提供的,rgmanager(resource group manger 资源组管理器)

    五,keepalived的资源管理器,暂时不讲了

image.png


Resource: 对于集群服务来讲,其中某一个资源,某一个时刻,只能运行在其中一个节点上,但是这是不完全正确的

有些资源必须运行在多个节点上的,比如stonith设备(既是高可用,又运行在多个节点上),                                                                


Resource Type: 资源类型

    Primitive:主资源,某一时刻只能运行在某一节点上的资源

    clone:克隆类资源,某一时刻只能运行在多个节点上的资源 克隆资源,对主资源n份克隆,每个节点上可独立运行,同时运行,,比如stonith设备管理的资源代理;;集群文件系统中,每个节点持有锁后,其它节点可以看到,所以必须通知其它节点上,所以这个资源必须要运行多份

    group:组资源多个主资源归类为一块,同进同退;它是一个资源容器,通常组中只包含Primitive的资源 

    master/slave:主从资源,独特的克隆类资源,只能运行两份,一个节点是主节点,另一个节点是从节点,讲到DRP时才能真正理解


RA:resource agent 资源代理

    它是一堆脚本,每个节点上都有,能够让被定义成高可用资源的资源能够被管理的,它接受LRM ( local resource manager )传递过来的控制指令,完成资源管理

image.png


RA Classes: RA (resource agent) 类别

        Legacy hearbeat v1 RA:(Legacy 传统)定义了传统了一堆的RA,专用于hearbeat v1,后面的 hearbeat 升级版也兼容

        LSB (linux standard base): 只要遵循linux shell编程风格,支持 start ,stop restart ,status的脚本都可以(/etc/rc.d/init.d  下面的脚本基本都是遵循LSB的脚本) 对于获取资源运行状况的功能以及解析度等等都不是特别理想,有人开发了另一套标准,它能够至少接受好几个参数的start ,stop restart ,status,monitor(监控),叫做OCF

        OCF (Open Cluster Framework) 开放式集群框架,不同的vendor(提供商)可能提供不同的版本

                pacemaker提供的

                linbit (为drbd提供的ra??)

                stonith (stonith 厂商提供管理自己设备的,也提供ra),单独归类了

        STONITH    专门有来管理硬件stonith设备


隔离级别:,

    节点级别

            STONTIH

    资源级别

            FC SAN Switch                                            SAN(storage area network)



image.png

image.png

STONTIH

    Stonith

    1、Power Distribution Units (PDU)   电源分布单元   电源交换机

          可以接网线,可以接收其它节点所发来的控制指令,借助于这个指令可以断掉某节点的电源,

                各个厂商的认证stonish不一样,管理软件程序不一样

    2、Uninterruptible Power Supplies (UPS) 不间断电源

          不间断电源反而可以间断,一些高级的UPS也可以实现隔离功能的

    3、Blade Power Control Devices    刀片;刀片服务器的电源控制设备

            它们是充分模块化了的,刀片服务器自己都有内在的电源控制器,刀片服务器接上去,有多种接口,其中有一个电源接口,这些接口也能够接受控制指令,用于临时的,一次性切换某个设备电源,,,我们其实stonith可以快速断开再接上(重启)(只要重启,所以服务都挂掉了)某个节点,,,,

    在高可用集群中,每一个服务都不能开机自启动,必须要接受crm的管理    (什么 chkconfig on ,在高可用集群中,坚决不能使用了,必须使用 chkconfig off )

    4、Lights-out Devices        轻量级的管理设备

            是很多专业级的服务器上自带的硬件接口,( IBM RSA, HP iLO, Dell DRAC ),它们都是在主机上很小的管理模块,可以实现远程对这个服务进行管理的,,,,,包括向服务器发指令,重启一下,,,,它们也可以实现用于stonith设备

    5、Testing Devices        测试性的设备

            比如用 ssh,配置几个主机,彼此间都通过无密码方式进行连接, ssh 172.16.100.7 'reboot'  ,但是问题是联系不上啊,这个命令有啥用呢,,所以说这是测试性的设备

            meatware 更强大的测试性设备,(meatware 肉件),需要重启时,手按一下,叫做肉键, 这叫手动fense,手动stonith


image.png

为了提高stonith功能,每一个节点上都要启动 stonithd 进程

stonithd 是 用来监控当前主机上所运行的stonith资源的,可以在各个节点的stonith间各进程相互通信的机制

stonith 这个设备的命令是以 stonith 插件的方式工作,

每一个硬件的生产厂商,都会专门提供一个应用程序,用来向这样一个设备发送指令,它们接受不同的选项参数,称为 STONITH Plug- ins




STONITH的实现: ;

stonithd

stonithd is a daemon which can be accessed by local processes or over the network. It accepts the commands which correspond to fencing operations: reset, power-off, and

power-on. It can also check the status of the fencing device.

The stonithd daemon runs on every node in the CRM HA cluster. The stonithd instance running on the DC node receives a fencing request from the CRM. It is up to this and

other stonithd programs to carry out the desired fencing operation.

STONITH Plug- ins

For every supported fencing device there is a STONITH plug-in which is capable of controlling said device. A STONITH plug-in is the interface to the fencing device.

On each node, all STONITH plug-ins reside in /usr/lib/stonith/plugins (or in /usr/1ib64/stonith/plugins for 64-bit architectures). All STONITH plug-ins look the same to

stonithd, but are quite different on the other side reflecting the nature of the fencing device .

Some plug-ins support more than one device. A typical example is ipmilan (or external/ipmi) which implements the IPMI protocol and can control any device which supports

this protocol.



一个高可用集群,stonith是必须的,所以一般说来,集群的默认的管理策略:没有stonith,是不允许启动的,

 

httpd  HA : httpd 的高可用集群

    集群之间要加密

    集群内部节点可以组播,可以单播,可以广播



httpd HA

    Heartbeat

    UDP: 694


    两个节点用以太网网线连起来

image.png

[root@mail ~]# grep 694 /etc/services

ha-cluster      694/tcp                         # Heartbeat HA-cluster

ha-cluster      694/udp                         # Heartbeat HA-cluster

rrimwm          1694/tcp                        # rrimwm

rrimwm          1694/udp                        # rrimwm

pwrsevent       2694/tcp                        # pwrsevent

pwrsevent       2694/udp                        # pwrsevent

vpntpp          3694/tcp                        # VPN Token Propagation Protocol

vpntpp          3694/udp                        # VPN Token Propagation Protocol

bioserver       6946/tcp                        # Biometrics Server

bioserver       6946/udp                        # Biometrics Server

[root@mail ~]#

image.png



普通分类: