Linux运维 第五阶段(二)heartbeat V2(HA)

Linux运维 第五阶段(二)heartbeat V2HA

 

hahigh availablity

一、相关概念

1

directorActive,Passive两个node,或primary,standby),一个主node一个备node,两个node上的VIP相同MAC不同,一旦A-node故障,资源转移至P-node上时,前面的router要知道当前活动nodeVIP对应的MAC地址,如何让前面的router知道?因为通告仅在主机刚接入网络时才通告,这时使用强行通告

 

HA的功能就是依靠资源在各节点间转移来完成

HA-resourceIPSERVICESTONITH(硬件设备))

在高可用集群中,对外提供的服务绝不能开机自启动,必须要由CRM管理(重要!!!)

failover(故障转移,如A节点故障资源转移到P节点)

failback(故障恢复,如A-node恢复正常,资源又转移回来,假设A的资源粘性>B

资源粘性(资源和节点间的关系,资源更倾向于运行在哪个node,如A-node恢复正常要不要转移回来,取决于资源粘性)

HA集群事务(传递心跳信息、资源粘性比较的管理、事务协调等集群事务相关信息)

message layernode间专门用来传递集群事务信息的通道,通过专用的信息通道传递,要求效率要高udp,这个层次称为message layer,每个node都监听在某个udpport上,它仅用来传递信息,并不负责后期信息的计算和比较)

CRMcluster resource manager,利用message layer,统计、收集集群上每个node资源的状态,计算出资源应该运行在哪个node上,再采取相应动作,作出高可用决策,CRM这个程序在每个node上都运行,计算是由推选的指定的协调员DC完成的,CRM不但监控节点,还监控节点上运行的资源的状态)

DCdesignated coordinator,或Designated Controller,包括PETEPEpolicy engine,负责计算并得出结果),TEtransaction engineTEPE计算得出的结果,指挥着LRM将挂掉的node的服务down掉,重启该node服务,若仍有问题再转移资源开启另一node的服务start),例如A-node上的服务不工作时,试重启该node的服务,而不是直接转移node,转移node消耗的资源要比重启服务大的多)

LRMlocal resource managerLRM接受TE指挥,采取动作,负责真正执行,启用服务时(ifconfigip addr、脚本))

RAresource agent,可理解为脚本,独特格式的脚本,LSB风格(linux standard base,负责集群资源管理的脚本),最起码具备startstoprestartstatus功能)

RGresource group,将某服务涉及到的资源归为一类,同进同退,例如LVS服务中ipvsVIP归为一组)

注:PETELRM均是CRM的组件,CRM依赖于message layer将那些本身不具有ha能力的服务(httpd,ip)也能工作在ha的场景中,提供ha功能,CRM是个通用平台,向RA提供高可用能力,如果没有CRMRA能否实现ha?开发一软件实现CRMRA的功能(这称为ha-aware applicationha-aware的软件)

 

资源约束(resource constraint,资源和资源之间的关系,倾向性,包括三种:location constraintcollation constraintorder constraint):

location constraint(位置约束,资源和节点的倾向性,资源对节点的依赖程度,作为资源粘性的补充,在同一主机上可能有多个资源,这些资源作为一个单位同进同退,某服务能否运行在这个node上取决于所有资源倾向性的分数之和,用分数score衡量,正值表示倾向于此节点,负值表示倾向于逃离此节点,例如,定义资源在A-node上为10,在P-node上定义为-1,则当A挂掉时才在P上运行,当A恢复服务则又在A上运行)

collation constraint(排列约束,定义资源和资源能否运行在同一node上,资源间的互斥性,资源和资源是倾向在一起还是分开,用score衡量,正值表示可以在一起,负值表示不能在一起)

