设为首页 收藏本站
查看: 1328|回复: 0

[经验分享] heartbeat和Pacemaker配置

[复制链接]

尚未签到

发表于 2015-11-21 08:47:21 | 显示全部楼层 |阅读模式
  安装完成之后,要开始配置了,heartbeat和Pacemaker都需要配置。heartbeat主要是配置/etc/ha.d/ha.cf和 /etc/ha.d/authkeys这两个文件;Pacemaker的配置文件是xml格式的,主要通过crm这个命令行工具来配置。
ha.cf和authkeys的配置

  /etc/ha.d/ha.cf — 全局的集群配置文件。
  /etc/ha.d/authkeys — 这个文件里包含了key,用于属于一个集群的不同节点之间的相互认证。
  ha.cf文件
  下面是一个简单的配置文件。
  autojoin none 关闭节点自动加入集群功能,集群中只包括下面 node指令指明的节点。如果设为any则支持节点自动加入集群。
bcast eth0 不同节点之间的信息通信方式,这里是通过eth0端口广播;还支持单播,组播的方式。
warntime 5 如果某节点5秒没有响应,则发出警告:这个节点可能挂掉了。
deadtime 15 如果某节点15秒没有响应,则认定这个节点挂掉了。
initdead 60 集群刚完成初始化,如果60秒没有响应,认定某个节点挂掉。
keepalive 2 “心跳”信号2秒一次,用来判断各个节点的健康情况
node vm1 声明集群中一个节点,vm-1-2hostname,记得在/etc/hosts加入
node vm2
node vm3

crm respawn 启动Pacemaker,并且Pacemaker启动失败会自动重启。
logfile /var/log/ha-log heartbeat的log

  关于ha.cf的详细manul请查看http://people.linbit.com/~florian/heartbeat-users-guide/re-hacf.html
  authkeys文件
  这个文件应该只对root可读,建议权限设为600.这个文件格式很简单如下
  auth num
num algorithm secret

  num 只是校验方法的索引,一般只用一种校验方法即可。
  algorithm 是规定使用哪中签名算法,目前支持CRC,sha1,md5(不建议用crc).
  secret 是实际的认证key.
  一个example:
  auth 1
1 md5 qwer

  官方推荐的生成authkeys文件的方法:
  ( echo -ne “auth 1\n1 sha1 “; \
dd if=/dev/urandom bs=512 count=1 | openssl md5 ) \
> /etc/ha.d/authkeys
chmod 0600 /etc/ha.d/authkeys

  验证配置
  配置好ha.cf和authkeys之后,将这两个文件拷贝到vm-1-2,vm-2-2,vm-3-2的/etc/ha.c下
  /etc/init.d/heartbeat start,然后运行crm_mon查看集群的情况。
  ============
Last updated: Fri Dec 25 22:59:15 2009
Stack: Heartbeat
Current DC: vm3 (952cbf63-ec62-4371-942a-626022c113ba) – partition with quorum
Version: 1.0.6-cebe2b6ff49b36b29a3bd7ada1c4701c7470febe
3 Nodes configured, unknown expected votes
0 Resources configured.
============

  Online: [ vm1 vm2 vm3 ]
  现在集群已经工作了,当前DC是vm3节点。DC是集群的中心决策节点,是自动选出的。如果当前的DC挂掉,新的DC会自动从剩余的节点中选出。
  当heartbeat已经正常工作之后,就该配置集群资源管理器Pacemaker了。Pacemaker的配置文件是xml格式的:/var/lib/heartbeat/cib.xml。
  一般修改配置时不要直接对xml文件做修改,Pacemaker给我们提供多个命令行工具来修改xml的配置。
  我一般都使用crm,这个工具支持tab自动补全。下面用^T代表tab补全。
  lisen# crm
crm(live)#^T
bye configure help quit status
cd end node ra status-mgmt
cib exit options resource up
crm(live)# status
============
Last updated: Wed Jan 6 12:03:20 2010
Stack: Heartbeat
Current DC: vm2 (2681ec9b-aaec-401d-9789-97bb1710250b) – partition with quorum
Version: 1.0.6-cebe2b6ff49b36b29a3bd7ada1c4701c7470febe
3 Nodes configured, unknown expected votes
0 Resources configured.
============
Online: [ vm1 vm2 vm3 ]

  增加一个资源
  集群的资源可以是一个虚拟IP,可以是apache mysql server,还可以是我们自己的程序。
  下面 演示使用crm为集群增加一个虚拟ip:
  实验环境为:
  vm1: 172.16.2.11
vm2: 172.16.2.12
vm3: 172.16.2.13
虚拟ip: 172.16.2.100

  过程:
  vm1#crm #可以在集群的任何一个节点上进行操作。
