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

这里的技术是共享的

You are here

马哥 39_01 _Linux集群系列之十一——高可用集群之heartbeat基于crm进行资源管理 有大用

image.png

知识回顾: 

RA classes:

        OCF

                pacemaker

                linbit

        LSB

        Legacy Heartbeat V1

        STONITH

RA: Resource Agent

        代为管理资源

LRM: Local Resource Manager

DC

        TE:

        PE:

CRM: Cluster Resource Manager

        haresource (heartbeat v1)

        crm, haresource (heartbeat v2)

        pacemaker (heartbeat V3)

        rgmanager (RHCS)

        

        为那些非ha-aware的应用程序提供调用的基础平台

        很多资源由CRM来代为管理,监控其运行状态,由CRM来实现对其启动停止等各方面的动作的采用.

        CRM要提供强大的基础管理框架,让管理员去配置这些非ha-aware的应用程序(比如 httpd)的某些在ha( high avaliablity )上工作特性

        haresource文件是管理资源的配置接口,但功能薄弱,所以haresource被提升为了crm

        crm在 heartbeat 2中,本身作为一个进程来运行的叫  crmd (cluster resource manager daemon): crm守护进程,运行在每一个节点,并且通过某个监听的套接字彼此之间进行互相通信,但是通信依赖于底层的Messaging layer, crm监听的套接字是为了管理员管理,实现运行在crm之上的每一个资源的管理的接口(api)

         crm很多工具进行资源管理      发展到v2版本后,功能和可扩展性得到了极大的提升

                GUI:网页或图形窗口界面配置资源,配置节点(好像不能,好像只能配置资源),手动完成资源转移等等

                CLI:命令行接口,添加资源,将资源归并为组等等

                        不提供额外的命令行工具,与命令行接口可能没有关系,但是在各节点上,也能够方便的进行CRM内部的各种信息的管理??看不懂


HA service:

        从属于同一个服务的所有资源必须要同时运行在一个节点上,如果不定义组的话,是balance法则,资源平均运行在各个节点上的;;比如 (Web vip,httpd,filesystem),如果三个资源不归并为一个组的话,它们会分散运行


Resourced Type:

    primitive(native)类型的资源  主资源(基本资源,主要资源,原始资源) 

    group 类型的资源,    组资源,同进同退

    clone 类型的资源,有些资源必须同时运行在多个节点上, clone n份,可在每一个节点上运行

            比如 STONITH 设备,管理STONITH的管理进程也被配置为高可用服务的资源

            比如 Cluster Filesystem 的 dlm(distribute lock manager)分布式锁管理器,(要定义为高可用的一个资源,要运行在每一个节点上,它们之间可以通信),集群文件系统,多个节点可以同时读写同一个共享存储的,某一节点读写某一文件,会加锁的,锁持有的信息一定会通知给其它能够读写同一个文件的节点,就是靠这些定义为分布式锁管理器的资源来完成的 ;;;它是集群文件系统自带的工具,是个应用程序,需要把这个应用程序配置为一个资源

            比如 STONITH 

    master/slave 类型的资源,定义为主资源,只能clone两份,运行在两个主从关系的节点上

            比如 drbd 分布式磁盘块镜像,分布式复制块设备,2.6.33之后,已经被直接整合进内核了,红帽5.8  5.9是2.6.18,,别人提供了内核模块,不需要重新编译内核,只需要安装内核模块即可



资源粘性:资源倾向性

        资源是否倾向于留在当前节点,这才是最准确的定义

                正数:倾向于,乐意            正无穷,表示只要有可能,就在这儿

                正数:离开        负无穷,表示只要有可能,就不在这儿

                

                比如:  node1.magedu.com: 资源粘性:100,位置约束:200

                          node2.magedu.com: 资源粘性:100,位置约束:inf  假如它坏了,资源留在node1,假如它好了,资源又会在node2上,因为它的位置约束是inf(正无穷大)

        

资源约束:

        location  位置约束

        collocation  排列约束

        order  顺序约束


两个节点的高可用集群中,法定票数都不大于一半,借助于第三设备,来判定是自己挂了,还是别人挂了,

    ping node ,ping group,仲裁磁盘 等 ,帮助判定,哪一半哪个节点是正常的

    但是多个节点(超过两个)的时候,总法定票数为奇数,只要分裂不超过两个(超过两个也没关系),只要某一个子集群,它的法定票数能够大于半数,就可以认为自己是正常的,其它的都是非正常,为了避免资源竞争,正常的节点可以fence其它任意节点的,

    一个正常集群应该具备fence设备(stonith设备),


资源隔离两种级别

        节点级别 stonith    

        资源级别

        


heartbeat配置:

        1) authkeys

        2) ha.cf 主厅两点

                node

                bcast,mcast,ucast 只使用一种就可以了

        3) haresource 给资源提供配置信息的


HA:前提条件

        1)时间同步

                两个节点 192.168.0.45  192.168.0.55  都要执行 # ntpdate 192.168.0.75

        2)SSH双机互信

        3)主机名称与 uname -n 一致,并通过 /etc/hosts解析,不建议使用dns解析


CIB: Cluster Information Base   集群信息库,这是基于crm实现管理高可用集群的时候,它的资源定义的配置文件,里面可能包含多个配置文件,可能将集群的所有配置信息都保存在cib的配置文件当中,,,,cib与haresources类似,在每个节点上都要一样,cib是xml格式的

下面涉及到的文件都在 /var/lib/heartbeat/目录下

执行haresources2cib.py脚本,并指定haresources文件, 它在执行结束之后,会将我们的haresources转换为cib的xml格式并保存到 /var/lib/heartbeat/crm 目录下的,再启用集群服务,这些资源都会生效的

当然也可以直接通过GUI或CLI来进行配置的

haresources2cib.py的执行依赖于 ha_propagate?(到底谁依赖于谁,我头有点乱),编辑好 集群信息库文件以后,会自动调用ha_propagate,把配置信息自动复制到其它节点(通过ssh的双机互信)

send_arp就是节点抢过VIP后,广播新mac与vip的对应关系,进行arp欺骗(arp伪装,)的,这样,路由器(或其它设备)的mac缓存就更新了

PE:pengine文件 TE:tengine文件  stonithd文件(爆头)  quorumd文件(法定票数) crmd文件(运行crm程序) ccm(cluster config manager 集群配置资源管理器,为crm管理cib提供的专门的管理工具,讲到rhcs时有涉及) lrmd(location resource manage daemon 本地资源管理器守护进程)