order constraint(顺序约束,定义资源和资源间启动和关闭的次序,资源采取动作的次序,资源和资源间可能有依赖关系

 

资源隔离:

节点级别(STONITH,shoot the other node in the head

资源级别(如FC SAN SWITCH,光交换机,可实现在存储级别拒绝某节点的访问)

 

 

2

共享存储(DASNASSAN):

DASdirect attachment storage,块级别传输数据,效率高,直接连接到主机的主板总线上,控制器controller,适配器adapter

NASnetwork attachment storage,文件服务器,文件级别传输数据,如NFS

SANstorage area network,延长了DAS的存储线缆,并能将这一node的磁盘空间共享给其它node使用,有FC SAN(借助光通道fiber channel),IP SAN(借助internet protocoliscsi协议,i表示internet))

SCSIsmall computer system interface,内置了芯片,代替CPU加载硬盘内容到内存中,使得CPU解脱出来可运行其它程序,类似DMA机制direct memory accessSCSI报文只能在SCSI总线上传输,若借助光网络可传输更远距离)

注:在server-side将硬盘分区格式化通过SCSI报文输出,client-side在自己本地通过scsi驱动看到的是硬盘设备(scsi设备),可分区格式化装OS,而且是块级别传输

注:集群FS,某一方持有锁通过集群事务告知对方,CFS不能阻止集群分裂,集群分裂的结果是共享存储崩溃,一旦发现脑裂,就STONITHFENCE

iscsi-server共享存储挂了,如何做?做高可用(它本身就是共享存储,高可用也要用到共享存储,解决脑裂问题;若server的电源线挂了?使用两根电源线(对于高可用集群来说,其它node发现该节点挂了,要STONITHnode,要暴头两根电源线);存储设备的多路径(multipathclientiscsi-server间的线缆高可用,两根线缆)

注:mysql的双主模型(借助共享存储,集群FS),如何知道对方挂了?两个节点就要用到仲裁机制判断对方是否在线:一、借助于一网关,自己若能ping通网关,却ping不通对方,就认为对方挂了;二、借助于一共享磁盘,每隔一段时间往磁盘里写数据,若能在磁盘上发现有对方写的数据认为对方没挂;三、watchdoglinux内核中的功能,用于协调两个进程(watchdog同共享磁盘一样,可理解为是个设备,每一个进程启动后,通过unix的管道不停地向watchdog中写数据,如每隔5秒发一次数据,进程若发现不再往里写了会试图重启这个进程),watchdog经过特殊改造可实现仲裁功能

 

 

3

多节点集群:

高可用集群中若有奇数个node(至少三个),将不再采用第三方组件(仲裁机制)来判定其它node是否在线,采用quorum法定票数决策

例如有三个node组成高可用集群,分别为abc,这三个node运行在同一组播内,某一node会向其它node传递事务信息,DC为当前集群作决策,假设每个nodequorum都是1c节点出故障,ab大于quorum,则c认为它不在集群中,若DC恰好在c上,则在ab上通过CRM再推选出一个DC用来决策集群上的事务(收集信息、状态计算、集群事务的转换),将c上运行的资源收集起来,让当前某一活动node继续运行,提供正常服务

 

当某一node认为它已不是集群,要采取什么动作?集群的全局资源策略(集群中不具备法定票数的资源管理策略without_quorum_policy):

freeze(不再接收新的请求,当前连进的继续提供服务,不具备法定票数时用此项)

stop(最理想状况)

ignore(仅有两个node时采用此项)

注:高可用集群中一定要用隔离设备,即使是IP也会资源争用,只不过它没有共享存储危害大

 

若高可用集群中有四个nodeabcd法定票数依次为4212,总票数只要是奇数即可,例如ab联系不上cd了,根据quorumcd隔离

左对称(若d故障,资源可转至abc,若定义了cd上的资源为负无穷,则只能转至ab了)

右对称(若d故障,其它node中仅有一个或两个允许资源转移,剩下的对d上的资源都定义为负无穷)

注:RHCSredhat cluster suite)中可自定义资源转移组(叫故障转移域failover domain),若某一node出故障时,仅允许转移的范围,N-m表示Nnode运行m个服务,N-n表示Nnode运行n个服务(与node数相同的服务);例如有三个服务(smtp,httpd,ipvs)各运行在abc上,空闲d作为备用node,当abc出故障时,均能转移到d

 

 

4

message layerCRMRA有多少种实现方式?