crm(live)#configure #进入配置模式
crm(live)configure# property stonith-enabled=false #修改集群的选项,禁用stonith,否则会报错。 先不使用stonith设备。
crm(live)configure# primitive ip-alias ocf:heartbeat:IPaddr2 params ip=172.16.2.100 nic=eth0 op monitor interval=5s
crm(live)configure# commit
crm(live)configure# exit

  primitive ip-alias ocf:heartbeat:IPaddr2 params ip=172.16.2.100 op monitor interval=5s
  这是加入虚拟IP资源的命令。其中 ip-alias是资源名,是我们自己定义的。
  ocf:heartbeat:IPaddr2这里指定了一个Resource Agent.这实际上对应到 /usr/lib/ocf/resource.d/heartbeat/IPaddr2 这个脚本。集群的每台机器上都有这个脚本,它实现了启动,关闭,监视等功能。实际的命令执行实际上都是由这些Resource Agent发出的。 ocf:heartbeat 对应/usr/lib/ocf/resource.d/heartbeat/,ocf:pacemaker对应/usr/lib/ocf/resource.d/pacemaker 这些目录下有许多控制各种服务的脚本。
  params name=value 这是传入脚本的环境变量。
  op monitor interval=5s 对资源加入监视操作,5s一次。
  实际测试:
  ip-alias资源已经在vm1上启动
  #crm_mon
============
Last updated: Thu Jan 7 10:51:30 2010
Stack: Heartbeat
Current DC: vm3 (952cbf63-ec62-4371-942a-626022c113ba) – partition with quorum
Version: 1.0.6-cebe2b6ff49b36b29a3bd7ada1c4701c7470febe
3 Nodes configured, unknown expected votes
1 Resources configured.
============

  Online: [ vm1 vm2 vm3 ]
  ip-failover (ocf::heartbeat:IPaddr2): Started vm1
  —-
  在vm1上查看ip:
  vm1#ip add show
eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 08:00:27:dd:8b:ca brd ff:ff:ff:ff:ff:ff
inet 172.16.2.11/24 brd 172.16.2.255 scope global eth0
inet 172.16.2.100/24 brd 172.16.2.255 scope global secondary eth0

  ifdown掉vm1的网卡,在vm3上面观察:
  #crm_mon
============
Last updated: Thu Jan 7 10:51:30 2010
Stack: Heartbeat
Current DC: vm3 (952cbf63-ec62-4371-942a-626022c113ba) – partition with quorum
Version: 1.0.6-cebe2b6ff49b36b29a3bd7ada1c4701c7470febe
3 Nodes configured, unknown expected votes
1 Resources configured.
============

  Online: [vm2 vm3 ]
OFFLINE:[vm1]

  ip-failover (ocf::heartbeat:IPaddr2): Started vm2
  虚拟ip已经被自动转移到了vm2节点上。
  资源constrains
  首先要介绍的是全局option:symmetric-cluster=ture/false. true时,集群allowing resources to run anywhere by default; false时,集群preventing resources from running anywhere by default,我们需要手动enable nodes.
  接着要引入score,官方的解释: Scores are calculated on a per-resource basis and any node with a negative score for a resource can’t run that resource. After calculating the scores for a resource, the cluster then chooses the node with thehighest one.
location constrain

  以ip-alias资源为例,现在只允许ip-alias在vm1 vm2上运行,并且优先在vm1上,只是当vm1出错时,才转到vm2上运行。
#crm
crm(live)# configure
crm(live)configure# property symmetric-cluster=false #preventing resources from running anywhere
crm(live)configure# location constrain1 ip-alias 200: vm1 #set score to enable node vm1
crm(live)configure# location constrain2 ip-alias 100: vm2 #set score to enable node vm2

  我们将vm1的score设为200,vm2的score设为100。因为vm1的score高,所以ip-alias将优先在vm1上运行,当vm1挂掉后才会自动转到vm2.
  order constrain
  如果有多个资源,可以使用order constrain,实现对多个资源启动顺序的控制。
  现在有两个资源 虚拟ip:ip-failover和apache server:web.现在加入order constrain,让ip-failover先于apache运行。
#crm
crm(live)# configure
crm(live)configure# order order1 40: ip-failover web
crm(live)configure# verify
crm(live)configure# commit

  order order1 40: ip-failover web