crm->pacemaker 以后,配置命令功能特别强大

        

马哥看日志

也说大家一起做集群,都在172.16这个网段内,所以每个学生自建的两个节点,相互之间传递的心跳信息,别人都能收到一份,因为使用的是bcast(广播),,不过别人看到的是 failed authentication 认证失败

image.png

大家每个人做集群,启动起来以后,日志疯狂增长,,每一个人节点在不停的向这里传心跳信息的

image.png

可以使用多播的方式来实现,建议不要使用默认的多播地址,要稍微改一下的


image.png

image.png

原理简介

        组播报文的目的地址使用D类IP地址,范围是从224.0.0.0到239.255.255.255  D类地址不能出现在IP报文的源IP地址字段. 单播数据传输过程中,一个数据包传输的路径是从源地址路由到目的地址,利用“逐跳”(hop-by-hop) 的原理在IP网络中传输。

然而在ip组播环中,数据包的目的地址不是一个,而是一组,形成组地址。所有的信息接收者都加入到一个组内,并且一旦加入之后,流向组地址的数据立即开始向接收者传输,组中的所有成员都能接收到数据包。组播组中的成员是动态的,主机可以在任何时刻加入和离开组播组。


组播组分类

组指组可以是永久的也可以是临时的。 组播组地址中,有一部分官方分配的:称为永久组插组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。

224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用:

224.0.1.0~224.0.1. 255是公用组播地址:可以用于Internet:

224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效:

239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。



常用预留组播地址

列表如下:

224.0.0.0基准地址(保留)

224.0.0.1所有主机的地址(包括所有 路由器地址)

224.0.0.2所有组播路由器的地址

224.0.0.3不分配

224.0.0.4 dvmrp路由器

224.0.0.5 ospf 路由器

224.0.0.6 ospf dr

224.0.0.7 st路由器

224.0.0.8 st主机

224.0.0.9 rip-2路由器

224.0.0.10 Eigrp路由器

224.0.0.11活动代理

224.0.0.12 dhcp服务器/中继代理

224.0.0.13所有pim路由器

224.0.0.14 rsvp封装

224.0.0.15所有cbt路由器

224.0.0.16指定sbm

224.0.0.17所有sbms

224.0.0.18 vrrp

以太网传输单播ip报文的时候;目的mac地址使用的是接收者的mac地址。但是在传输组播报文时:传输目的不再是一个具体的接收者:而是一个成员不确定的组,所以使用的是组播mac地址。组播mac地址是和组播ip地址对应的。iana (internet assigned number authority) 规定,组播mac地址的高24bit为8x01005e; mac地址的低23bit为组播ip地址的低23bit.

由于ip组播地址的后28位中只有23位被映射到mac地址,这样就会有32个ip组播地址映射到同一mac地址上。???不懂




#在第一个节点上(192.168.0.45) 

[root@node1 ha.d]# ssh node2 '/etc/init.d/heartbeat stop'        #停掉第二个节点(192.168.0.55)的集群服务 

Stopping High-Availability services:

[确定]

[root@node1 ha.d]#/etc/init.d/heartbeat stop    #停止当前节点 (192.168.0.45) 

Stopping High-Availability services:

                                                           [确定]

[root@node1 ha.d]#

[root@node1 ha.d]# pwd

/etc/ha.d

[root@node1 ha.d]# vim ha.cf        #把bcast改成 mcast

#bcast  eth0            # Linux        #注释掉广播

#mcast eth0 225.0.0.1 694 1 0

mcast eth0 225.0.100.19 694 1 0        #组播地址 225.0.100.19 改成不一样的吧

#ucast eth0 192.168.1.2        #使用单播的话,那么两个节点的配置文件不一样了  192.168.1.2 是另一个节点的ip


crm     respawn                      #表示它将使用crm的机制来管理我们的集群资源 respawn 或者 on,,,crm与haresource并不兼容,所以它不会读取haresources配置文件         haresources 里面配置的 node1.magedu.com IPaddr::192.168.0.50/24/eth0 Filesystem::192.168.0.75:/web/htdocs::/www/a.org::nfs httpd  通通都失效了


#ha.cf  这个文件使用了 crm 之后,改好了后,不要忙着启动


[root@node1 ha.d]# cd /usr/lib/heartbeat

[root@node1 heartbeat]# ls

#haresources2cib 有个概念,叫cib(cluster information base)集群信息库

api_test          crm_primitive.pyc    hb_setsite          ocf-shellfuncs

apphbd            crm_primitive.pyo    hb_setweight        pengine

apphbtest         crm_utils.py         hb_standby          pingd

atest             crm_utils.pyc        hb_takeover         plugins

attrd             crm_utils.pyo        heartbeat           quorumd

base64_md5_test   cts                  ipctest             quorumdtest

BasicSanityCheck  dopd                 ipctransientclient  ra-api-1.dtd

ccm               drbd-peer-outdater   ipctransientserver  recoverymgrd

ccm_testclient    findif               ipfail              req_resource

cib               ha_config            logtest             ResourceManager

cibmon            ha_logd              lrmadmin            send_arp

clmtest           ha_logger            lrmd                stonithd

crm_commands.py   ha_propagate         lrmtest             stonithdtest

crm_commands.pyc  haresources2cib.py   mach_down           tengine

crm_commands.pyo  haresources2cib.pyc  mgmtd               TestHeartbeatComm

crmd              haresources2cib.pyo  mgmtdtest           transient-test.sh

crm.dtd           hb_addnode           mlock               ttest

crm_primitive.py  hb_delnode           ocf-returncodes     utillib.sh

[root@node1 heartbeat]#



image.png



[root@node1 ~]# /usr/lib/heartbeat/ha_propagate        #ha.cf  authkeys 直接复制到另一节点,以后不需要用scp了          

Propagating HA configuration files to node node2.magedu.com.

ha.cf                                         100%   10KB  10.5KB/s   00:00

authkeys                                      100%  691     0.7KB/s   00:00

Setting HA startup configuration on node node2.magedu.com.

chkconfig 版本 1.3.30.2 - 版权 (C) 1997-2000 Red Hat, Inc.

在 GNU 公共许可的条款下,本软件可以被自由发行。