heartbeat V1(最古老的version,既提供messagelayer,又有CRM功能(haresources)

heartbeat V2(走向成熟的version,受欢迎的version,既提供messagelayer又有CRM功能,对haresources作了改进,提供了两个CRM(haresoucescrm),使用crm时它会监听在某个接口上,接受外在的工具进行管理(如通过图形界面管理集群资源)

heartbeat V3(分裂成几个独立的小项目(heartbeatpacemakercluster-glu),CRMpacemaker(心脏起搏器),保留核心messagelayer

corosync(目前流行,redhat6上使用,它本身是纯粹的messagelayer,比heartbeat更优,但不带有pacemaker组件,通常使用corysync+pacemaker(角色相当于heartbeat V3))

cmancluster managerredhat5中提供高可用引擎,不是纯粹的message layer,很多功能在内核中实现,到redhat6改进的简洁了例如可在用户空间实现的corosync

keepalived(与上面讲到的理论不同,在配置上有它独到之处,在VIP管理上基于VRRPvirtual router redundant protocol)实现,可非常简单的配置双主模型(corosync也可实现双主,但配置麻烦,要对资源做很多管理),keepalived本身就是为LVSdirector高可用专门开发的组件,配置便捷,但在功能的通用性上不如以上几种)

 

CRM

haresourcesheartbeatV1,heartbeatV2)、crmheartbeatV2

pacemaker(应用在两种message layer上,分别是heartbeatV3corosync

rgmanager(在cman之上专门提供的CRM

 

resource(资源有很多类型,有些资源必须要运行在多个node上,如STONITH设备,每个node都要运行STONITH,在某一node出故障时将它暴头):

primitive(主资源,在某一时刻只能运行在某一节点上)

clone(克隆类资源,如STONITH,克隆好几份在集群的每个node都运行;如集群文件系统CFS,分布式锁管理器dlmdistributed lock managerCFS自带的工具(程序),某一node持有的锁,其它node都能看到,这个程序要配置为高可用集群中的资源,这个资源要运行在高可用集群中的每个node上)

group(把某些资源归类到一起同进同退,资源容器,通常组中仅有primitive类的资源)

master/slave(特殊的clone类资源,只能运行两份,在有主从关系的两个node上运行,如drbddistributed replicate block device分布式复制块设备,2.6.33后被drbd被整合在内核中,之前的内核只需安装相关模块即可)

 

HA-serviceresource:服务上会有多个资源;从属于一个服务的所有资源必须同时运行在一个node上(资源定义成组,同进同退);如果资源没有定义为组,这些资源是平衡地运行在每个node上(默认balance法则),例如两个node两个资源,这两个资源分别运行在这两个node上,例如两个node三个资源,这三个资源轮流按次序分散地运行在这两个node

 

RA(不仅仅是脚本,start|stop|restart|status,平时通过status监控,若某一node故障,要调用它在另一node执行start等,它实现了让CRM能够将某个定义成了高可用资源的资源被管理,接受LRM传递过来的控制指令完成对应的资源管理)

RA classes

legacyheartbeatV1RA

LSBredhatshell风格的脚本)

OCFopen clusterframework,不同的vender提供不同的version,如pacemakerRAlinbitdrbd),只要遵循OCF规范都能拿来用

STONITH(专门用来管理硬件STONITH设备)

 

STONITH设备:

PDUpower distributionunits,电源分布单元,电交换机,该设备接上网线,可接收由其它node发来的控制指令,从而断掉某个node的电源,不同的厂商认证方式会不同,STONITH机制也会不同,提供管理STONITH设备的管理软件)

UPSuninterruptible power supplies不间断电源)

blade power control devices(刀片服务器,高度模块化,内置电源控制器,可接受指令)