oder1是自定义的id
40: 是这个order constrain的score。当score>0 称为强制约束,score=0 称为建议约束。
强制约束中,当first资源状态发生变化时,会影响then资源;而建议约束则不会。
具体请看http://www.clusterlabs.org/doc/en-US/Pacemaker/1.0/html/Pacemaker_Explained/s-resource-ordering.html

  ip-failover web就是资源名。ip-failover将先于web启动。
  colocation constrain
  当一个资源的位置依赖于另一个资源时,我们称之为colocation.
  依旧拿ip-failover和web为例。现在让web依赖于ip-failover
# crm
crm(live)# configure
crm(live)configure# colocation co1 score: web ip-failover
crm(live)configure#commit

  colocation co1 score: web ip-failover
  co1 是我们自定义的id
score 当score为”INFINITY”或”-INFINITY”时,称为Mandatory Placement,意思是必须满足;当-INFINITY<score<INFINITY时,称为Advisory Placemen,
意思是尽量满足。score为正时,资源会运行在同一节点。score为负,资源会运行在不同的节点。
web ip-failover: web资源将依赖于ip-failover资源。

  score=INFINITY ip-failover和web将运行于同一节点。web依赖于ip-failover,当ip-failover由于上面的constrain不能运行时,web可以运行时。
由于是Mandatory Placement,web也不能运行。
score=100 当ip-failover由于上面的constrain不能运行时,web可以运行时。web依然会运行。
score=-INFINITY 同上
score=-100 同上

  资源组
  集群中很常见的一种情况是一系列的资源需要运行在同一各节点上,启动和停止都是有一定顺序的。 这时候使用资源组就非常方便。
  配置一个资源组也非常的简单。
#crm
crm(live)# configure
crm(live)configure# group group1 ip-failover web
crm(live)configure# commit

  group1 是我们自定义的组名id
ip-failover web 则是要放到group1组中的资源,这里是有序的,ip-failover将先于web执行。

  并且同一个资源组的各种资源只能运行在同一个节点上。
  rule
  rule可以使你的配置更加动态。可以制定出灵活的规则。
  rule中加入了表达式判断,当表达式为false,集群会忽视这条rule.若为true,集群中节点的score会被更新成rule中的score.
  首先从一个最简单的rule开始,只为了演示rule的语法: 若集群中的#uname(也就是主机名)为vm1,则禁止ip-alias在vm1上运行。
  crm(live)# configure
crm(live)configure# location rule1 ip-alias rule -inf: #uname eq &quot;vm1&quot;
crm(live)configure# commit

  rule -inf: #uname eq &quot;vm1&quot;
前面的部分和location限制语法一样。从rule 开始-inf: 是当表达式为真时要应用的score.
#uname eq &quot;vm1&quot; #uname是每个节点自带的一个attribute,即是节点名;eq是操作符.
vm1节点符合表达式,所以,vm1对ip-alias的score将被置为-inf,vm1将永远不能运行ip-alias.

  另一个与时间表达式有关的例子:周2的8点将进行维护,关闭集群里的资源ip-alias。
crm(live)# configure
crm(live)configure# location rule2 ip-alias rule -inf: date date_spec weekdays=&quot;2&quot; hours=&quot;8&quot;
crm(live)configure# commit

  这样会实现一个类&#20284;crontab的效果,在每周2的8点自动关闭集群中的ip-alias服务(通过将所有节点的score设为-inf)
  资源的迁移
  现在集群中有一个节点vm1因为某种原因要停机,要把vm1所有的资源先迁移出去。首先可以使用上面的location constrain,将每个资源在vm1上的score设为-inf.另外还有一种简单的办法,将vm1设为”standby”状态(standby意味着不要让任何服务到这个节点运行)。
  standby vm1:
crm(live)# node standby vm1

  重新启用vm1:
crm(live)# node online vm1

  资源Clone
  如果想让一个资源在集群的每个节点都有运行,可以使用clone.首先介绍anonymous clone.这是最简单的clone,所有的节点上的clone都是一样。
  以ocf:pacemaker:ping这个agent为例。
crm(live)# configure
crm(live)configure# primitive ping-test ocf:pacemaker:ping params host_list=172.16.2.1 multiplier=100 dampen=5s name=pingd op monitor interval=15s
crm(live)configure# clone cl-pingd ping

  这里给每个节点配置了ping的clone,这个agent会每隔一段时间自动去ping host_list中列出的节点。然后将可通的节点数乘以multiplier作为pingd的&#20540;,这个&#20540;就可以被rule使用。
  crm(live)configure# location ping-l ip-alias rule -inf: pingd eq 0
  这里使用了pingd的&#20540;,如果某节点等于0(即为无法ping通172.16.2.1),则将此节点score设为-inf:.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141698-1-1.html 上篇帖子: centos(7) heartbeat 配置 下篇帖子: heartbeat 双网卡bond0的配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表