用法:    chkconfig --list [name]

         chkconfig --add <name>

         chkconfig --del <name>

         chkconfig [--level <levels>] <name> <on|off|reset|resetpriorities>

[root@node1 ~]#



 #启动两个节点

 在第一个节点 192.168.0.45上操作

[root@node1 ~]# service heartbeat start       

logd is already running

Starting High-Availability services:

2020/12/01_08:34:22 INFO:  Resource is stopped

                                                           [确定]

[root@node1 ~]# ssh node2 'service heartbeat start'

Starting High-Availability services:

2020/12/01_08:34:39 INFO:  Resource is stopped

[确定]

[root@node1 ~]#



看日志

在第一个节点 192.168.0.45 上操作

[root@node1 ~]# tail -f /var/log/messages

Dec  1 08:34:53 node1 pengine: [4969]: info: determine_online_status: Node node2.magedu.com is online

Dec  1 08:34:53 node1 crmd: [4961]: info: do_state_transition: State transition S_POLICY_ENGINE -> S_TRANSITION_ENGINE [ input=I_PE_SUCCESS cause=C_IPC_MESSAGE origin=route_message ]

Dec  1 08:34:53 node1 tengine: [4968]: info: process_te_message: Processing graph derived from /var/lib/heartbeat/pengine/pe-input-3.bz2

Dec  1 08:34:53 node1 tengine: [4968]: info: unpack_graph: Unpacked transition 3: 0 actions in 0 synapses

Dec  1 08:34:53 node1 tengine: [4968]: info: run_graph: Transition 3: (Complete=0, Pending=0, Fired=0, Skipped=0, Incomplete=0)

Dec  1 08:34:53 node1 tengine: [4968]: info: notify_crmd: Transition 3 status: te_complete - <null>

Dec  1 08:34:53 node1 crmd: [4961]: info: do_state_transition: State transition S_TRANSITION_ENGINE -> S_IDLE [ input=I_TE_SUCCESS cause=C_IPC_MESSAGE origin=route_message ]

Dec  1 08:34:53 node1 pengine: [4969]: info: process_pe_message: Transition 3: PEngine Input stored in: /var/lib/heartbeat/pengine/pe-input-3.bz2

Dec  1 08:35:59 node1 avahi-daemon[4901]: Invalid query packet.

Dec  1 08:36:39 node1 last message repeated 8 times


生产环境中建议使用多播,而不是使用广播,只有两个节点 ,使用单播也可以


 在第一个节点 192.168.0.45上操作

[root@node1 ~]# netstat -tnlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3906/./hpiod

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -

tcp        0      0 0.0.0.0:706                 0.0.0.0:*                   LISTEN      3492/rpc.statd

tcp        0      0 0.0.0.0:32803               0.0.0.0:*                   LISTEN      -

tcp        0      0 0.0.0.0:901                 0.0.0.0:*                   LISTEN      3972/xinetd

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      3919/php-fpm

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      4495/mysqld

tcp        0      0 0.0.0.0:875                 0.0.0.0:*                   LISTEN      4022/rpc.rquotad

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3440/portmap

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      4161/vsftpd

tcp        0      0 192.168.0.45:53             0.0.0.0:*                   LISTEN      3846/named

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      3846/named

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3940/sshd

tcp        0      0 0.0.0.0:23                  0.0.0.0:*                   LISTEN      3972/xinetd

tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3954/cupsd

tcp        0      0 0.0.0.0:5560                0.0.0.0:*                   LISTEN      4962/mgmtd  (management daemon的进程,就是crm的相关进程)

tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      4729/master

tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      3846/named

tcp        0      0 0.0.0.0:892                 0.0.0.0:*                   LISTEN      4064/rpc.mountd

tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3911/python

tcp        0      0 :::22                       :::*                        LISTEN      3940/sshd

tcp        0      0 ::1:953                     :::*                        LISTEN      3846/named

[root@node1 ~]#


 在第二个节点 192.168.0.55上操作,也启动了 mgmtd 进程 

[root@node2 ~]# netstat -tnlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3883/./hpiod

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -

tcp        0      0 0.0.0.0:32803               0.0.0.0:*                   LISTEN      -

tcp        0      0 0.0.0.0:901                 0.0.0.0:*                   LISTEN      3949/xinetd

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      3896/php-fpm

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      4451/mysqld

tcp        0      0 0.0.0.0:682                 0.0.0.0:*                   LISTEN      3468/rpc.statd

tcp        0      0 0.0.0.0:875                 0.0.0.0:*                   LISTEN      3999/rpc.rquotad

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3416/portmap

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      4138/vsftpd

tcp        0      0 192.168.0.55:53             0.0.0.0:*                   LISTEN      3823/named

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      3823/named

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3917/sshd

tcp        0      0 0.0.0.0:23                  0.0.0.0:*                   LISTEN      3949/xinetd

tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3931/cupsd

tcp        0      0 0.0.0.0:5560                0.0.0.0:*                   LISTEN      11235/mgmtd

tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      4727/master

tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      3823/named

tcp        0      0 0.0.0.0:892                 0.0.0.0:*                   LISTEN      4041/rpc.mountd

tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3888/python

tcp        0      0 :::22                       :::*                        LISTEN      3917/sshd

tcp        0      0 ::1:953                     :::*                        LISTEN      3823/named

[root@node2 ~]#


crmd 需要在每一个节点上运行起来


crm提供了很多命令行工具,有些是cib开头的


在第一个节点 192.168.0.45上操作

[root@node1 ~]# pwd

/root

[root@node1 ~]# cib        (按 Tab 键)

cibadmin  ciblint



[root@node1 ~]# cibadmin --help        #用来管理 cib 信息库的工具  专门用于解析xml的cib的信息库的

usage: cibadmin [V?o:QDUCEX:t:Srwlsh:MmBfbdRx:pP5] command

        where necessary, XML data will be obtained using -X, -x, or -p options

Options

        --obj_type (-o) <type>  object type being operated on

                Valid values are: nodes, resources, constraints, crm_config, status

        --verbose (-V)  turn on debug info.  additional instance increase verbosity

        --help (-?)     this help message