lights-out devices(轻量级设备,专业级服务器上自带的硬件接口(小的管理模块,可接受远程管理),如IBMRSAHPiloDELLDRAC

testing devices(如#ssh  172.168.100.1 ‘reboot’

meatware(肉件,手动fence

注:stonithd(监控当前主机运行的stonith资源,可让多个node间互相通信);stonith plug-in(提供插件管理软件,接受选项及不同的参数);高可用集群默认的管理策略(没有stonith设备是不允许启动的);只要有共享存储就一定要有STONITH设备

 

在高可用集群中,对外提供的服务绝不能开机自启动,必须要由CRM管理

提供message layer功能的软件,要开机自启动,并监听在udp/694port上,用来传递各node的集群事务信息(要加密,做hash计算,否则任何一台主机配置并运行了与当前node上相同的服务,则会充当集群上node

若高可用集群中仅两个node(单播、组播、广播都可),若多个node(组播、广播);node间通信(串行线互联,以太网互联),建议使用单独的网卡通信

若高可用集群上有两个node,当某一主节点在运行服务时,依赖于某共享文件系统,这个共享文件系统默认只运行在主节点上,当主挂了,备才挂载共享文件系统(使用heartbeat提供的RA,再提供参数就能实现自动转移时挂载)

注:FS崩溃(DASSAN都会,NAS不会)

注:组播(多播,mcast,使用DIP224.0.0.0~239.255.255.255,流向组地址中的数据,在组播组内的主机都能接收到);

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(本地管理组播地址,仅在特定的本地范围内有效)

 

 

二、操作:

1

redhat5.8 32bit环境使用heartbeat V2

heartbeat软件或高可用服务是靠节点名称识别各nodeNODE_NAME<-->IP),每个node都要能解析自己及其它所有node,建议使用本地hosts文件,而非DNS(不能将高可用寄托在DNS上),整个高可用集群各node/etc/hosts文件一样,节点名称要与命令#uname  -n结果保持一致(或#hostname结果);

配置SSH双机互信(高可用功能使用时,要能够在一个正常的node开启或关闭其它node的主机或其上的服务;

集群各node时间要同步(彼此心跳信息要同步,若时间不同步可能会误杀)

以上四点尤其注意(主机名、/etc/hosts文件、ssh双机互信、时间同步)

关闭iptables(若开启要放行694/udp)和selinux

 

node1-side

#vim /etc/sysconfig/network(更改主机名,或使用#sed  -i  ‘s@\(HOSTNAME=\).*@\1node1.magedu.com@g’  /etc/sysconfig/network

HOSTNAME=node1.magedu.com

#hostname node1.magedu.com

#uname -n

node1.magedu.com

#vim /etc/hosts(添加各node主机名与IP对应关系)

192.168.1.59    node1.magedu.com        node1

192.168.1.60    node2.magedu.com        node2

#scp /etc/hosts [email protected]:/etc/

#ssh-keygen -t  rsa  -f ~/.ssh/id_rsa  -P  ‘’

#ssh-copy-id  -i ~/.ssh/id_rsa.pub  root@node2

#ssh node2  ‘ifconfig’

#vim /etc/ntp.conf(此机作为ntp-sever,设置仅允许node2到这台机子上同步时间,添加更改如下信息)

restrict 192.168.1.60

#server 0.rhel.pool.ntp.org(注销掉其它server,本机在局域网内使用,不联互联网,仅与自己同步,本机的时间就是ntp-server的时间)

……

server 127.127.1.0     # local clock(开启此项,仅与自己本机同步)

fudge  127.127.1.0 stratum 10

#service ntpd  start123/udp,服务刚启动需要等3-5分钟才开始一次同步,如果这时立即在client使用ntpdate强制同步时间,会报错例如no server suitable for synchronization found,过一会再同步即可)

#chkconfig --level  35  ntpd on

 

node2-side

#sed -i  ‘s@\(HOSTNAME=\).*@\1node2.magedu.com@g’  /etc/sysconfig/network

#hostname node2.magedu.com

#uname -n

node2.magedu.com

#ssh-keygen -t  rsa  -f ~/.ssh/id_rsa  -P  ‘’

#ssh-copy-id  -i ~/.ssh/id_rsa.pub  root@node1

#ssh node1  ‘ifconfig’

#vim /etc/ntp.conf(添加一行server  NTP_SERVER,指定时间服务器地址即可)

server 192.168.1.59

#ntpdate node1(运行此命令不能开启本地ntpd服务,此命令是以粗暴方式马上就调整好时间,如果时间相差太多,中间的时间可能会是穿越的(空白的);最好是将本地服务开启,利用ntpd服务自身来同步会比较柔和,服务会根据时钟慢慢调整,例如本地比服务器时间慢3秒,服务会将本机以每秒加快点的速度追赶上服务器,中间不会有跳跃的穿越的时间,为使该实验快速进行,本例使用ntpdate方式同步)

#crontab -e

5/* *  *  * *  /sbin/ntpdate  node1 &>  /dev/nullcrontabl的环境变量只有与系统中PATH不同,避免出错,这里写绝对路径;定时任务每执行一次就要向管理员发邮件告知,避免一直发邮件使用&> /dev/null;保存位置/var/spool/cron/root

以下几个程序的下载位置(http://fedoraproject.org/wiki/EPEL(注意版本此例是epel5中i386)

heartbeat(主程序)

heartbeat-devel

heartbeat-gui

heartbeat-ldirectord(专为ipvs高可用提供规则自动生成及后端RS健康状况检查的组件)

heartbeat-pils(装载库提供的通用插件和接口)

heartbeat-stonith

 

准备好本地光盘的yum

node1-side

#for I  in  {1..2}; do ssh  node$I  ‘yum  -y  --nogpgcheck  localinstall  perl-MailTools-1.77-1.el5.noarch.rpm’ ; done

#for  I  in {1..2}; do  ssh  node$I ‘yum  -y  --nogpgcheck  localinstall  heartbeat-2.1.4-11.el5.i386.rpmheartbeat-gui-2.1.4-11.el5.i386.rpm  heartbeat-pils-2.1.4-11.el5.i386.rpm  heartbeat-stonith-2.1.4-11.el5.i386.rpm   libnet-1.1.6-7.el5.i386.rpm’ ; done

#rpm  -ql  heartbeat

/etc/ha.d/rc.d/*(类似系统中/etc/rc.d/init.d/*

/etc/ha.d/resource.d/*(资源代理脚本,例如IPaddr专门用于配置VIP到某活动node上,而且可以监控IP地址是否生效,另系统中/etc/rc.d/init.d/*下的LSB风格的脚本都可以用)

heartbeat配置中有三个重要文件

authkeys(密钥文件,权限600,实现加密认证,避免其它node冒充成为我们定义的集群中的node);

ha.cfheartbeat服务自身的配置文件,核心配置文件,配置的有高可用集群中有几个node,各node名称,多长时间检测一次心跳,集群中事务信息传递要不要加密,若两个node的话是否加ping node(或仲裁磁盘)等等配置);

haresoucesheartbeatV2提供两种CRM,一个是haresources,配置文件就是haresources,一个是crm,若要使用crm管理资源,在ha.cf文件末加crm  respawn或者crm  on

 

#cp  /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresources} /etc/ha.d/

#cd  /etc/ha.d

#chmod  600  authkeys

 

1)举例(heartbeatV2haresources的使用):

#vim  /etc/ha.d/authkeys

auth  1

1  md5  f642725b9a037194cmd5后跟随机数,此随机数不要手动写,自动生成,越随机越好,找一段粘贴即可,不要太长,否则影响性能,生成随机数方法一:#dd  if=/dev/random  count=1 bs=512  |  md5sum,方法二:#openssl  rand -base64  128

 

#vim /etc/ha.d/ha.cf(格式:指令  值,顶头的表示可启用的选项)

#debugfile  /var/log/ha-debug(出错时打开此功能,可输出更详细的信息,便于调试)

#logfile  /var/log/ha-log(用指定文件记录日志信息)

logfacility local0(用系统syslog功能记录日志,保存在/var/log/messages

keepalive  1(多久发一次心跳,不写单位默认是秒,若用ms毫秒则必须要写)

#deadtime 30(多长时间判定对方dead,时间短的话会误杀)

#warntime 10(未收到心跳的警告时长)

#initdead 120(等待第二个node启动的时长)

udpport 694(服务监听的端口)

#baud 19200heartbeat传递心跳支持两种,以太网和串行线,此句指串形线的速率(波特率))

bcast eth0(广播方式传递事务信息)

#mcast  eth0  225.0.0.1  694  1  0(此句重要,多播,或组播,生产环境下使用,225.0.0.1表示mcast group694端口,1表示ttl0表示loop不循环)

#ucast eth0  192.168.1.60(单播,设备eth0后跟的是对方的地址,此句仅适用于两个node的情形)

auto_failback  on(自动故障恢复)

node node1.magedu.com

node node2.magedu.com(这两句重要,告诉集群有几个node,有哪些node,一定要与node名称保持一致)

#ping  10.10.10.254ping node

#ping_group  group1  10.10.10.254 10.10.10.253(还可将多个地址定义为一个组,只要能ping通组中任一主机即可,防止上面那个网关出问题后,两个nodeping不通它)

#respawn  userid  /path/name/to/run

#respawn  hacluster  /usr/lib/heartbeat/ipfail(这两句定义,当某一node故障时是重启服务,而不是down掉该node

 

#vim /etc/ha.d/haresources(每一行定义一个集群服务,将服务的所有资源归为一组)

node1.magedu.com  IPaddr::192.168.1.222/16/eth0(在文末添加此行,注意192.168.1.222VIP地址)

格式:active_node_name resource1  resource2

例:node1  10.0.0.170  Filesystem::/dev/sda1::/data1::ext2(资源和资源用空格隔开,资源的参数用双冒号隔开,node1是默认用作主节点的名称,FilesystemRA/etc/ha.d/resource.d/Filesystem,可自动配置资源,可接受参数))

 

#scp -p /etc/ha.d/{authkeys,ha.cf,haresources} node2:/etc/ha.d/

 

注:先找/etc/ha.d/resource.d/*再找/etc/rc.d/init.d/*

/usr/lib/heartbeat/findif(配置VIP时,若当前主机有两个网卡(其上配置的地址不在同一网段),这个脚本会自动匹配与VIP在同一网段的那个网卡,并在其别名上配VIP地址,/usr/lib/heartbeat/*这个目录下的脚本文件,是与heartbeat管理相关的脚本文件)

/etc/ha.d/resource.d/{IPaddr,IPaddr2}IPaddr是用ifconfig命令配置,IPaddr2是用ip addr命令配置,建议使用IPaddr2功能强大)

 

#echo “<h1>node1.magedu.com</h1>” >  /var/www/html/index.html(两个node都要准备网页文件)

#service httpd  start

#elinks -dump  http://192.168.1.59(先测试下是否能在本地打开,node2也要测试)

#service httpd  stop

#chkconfig --level  2345  httpd off(重要,高可用服务一定不能开机自启动,要接受CRM管理)

#chkconfig --list  httpd

#chkconfig --list  heartbeat(确保heartbeat要开机自启动)

#service heartbeat  start

#ssh node2  ‘service  heartbeat start’(必须要远程启动另一node

#tail /var/log/messages

windows物理机浏览器测试

#/usr/lib/heartbeat/hb_standby(这个脚本可实现手动将当前node自动转移,此脚本是将当前node转为备node,那另一node自然就成主node了)

 

补充(配置高可用服务自动挂载共享目录):

node3-side(单独拿出一台主机配置nfs共享目录):

#mkdir -pv  /web/htdocs

#echo “<h1>nfs.magedu.com</h1>” >  /web/htdocs/index.html

#vim /etc/exports

/web/htdocs 192.168.1.0/24(ro)

#service nfs  start

#showmount -e  192.168.1.127

Export list for 192.168.1.127:

/web/htdocs 192.168.1.0/24

 

node1-side

#service heartbeat  stop

#ssh node2  ‘service  heartbeat stop’

#mount -t  nfs  192.168.1.127:/web/htdocs  /mnt(测试能否正常挂载,记得要卸载,node2也测试下)

#ls /mnt

index.html

#umount /mnt

#vim /etc/ha.d/haresources

node1.magedu.com  IPaddr::192.168.1.222/24/eth0 Filesystem::192.168.1.127/web/htdocs::/var/www/html::nfs  httpd

#scp /etc/ha.d/haresources node2:/etc/ha.d/

#service heartbeat  start

#ssh node2  ‘service  heartbeat start’

#tail /var/log/messages

#/usr/lib/heartbeat/hb_standby

 

2)举例(heartbeatV2crm的使用,通过GUI来管理资源):

crmd运行在每个node上,并监听在某个socket上(为管理员管理资源提供接口APInode间依赖message layer可相互通信

注:开发某一程序借助提供的API就可方便地管理资源,管理功能及扩展性得到极大提升(GUICLI均可)

在上例基础上操作:

node1-side

#service heartbeat  stop

#ssh node2  ‘service  heartbeat stop’(先停止集群服务再配置)

 

#vim /etc/ha.d/ha.cf

#bcast eth0

mcast  eth0  225.0.0.1  694  1  0

node   node1.magedu.com

node   node2.magedu.com

crm respawn(在最后一行添加此句,或写成crm  on,表示使用crm来管理集群资源)

 

注:crmharesources并不兼容,crm不会去读haresources的配置文件,如果配置了crm还要使用haresources,借助于/usr/lib/heartbeat/haresource2cib.py这个脚本,这个python脚本会将/etc/ha.d/haresources文件转换为cib文件,并保存在/var/lib/heartbeat/crm/cib.xml,再启动集群服务(cibclusterinformation basecrm配置高可用集群的机制,crm将有关的所有配置都保存到了cib中,格式为xml

注:/usr/lib/heartbeat/send_arp(这个脚本用于,某一node故障,node切换后,当前nodeMACIP告知到路由器或交换机或其它设备上);/usr/lib/heartbeat/{tengine,pengine,stonithd,quorumd,crmd,ccm,lrmd},其中ccmclusterconfiguration manager),lrmdLRM

 

#/usr/lib/heartbeat/haresource2cib.py(这个脚本执行时会调用ha_propagate(当配置了集群中任意一个nodecib文件后,这个脚本会通过ssh双机互信统统都通知到其它node而不用scp))

#scp /etc/ha.d/ha.cf  node2:/etc/ha.d/

#ssh node2  ‘/usr/lib/heartbeat/haresource2cib.py’

#/usr/lib/heartbeat/ha_propagate(以后若改动了authkeys,ha.cf则可直接运行这个脚本会自动同步到其它node

#service heartbeat  start

#ssh node2  ‘service  heartbeat start’

#tail  -f /var/log/messages

#netstat -tnlp5560/tcpmgmtd

#cibadmin --help(专门用于解析cib.xml

#crmadmin --help(此命令用于管理node,如-K NODE_NAME关闭某nodecrmd-S  NODE_NAME查看某node的状态,-D查看当前DC在哪个node-N查看所有node的名字)

#crm_verify --help

#crm_monmonitor,每隔15秒刷新一次,用于查看状态)

#crm_resource  --help(管理资源)

#crm_standby  --help

#crm_failcount  --help

#crm_attribute  --help

#crm_sh(进入crmshell,进入后help

注:crm-->pacemaker(资源迁移,约束定义,资源定义,资源属性定义,集群属性定义等都可在命令行下完成,得到极大扩展,功能异常强大)

 

#hb_gui &(打开图形界面配置,首先win下要安装xmanager enterprise套件,若出错Traceback(most recent call last)……Could not opendisplayFile-->Properties-->SSH-->Tunneling-->Forward X11connections to:Xmanager,重启xshell即可)

注:进到图形界面后查看哪个nodeDC,最好在DC所在node配置

wKioL1ZY-xjyHLi2AADIlLSvfgg533.jpg

no quorum policy(不满足法定票数时的策略,stop默认,freezeignore

symmetric cluster(对称集群)

stonith enabled(要手动配置stonith设备)

stonith actionrebootpoweroff

default resource stickiness(资源粘性,0任意node可转移,此项要结合locationconstraint来判定到底在哪个node上运行)

is managed default(可管理)

wKiom1ZY-tXiJ_HbAAB6LrXIrwg010.jpg

resourcesgroup_1删除,重建资源

右键resources-->add new item-->groupID:webserviceorder:truecollocated:true-->OK

注:组要先定义,定义好组后再定义各资源,否则没有组的资源是分散地按顺序依次在不同的node运行

wKioL1ZY-13ynSq9AAB_k9k6Ukk154.jpg

注:在GUI下注意添加资源的顺序,切换时是按添加各资源的先后顺序启动各资源,所以添加资源时,先VIP,再filesystem,最后httpd

resource ID:webipbelong togroup:webservicetype:选择IPaddradd parameter(添加ip 192.168.1.222niceth0cidr_netmask24iflabeleth0:0-->Add

注:cloneclone_max表示最多克隆多少个资源,clone_node_max表示最多运行在多少个node上)

wKiom1ZY-xbzPUQNAADUaLdkEzs622.jpg

右键webservice-->Add New Item-->native-->注意ResourceID:webstoreType:Filesystemparameters:device192.168.1.127:/web/htdocsdirectory/var/www/htmlfstypenfs-->Add

wKioL1ZY-5Hj5g-LAACVFb5nSxg155.jpg

wKiom1ZY-06RGcQ0AADQJbrnCYk745.jpg

右键webservice--> Add New Item-->native-->注意ResourceID:httpdType:httpd-->Add(没有参数定义)

wKiom1ZY-2Dwrj2lAADHg9KgGCU630.jpg

配置好后,右键webservice-->Cleanup Resource(最好在组中的每个资源都clean upresource,防止之前配置改动过,影响当下的执行)

注:每次运行都会记录当前状态,以决定故障时转移到哪个node,在每一次对资源做改动时,要对此前状态进行清理,再start

wKioL1ZY-9qCOz79AACaVPX0AYs192.jpg

测试:右键webservice-->start(观察各资源间的启动顺序,在windows端用浏览器查看)

在当前node右键-->Standby(查看是否转移,与配置文件/etc/ha.d/ha.cfauto_failback on有关)

wKiom1ZY-5ORHjJLAACUblNXBSI010.jpg

wKiom1ZY-6fg97hiAABPnak6IzY233.jpg

以上是通过组把三个资源绑在一起,也可通过constraint将资源绑在一起

将上例的组删掉,重新创建资源(注意选择native,其它如资源名字和相关属性与上例相同)

Constraints中,右键Colocations-->Add new item-->colocation-->ID:httpd_with_webstorefrom:httpdto:webstoreScore:INFINITY-->OK

右键Colocations-->Add new item-->colocation-->ID:webstore_with_webipFrom:webstoreto:webipScore:INFINITY

注:通常选启动IP再启动httpd,否则httpd启动时会监听在某一地址上,会启动不起来

wKioL1ZY_OfC7lK1AACownn51o8467.jpg

wKioL1ZY_Q2Q1b1TAADFaU-q0h0820.jpg

Constraints中,右键Order-->Add new item-->order-->ID:webstore_before_httpdFrom:httpdTo:webstoreScore:INFINITY

右键Order-->Add new item-->order-->ID:webip_before_httpdFrom:httpdTo:webipScore:INFINITY

wKioL1ZY_SSAFEhYAAC7Gt7rKos892.jpg

wKioL1ZY_TSTHvJ1AACxVelYtnc197.jpg

Constraints中,右键Locations-->Add new item-->item Type:location-->ID:webip_on_node2Resources:webipScore:INFINITY-->AddExpressionAttributed:#unameOperation:eqValue:node2.magedu.com-->OK

linux-haConfigurationsDefault Resource Stickness:100

注:以上两条设置,location位置约束是各资源(同进同退的资源)score之和,结合资源粘性来决定资源在哪个node运行,例如:node1(资源粘性为100,位置约束为0),node2(资源粘性100,位置约束INFINITY,则当这两个node都正常运行时,资源优先选择node2

wKiom1ZY_OvwJpRfAACrDXJ2fB8573.jpg

wKioL1ZY_WTzYDjCAAC5tK0g08E551.jpg

测试:

按从上至下依次右键各资源点start

node1-side远程将node2heartbeat服务stop,观察这时资源在node1上运行;

node1-side远程再将node2heartbeat服务start,这时服务重新又在node2上运行了

注:若模拟node2关机(强制关闭电源),其它node会一直等node2传递的心跳信息,等过了超时时间才转移,这个过程会很慢;若是模拟node2故障,是服务停止话,这样它会给其它node传递心跳信息,切换的过程会很快

wKiom1ZY_RWBM-UsAACDzYLSkYM884.jpg

wKiom1ZY_STwrs4jAACDobmk1tY008.jpg

wKioL1ZY_ZeROU40AACDX8_wsa8694.jpg

 

 

 

以上是学习《马哥运维课程》做的笔记。


本文出自 “Linux运维重难点学习笔记” 博客,谢绝转载!

你可能感兴趣的:(linux运维)