Commands

        --cib_erase (-E)        Erase the contents of the whole CIB    #清空信息库

        --cib_query (-Q)       #查询信息库

        --cib_create (-C)

        --md5-sum (-5)  Calculate an XML file's digest.  Requires either -X, -x or -p

        --cib_replace (-R)      Recursivly replace an object in the CIB

        --cib_update (-U)       Recursivly update an object in the CIB

        --cib_modify (-M)       Find the object somewhere in the CIB's XML tree and update is as --cib_update would

        --cib_delete (-D)

                        Delete the first object matching the supplied criteria

                        Eg. <op id="rsc1_op1" name="monitor"/>

                        The tagname and all attributes must match in order for the element to be deleted

        --cib_delete_alt (-d)

                        Delete the object at specified fully qualified location

                        Eg. <resource id="rsc1"><operations><op id="rsc1_op1"/>...

                        Requires -o

        --cib_bump (-B)

        --cib_ismaster (-m)

        --cib_sync (-S)


XML data

        --crm_xml (-X) <string>         Retrieve XML from the supplied string

        --xml-file (-x) <filename>      Retrieve XML from the named file

        --xml-pipe (-p)                 Retrieve XML from STDIN


Advanced Options

        --host (-h)     send command to specified host. Applies to cib_query and cib_sync commands only

        --local (-l)    command takes effect locally on the specified host

        --no-bcast (-b) command will not be broadcast even if it altered the CIB

        --sync-call (-s)        wait for call to complete before returning

[root@node1 ~]#





[root@node1 ~]# crm    #(按tab键)

crmadmin       crm_failcount(统计下故障转移次数的)  crm_resource(用来作资源配置的)   crm_uuid

crm_attribute(定义(或获取)每一个资源的相关属性)  crm_master     crm_sh(crm的shell,crm中的命令行工具)         crm_verify(校验crm配置完后的主配置文件cib.xml有没有语法错误)

crm_diff       crm_mon(crom monitor 监控集群)        crm_standby(让自己转为备节点)

[root@node1 ~]# crm_mon            #每隔15秒刷新一次当前的集群状态的

Refresh in 14s...


============

Last updated: Tue Dec  1 09:02:20 2020

Current DC: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104)  #当前DC

2 Nodes configured.    #两个节点

0 Resources configured.

============


Node: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104): online    #node1节点在线

Node: node2.magedu.com (9c0242c7-8660-450b-a1dc-63eb26ef1636): online    #node2节点在线


在第一个节点 192.168.0.45上操作

[root@node1 ~]# crm_resource --help

usage: crm_resource [-?VS] -(L|Q|W|D|C|P|p) [options]

        --help (-?)     : this help message

        --verbose (-V)  : turn on debug info. additional instances increase verbosity

        --quiet (-Q)    : Print only the value on stdout (for use with -W)


Commands

        --list (-L)     : List all resources

        --query-xml (-x)        : Query a resource

                          Requires: -r

        --locate (-W)   : Locate a resource        #定位 查找一个资源在哪个节点上

                          Requires: -r

        --migrate (-M)  : Migrate a resource from it current location.  Use -H to specify a destination        #手动转移一个资源,从一个节点转移到另一个节点

                If -H is not specified, we will force the resource to move by creating a rule for the current location and a score of -INFINITY

                NOTE: This will prevent the resource from running on this node until the constraint is removed with -U

                          Requires: -r, Optional: -H, -f, --lifetime

        --un-migrate (-U)       : Remove all constraints created by -M

                          Requires: -r

        --delete (-D)   : Delete a resource from the CIB        #删除一个资源

                          Requires: -r, -t

        --cleanup (-C)  : Delete a resource from the LRM    #清空一个资源的状态信息

                          Requires: -r.  Optional: -H

        --reprobe (-P)  : Recheck for resources started outside of the CRM    #重新探测

                          Optional: -H

        --refresh (-R)  : Refresh the CIB from the LRM        #刷新

                          Optional: -H

        --set-parameter (-p) <string>   : Set the named parameter for a resource    #给资源设置参数

                          Requires: -r, -v.  Optional: -i, -s, --meta

        --get-parameter (-g) <string>   : Get the named parameter for a resource     #得到

                          Requires: -r.  Optional: -i, -s, --meta

        --delete-parameter (-d) <string>: Delete the named parameter for a resource  #删除

                          Requires: -r.  Optional: -i, --meta


Options

        --resource (-r) <string>        : Resource ID

        --resource-type (-t) <string>   : Resource type (primitive, clone, group, ...)

        --property-value (-v) <string>  : Property value

        --host-uname (-H) <string>      : Host name

        --meta  : Modify a resource's configuration option rather than one which is passed to the resource agent script.

                For use with -p, -g, -d

        --lifetime (-u) <string>        : Lifespan of migration constraints

        --force (-f)    : Force the resource to move by creating a rule for the current location and a score of -INFINITY

                This should be used if the resource's stickiness and constraint scores total more than INFINITY (Currently 100,000)

                NOTE: This will prevent the resource from running on this node until the constraint is removed with -U or the --lifetime duration expires

        -s <string>     : (Advanced Use Only) ID of the instance_attributes object to change

        -i <string>     : (Advanced Use Only) ID of the nvpair object to change/delete

[root@node1 ~]#


[root@node1 ~]# crm_standby --help        #让自己转为备节点

usage: crm_standby [-?V] -(u|U) -(D|G|v) [-l]

Options

        --help (-?)     : this help message

        --verbose (-V)  : turn on debug info. additional instances increase verbosity

        --quiet (-Q)    : Print only the value on stdout (use with -G)

        --get-value (-G)        : Retrieve rather than set the preference to be promoted

        --delete-attr (-D)      : Delete rather than set the attribute

        --attr-value (-v) <string>      : Value to use (ignored with -G)

        --attr-id (-i) <string> : The 'id' of the attribute. Advanced use only.

        --node-uuid (-u) <node_uuid>    : UUID of the node to change        #指定哪个节点转为备节点

        --node-uname (-U) <node_uname>  : uname of the node to change    #指定哪个名称的节点转为备节点

        --lifetime (-l) <string>        : How long the preference lasts (reboot|forever)

            If a forever value exists, it is ALWAYS used by the CRM

            instead of any reboot value

[root@node1 ~]#


[root@node1 ~]# crm_attribute --help

usage: crm_attribute [-?V] -(D|G|v) [options]

Options

        --help (-?)     : this help message

        --verbose (-V)  : turn on debug info. additional instances increase verbosity

        --quiet (-Q)    : Print only the value on stdout (use with -G)

        --get-value (-G)        : Retrieve rather than set the preference to be promoted

        --delete-attr (-D)      : Delete rather than set the attribute

        --attr-value (-v) <string>      : Value to use (ignored with -G)

        --attr-id (-i) <string> : The 'id' of the attribute. Advanced use only.

        --node-uuid (-u) <node_uuid>    : UUID of the node to change    #获取节点的属性?

        --node-uname (-U) <node_uname>  : uname of the node to change    #获取某名称的节点的属性?

        --set-name (-s) <string>        : Set of attributes in which to read/write the attribute

        --attr-name (-n) <string>       : Attribute to set

        --type (-t) <string>    : Which section of the CIB to set the attribute: (nodes|status|crm_config)

            -t=nodes options: -(U|u) -n [-s]

            -t=status options: -(U|u) -n [-s]

            -t=crm_config options: -n [-s]

        --inhibit-policy-engine (-!)    : Make a change and prevent the TE/PE from seeing it straight away.

            You may think you want this option but you don't. Advanced use only - you have been warned!

[root@node1 ~]#



在第一个节点 192.168.0.45上操作

[root@node1 ~]# crm_sh        #进入crm 的 shell 模式

crm #

crm #

crm # help            #帮助命令

Usage: crm (nodes|config|resources)        #管理节点|配置|资源

crm #

crm # nodes        

crm nodes #            #子模式,跟交换机配置类似?

crm nodes # help

Usage: nodes (status|list)

crm nodes #

crm nodes # list        #列出当前的节点

   <node id="9d79885a-9277-4672-9da6-914b79278104" uname="node1.magedu.com" type="normal"/>

   <node id="9c0242c7-8660-450b-a1dc-63eb26ef1636" uname="node2.magedu.com" type="normal"/>

crm nodes #

crm nodes # status        #获取每个节点的状态

   <node_state id="9d79885a-9277-4672-9da6-914b79278104" uname="node1.magedu.com" crmd="online" crm-debug-origin="do_lrm_query" shutdown="0" in_ccm="true" ha="active" join="member" expected="member">

   <node_state id="9c0242c7-8660-450b-a1dc-63eb26ef1636" uname="node2.magedu.com" ha="active" crm-debug-origin="do_lrm_query" crmd="online" shutdown="0" in_ccm="true" join="member" expected="member">

crm nodes #

crm nodes # exit            # 退出

ERROR: ** unknown exception encountered, details follow


Traceback (most recent call last):

  File "/usr/sbin/crm_sh", line 338, in ?

    rc = main_loop(args)

  File "/usr/sbin/crm_sh", line 258, in main_loop

    return d()

  File "/usr/sbin/crm_sh", line 257, in <lambda>

    d = lambda: func(*cmd_args, **cmd_options)

  File "/usr/lib/heartbeat/crm_commands.py", line 73, in exit

    sys.exit(0)

NameError: global name 'sys' is not defined

[root@node1 ~]#


在第一个节点 192.168.0.45上操作

[root@node1 ~]# crm_sh

crm # help

Usage: crm (nodes|config|resources)

crm # resources

crm resources # help

Usage: resources (status|list)

crm resources #

crm resources # list        #列出所有资源

NO resources configured

crm resources #

crm resources # exit

ERROR: ** unknown exception encountered, details follow


Traceback (most recent call last):

  File "/usr/sbin/crm_sh", line 338, in ?

    rc = main_loop(args)

  File "/usr/sbin/crm_sh", line 258, in main_loop

    return d()

  File "/usr/sbin/crm_sh", line 257, in <lambda>

    d = lambda: func(*cmd_args, **cmd_options)

  File "/usr/lib/heartbeat/crm_commands.py", line 73, in exit

    sys.exit(0)

NameError: global name 'sys' is not defined

[root@node1 ~]#


在第一个节点 192.168.0.45上操作

[root@node1 i386]# pwd

/root/i386

[root@node1 i386]#

[root@node1 i386]# ls hear*

heartbeat-2.1.4-11.el5.i386.rpm      heartbeat-pils-2.1.4-11.el5.i386.rpm

heartbeat-gui-2.1.4-11.el5.i386.rpm(图形界面窗口,在windows中可以执行,,,否则只有打开linux的图形界面才能打开 heartbeat-gui ,需要账号密码,账号是自动创建的hacluster,默认无密码,需要在哪个节点上使用hacluster,就在哪个节点上配置密码 )  heartbeat-stonith-2.1.4-11.el5.i386.rpm

[root@node1 i386]#

[root@node1 i386]# tail /etc/passwd

redis:x:2530:2530::/home/redis:/bin/bash

vuser:x:2531:2531::/var/ftproot:/sbin/nologin

vsftpd:x:2532:2532::/home/vsftpd:/sbin/nologin

nfstest:x:510:510::/home/nfstest:/bin/bash

eucalyptus:x:2533:2533::/home/eucalyptus:/bin/bash

fedora:x:2534:2534::/home/fedora:/bin/bash

redhat:x:2535:2536::/home/redhat:/bin/bash

test:x:2536:2537::/home/test:/bin/bash

ha:x:2537:2538::/home/ha:/bin/bash

hacluster:x:307:307:heartbeat user:/var/lib/heartbeat/cores/hacluster:/sbin/nologin

[root@node1 i386]#



[root@node1 i386]# passwd hacluster

Changing password for user hacluster.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[root@node1 i386]#


[root@node1 i386]# hb_gui  &      # 即 heartbeat gui  与符号表示在后台运行

image.png

图形界面是在windows中打开的,所以上面的putty报错



我使用的是 xshell xmanager 是可以打开的 ,如下图,其实是 linux 的窗口,在windows中打开了而己

[root@node1 i386]# hb_gui  &   

image.png


下图是 mgmt的 5560端口 

可连接任何一节的 hacluster用户,但是用户必须要有密码

马哥的图

image.png


有ping node 所以三个节点

dc是 node2

Node Name:节点名称

Online:在线

Is it DC:是不是DC

Type:member

Standby:是不是备用节点, false表示不是备用



image.png

image.png

no Quorum Policy : 不满足法定票数时候的策略 stop freeze ignore

with quorum  # 满足法定票数,因为加上  ping node 是三票

symmetric  cluster:

对称集群(左对称):都可转移,可以阻止哪个不能转移,,堵的策略;;;;;古代关城门,根据画像来堵

非对称集群(右对称):都不能转移,可以允许哪个能转移,,通的策略;;;;古代关城门,根据良民证来通

Stonith Enabled:必须要有stonith设备的,配置stonith的

Stonith Action:重启还是关机;;;;一般重启是最好的策略

Default Resource Stickiness: 默认资源粘性  为0表示运行在哪个节点上都可以,墙头划,随风倒,你让它在哪,它就在哪,为100表示更倾向于留在当前节点;正数表示更倾向留在当前节点,负数表示更倾向离开当前节点,,,位置约束才表示更倾向于留在哪个节点

Default Resource Failure Stickiness: 马哥没解释

Is Managed Default:默认是不是可管理的,以后讲到crm时再说


image.png

DC Deadtime:DC多长时间会死掉

Cluster Recheck Interval:集群重新检测的时间间隔

Election Timeout:选举DC(还有某节点故障了,它的资源最终运行在哪个节点上,最终要计算出来;;;还有crmd等等 )的超时时间

image.png


image.png


image.png


添加资源,不能添加节点(因为节点在ha.cf中配置的)

image.png

image.png

native 就是 primitive 基本资源

group 组资源



location   约束

order   约束

colocation   约束


当然还有 clone , master/slave,不能直接创建,  ,它首先是 primitive  或 group,,然后再 clone 或 master/slave,


image.png


我的图 与马哥的图差不多,就是语言不一样

image.png

image.png

image.png

image.png


image.png

image.png

image.png


创建 vip ,,,httpd 资源


资源=>添加=>普通资源=>确定

资源id,属于哪个组(应该同进同退,不然会在不同的节点上)

对于crm来讲我们要想配置配置文件的话(要改cib配置文件的话),一般会从背后连到DC那个crmd上,非DC的crmd本身不允许修改的,DC上改完后,DC会同步到其它每一个节点,,,,但是各种工具会自动连接DC( 在哪个节点上面执行都没关系它背后会自动的协调在DC上进行执行)

前端的各种工具,比如 corosync 上,也是使用crm在哪个节点上面执行都没关系,它背后会自动的协调在DC上进行执行



使用# hb_gui & 弹出图形界面时

最好这里连DC的那个ip地址

好像随便连哪个节点但马哥出了点问题

所以说最好二字,,,,但DC可能是不确定的,所以要先看下DC是哪个IP

image.png


一)下面几个图是创建一个vip资源

image.png


image.png


image.png


image.png

image.png

image.png

image.png


在 192.168.0.45 这个节点看看 

[1]+  Exit 1                  hb_gui

[root@node1 i386]# ifconfig            #vip己经配置好了

eth0      Link encap:Ethernet  HWaddr 00:0C:29:3D:B0:3C

          inet addr:192.168.0.45  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe3d:b03c/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:155631 errors:0 dropped:0 overruns:0 frame:0

          TX packets:115299 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:26058200 (24.8 MiB)  TX bytes:53989377 (51.4 MiB)

          Interrupt:67 Base address:0x2000


eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:3D:B0:3C

          inet addr:192.168.0.50  Bcast:192.168.0.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000


lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:52128 errors:0 dropped:0 overruns:0 frame:0

          TX packets:52128 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:45911894 (43.7 MiB)  TX bytes:45911894 (43.7 MiB)


[root@node1 i386]#


二)下面几个图是创建一个httpd资源

image.png

image.png


下面两图 ocf的 apache 和 lsb 的httpd 都可以

 ocf的 apache  可接受参数,灵活性更大

 lsb 的httpd  配置更简单,  不接受参数 (lsb格式的脚本基本上不接受参数的)

 我这里使用的是 lsb 的httpd 


image.png

image.png


image.png


image.png

image.png



默认资源平衡运行

在不同节点运行

可以使用排列约束,它俩必须在一起,

也可以把它们加为一个组


下面几个图是定义为一个组把它们加进来

image.png

image.png


必须要先定义组,然后才能添加组里面的资源

image.png

image.png


先删除webip和 httpd 两个资源吧,顺序是 先停掉,再清理资源(防止保留状态),最后删除

image.png



重新开始 添加组

image.png


1)在组里添加 webip资源

image.png

image.png

image.png


2)在组里添加 httpd 资源

image.png

image.png

image.png

在组上右键 start,可以启动组里面的所有资源

image.png


马哥的看到 组里面资源启动了

image.png

马哥能正常访问了

image.png

我这边没有看到组里面的资源运行

image.png


看日志,好像是 webip 有问题,

[root@node1 i386]# tail /var/log/messages

Dec  1 16:16:58 node1 tengine: [4968]: info: unpack_graph: Unpacked transition 67: 0 actions in 0 synapses

Dec  1 16:16:58 node1 tengine: [4968]: info: run_graph: Transition 67: (Complete=0, Pending=0, Fired=0, Skipped=0, Incomplete=0)

Dec  1 16:16:58 node1 pengine: [4969]: WARN: process_pe_message: Transition 67: WARNINGs found during PE processing. PEngine Input stored in: /var/lib/heartbeat/pengine/pe-warn-58.bz2

Dec  1 16:16:58 node1 tengine: [4968]: info: notify_crmd: Transition 67 status: te_complete - <null>

Dec  1 16:16:58 node1 pengine: [4969]: info: process_pe_message: Configuration WARNINGs found during PE processing.  Please run "crm_verify -L" to identify issues.

Dec  1 16:16:58 node1 haclient: on_event:evt:cib_changed

Dec  1 16:16:58 node1 crmd: [4961]: info: do_state_transition: State transition S_TRANSITION_ENGINE -> S_IDLE [ input=I_TE_SUCCESS cause=C_IPC_MESSAGE origin=route_message ]

Dec  1 16:16:58 node1 haclient: on_event:evt:cib_changed

Dec  1 16:16:59 node1 mgmtd: [4962]: ERROR: unpack_rsc_op: Hard error: webip_start_0 failed with rc=6.

Dec  1 16:16:59 node1 mgmtd: [4962]: ERROR: unpack_rsc_op:   Preventing webip from re-starting anywhere in the cluster


[root@node1 i386]#


image.png

先停止,清理,删除 webip (vip) 这个资源吧 

然后 再在资源组 webservice 里面添加webip  (vip) 这个资源


停掉 webservice ,再启动 webservcie 这个组,然后就可以看到正常的了

组里面的资源启动顺序是默认从上往下依次启动

image.png

[root@node1 i386]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:3D:B0:3C

          inet addr:192.168.0.45  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe3d:b03c/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:227174 errors:0 dropped:0 overruns:0 frame:0

          TX packets:188330 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:34990572 (33.3 MiB)  TX bytes:120763522 (115.1 MiB)

          Interrupt:67 Base address:0x2000


eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:3D:B0:3C

          inet addr:192.168.0.55  Bcast:192.168.0.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000


lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:109376 errors:0 dropped:0 overruns:0 frame:0

          TX packets:109376 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:111751682 (106.5 MiB)  TX bytes:111751682 (106.5 MiB)


[root@node1 i386]#

image.png

原来 webip又配置错了 如何排错? 看 /var/log/messages 

[root@node1 i386]# ifconfig        # 在第一个节点 192.168.0.45 上配置的vip (eth0:0)上竟然是 192.168.0.55 ,应该是 192.168.0.50)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:3D:B0:3C

          inet addr:192.168.0.45  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe3d:b03c/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:233584 errors:0 dropped:0 overruns:0 frame:0

          TX packets:195205 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:35835795 (34.1 MiB)  TX bytes:126868439 (120.9 MiB)

          Interrupt:67 Base address:0x2000


eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:3D:B0:3C

          inet addr:192.168.0.55  Bcast:192.168.0.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000


lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:115689 errors:0 dropped:0 overruns:0 frame:0

          TX packets:115689 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:117881712 (112.4 MiB)  TX bytes:117881712 (112.4 MiB)


[root@node1 i386]#


所以 先停止,清理,删除 webip (vip) 这个资源吧 

然后 再在资源组 webservice 里面添加webip  (vip) 这个资源

如下图 ,现在一切正常 

image.png

可以正常访问         http://192.168.0.50/index.html

image.png


让 node1 成为 备用节点看看

image.png


资源运行在 node2 节点上了,,,记住如果有问题的话 ,要清理资源(比如 清理 webservice组资源,清理webip资源,清理 httpd资源);再修改添加

image.png


ha.cf当中 auto_failback on,默认都是转移回去的

image.png

image.png


[root@node1 ~]# cd /etc/ha.d/

[root@node1 ha.d]# vim ha.cf

auto_failback on


资源粘性,资源对当前节点的分数大于0,且大于对其它的节点的位置分数



三)下面几个图是创建一个nfs资源

    1)先停掉资源组

image.png


排列约束,资源是否必须要一起 true

按顺序添加就按照顺序来启动 true

image.png

image.png





image.png

image.png

image.png

image.png

只好把 webservice 清理资源,再httpd 先清理,再删掉,然后再添加 httpd 吧,这样子,httpd就在最下面了,

image.png

image.png


image.png

image.png

我这边正常了,,但是马哥那边 webstore 挂不上(马哥那边是由于nfs的ip地址错了)

image.png

http://192.168.0.50/index.html

image.png

如下图,马哥先停掉组资源,在这里修改nfs地址的  (也就是ocf的参数)

image.png



马哥 改了nfs的ip还是有问题,他看日志,解决问题的思路

image.png

在第一个节点 192.168.0.45

[root@node1 ha.d]# cd /var/lib/heartbeat/crm

[root@node1 crm]# ls

cib.xml  cib.xml.last  cib.xml.sig  cib.xml.sig.last

[root@node1 crm]# cat cib.xml #就可以看到关于crm的配置



切记,每一次 操作了有错误,都要清理,清理,清理 ,清理,清理资源,再进行操作,

因为它是根据上一次的状态信息来决定下次转移时(任何动作)????如何完成的


马哥 改了 nfs 的 ip 还是有问题,,他最后的办法是 清理,清理,清理,然后问题解决了

image.png

image.png




下面 ,把 node1 的 heartbeat down掉看看

image.png


在第一个节点 192.168.0.45 上执行

[root@node1 crm]# /etc/init.d/heartbeat stop

Stopping High-Availability services:

                                                           [确定]

[root@node1 crm]#



在第二个节点 192.168.0.55 上执行  (因为第一个节点 192.168.0.45 上无法执行了,因为它的 heartbeat停了)

[root@node2 ~]# tail /var/log/messages

Dec  2 09:36:13 node2 crmd: [11234]: info: do_state_transition: State transition S_TRANSITION_ENGINE -> S_IDLE [ input=I_TE_SUCCESS cause=C_IPC_MESSAGE origin=route_message ]

Dec  2 09:36:43 node2 heartbeat: [11219]: WARN: node node1.magedu.com: is dead

Dec  2 09:36:43 node2 heartbeat: [11219]: info: Link node1.magedu.com:eth0 dead.

Dec  2 09:36:43 node2 crmd: [11234]: notice: crmd_ha_status_callback: Status update: Node node1.magedu.com now has status [dead]

Dec  2 09:37:49 node2 named[3823]: listening on IPv4 interface eth0:3, 192.168.0.50#53

Dec  2 09:38:20 node2 cib: [11230]: info: cib_stats: Processed 12 operations (2500.00us average, 0% utilization) in the last 10min

Dec  2 09:40:21 node2 crm_mon: [14931]: info: G_main_add_SignalHandler: Added signal handler for signal 15

Dec  2 09:40:21 node2 crm_mon: [14931]: info: G_main_add_SignalHandler: Added signal handler for signal 2

Dec  2 09:41:38 node2 crm_mon: [14934]: info: G_main_add_SignalHandler: Added signal handler for signal 15

Dec  2 09:41:38 node2 crm_mon: [14934]: info: G_main_add_SignalHandler: Added signal handler for signal 2

[root@node2 ~]#

 


在第二个节点 192.168.0.55 上执行  (因为第一个节点 192.168.0.45 上无法执行了,因为它的 heartbeat停了)

[root@node2 crm]# crm_mon        #(即 crm monitor)

Refresh in 14s...


============

Last updated: Wed Dec  2 09:41:38 2020

Current DC: node2.magedu.com (9c0242c7-8660-450b-a1dc-63eb26ef1636)

2 Nodes configured.

1 Resources configured.

============


Node: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104): OFFLINE

Node: node2.magedu.com (9c0242c7-8660-450b-a1dc-63eb26ef1636): online


Resource Group: webservice

    webip       (ocf::heartbeat:IPaddr):        Started node2.magedu.com

    webstore    (ocf::heartbeat:Filesystem):    Started node2.magedu.com

    httpd       (lsb:httpd):    Started node2.magedu.com



http://192.168.0.50/index.html    正常访问

image.png




在第一个节点 192.168.0.45 上执行

[root@node1 crm]# /etc/init.d/heartbeat start

Starting High-Availability services:

2020/12/02_09:44:58 INFO:  Resource is stopped

                                                           [确定]

[root@node1 crm]#

[root@node1 crm]# tail /var/log/messages            #由这个日志,大约可以看出来 node1(第一个节点 192.168.0.45 ) failback了

Dec  2 09:45:16 node1 lrmd: [12075]: WARN: For LSB init script, no additional parameters are needed.

Dec  2 09:45:16 node1 lrmd: [11863]: info: RA output: (httpd:start:stdout) 启动 httpd:

Dec  2 09:45:16 node1 lrmd: [11863]: info: RA output: (httpd:start:stdout) [

Dec  2 09:45:16 node1 lrmd: [11863]: info: RA output: (httpd:start:stdout) 确定

Dec  2 09:45:16 node1 lrmd: [11863]: info: RA output: (httpd:start:stdout) ]

Dec  2 09:45:16 node1 lrmd: [11863]: info: RA output: (httpd:start:stdout)

Dec  2 09:45:16 node1 lrmd: [11863]: info: RA output: (httpd:start:stdout)

Dec  2 09:45:16 node1 crmd: [11866]: info: process_lrm_event: LRM operation httpd_start_0 (call=7, rc=0) complete

Dec  2 09:45:16 node1 setroubleshoot: SELinux is preventing httpd from loading /usr/local/apache/modules/libphp5.so which requires text relocation. For complete SELinux messages. run sealert -l 80d61f8e-d344-4d6a-836a-65f9b96e22a6

Dec  2 09:45:17 node1 haclient: on_event: from message queue: evt:cib_changed

[root@node1 crm]# 



[root@node1 crm]# crm_mon        #看监控        又转回 node1(第一个节点 192.168.0.45 ) 

Refresh in 14s...


============

Last updated: Wed Dec  2 09:50:57 2020

Current DC: node2.magedu.com (9c0242c7-8660-450b-a1dc-63eb26ef1636)

2 Nodes configured.

1 Resources configured.

============


Node: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104): online

Node: node2.magedu.com (9c0242c7-8660-450b-a1dc-63eb26ef1636): online


Resource Group: webservice

    webip       (ocf::heartbeat:IPaddr):        Started node1.magedu.com

    webstore    (ocf::heartbeat:Filesystem):    Started node1.magedu.com

    httpd       (lsb:httpd):    Started node1.magedu.com



 下面是不通过组,通过约束的方式把这三个资源定义在一起

 还要有启动顺序: webip,webstore,httpd

可以让它更倾向于运行在 node1 上

1)停止 webservice

image.png


2)清理组webservice 下面的资源,清理组webservice 

image.png

3)删除组webservice 

image.png

4)添加三个资源

    a)添加 webip 资源

image.png

image.png



 b)添加 webstore

image.png

image.png

image.png

 b)添加 httpd

image.png

image.png

image.png


启动起来三个资源,看到它们位于不同的节点上

5) 增加排列

image.png


增加排列 httpd与webstore

image.png

image.png

image.png

image.png


增加排列 webip与httpd

image.png

image.png


一般 webip与 httpd 没有启动的先后顺序,

但是 如果  httpd 监听在webip上面,那么应该先启动 webip,再启动httpd

最好还是设 webstore 与 webip 的排列吧

  webstore 依赖于 webip,设置好之后 如下的关系

image.png


6) 增加顺序

image.png

image.png

image.png



7)资源与节点的关系

由下图,看到资源粘性都为0

image.png



资源粘性改成 100 试试

image.png

昨天不知怎么搞的 ,几个服务都运行不起来了,查 /var/log/messages 和 crm_mon 都看不出原因

如下图点击 右下角  缺省,就可以运行了image.png

资源粘性,更倾向于留在当前节点

image.png


资源与节点的位置关系,更倾向于留在哪个节点


位置约束:无论对于哪一个资源,我们给它非常大的分数,它更倾向于运行在某个节点上,

最终会导致三个资源的结合性的值都会大于资源粘性值??? 没听懂


image.png

image.png

image.png

image.png


image.png

image.png

image.png

上图点 应用后 不管原来资源在哪里,都会直接切换到 node2 上


image.png

image.png

看看 所有资源的粘性值与位置约束值的分数


资源对于node1的分数: webip的资源粘性 + webstore的 资源粘性100 + httpd的 资源粘性100 = 300

资源对于node2的分数: webip的位置约束的无穷大 + webstore的 资源粘性100 + httpd的 资源粘性100  = 无穷大

所以所有资源(它们是连在一起运行的)更倾身于在node2上运行


记住: 位置约束分数是要加起来进行比较的,如果没有位置约束分数,那么就用它的粘性值来计算



现在资源运行在node2 ,把node2关机,看资源是否会转移


如下图 node2关机

image.png



过一会儿 

http://192.168.0.50/index.html 可以打开

image.png


node2停掉后,node1会始终等待node2的心跳信息,默认会等待30秒,

所以直接关掉node2,node1的等待时间比停止 hearbeat 服务要慢,

node2停止 hearbeat 服务时,会通知其它节点,我停掉了,所以速度快



node2停掉后,

在节点一 192.168.0.45上

#反正 大约要过30秒,才看到如下的最终信息

[root@node1 ~]# crm_mon

Refresh in 14s...


============

Last updated: Thu Dec  3 13:12:52 2020

Current DC: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104)

2 Nodes configured.

3 Resources configured.

============


Node: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104): online

Node: node2.magedu.com (9c0242c7-8660-450b-a1dc-63eb26ef1636): OFFLINE 


webip   (ocf::heartbeat:IPaddr):        Started node1.magedu.com

webstore        (ocf::heartbeat:Filesystem):    Started node1.magedu.com

httpd   (lsb:httpd):    Started node1.magedu.com


node2重启后,会重新加入集群中去的(要确保hearbeat服务自动启动)

资源更倾向于 node2,所以资源又会在node2上

image.png


heartbeat比 cronsync 更简单一点

普通分类: