#node-name resource1 resource2 ... resourceN
#IPaddr::135.9.8.7/24/eth0
#just.linux-ha.org 135.9.216.110 httpd
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
#node1 10.0.0.170 apache::/etc/apache/httpd.conf
第一行是配置语法说明,首先指定节点名,节点名必须和uname -n一致。后面指定在此节点上运行的资源,多个资源使用空格隔开。
第二行中的"IPaddr"是资源代理程序,该程序在/etc/ha.d/resource.d/目录下,如果该目录下找不到就会去找/etc/init.d/目录下的程序。IPaddr后面的双冒号"::"是参数分隔符,多个参数之间使用双冒号分割,参数是传递给资源代理程序的。这一行说明的是设置在某节点上设置ip为135.9.8.7,掩码为24位,配置在eth0的别名上。它实现的是resource.d/IPaddr 135.9.8.7/24/eth0 start|stop|status。
第三行说明在节点just.linux-ha.org上启用ip 135.9.216.110(IPaddr程序可省略)和httpd服务。
第四行说明节点node1上启用IP 10.0.0.170,成功后运行资源代理程序Filesystem,向其传入运行3个参数"/dev/sda1"、"/data1"、"ext2"。
如果不知道某个RA接什么样的参数实现怎样的功能,可以去查看ha.d/resource.d/下对应RA的程序用法(一般都是shell脚本,前几行就会写Usage)。例如,IPaddr2的前几行:
[root@xuexi ~]# vim /etc/ha.d/resource.d/IPaddr2
#!/bin/sh
#
#
# Description: wrapper of OCF RA IPaddr2, based on original heartbeat RA.
# See OCF RA IPaddr2 for more information.
#
# Author: Xun Sun <xunsun@cn.ibm.com>
# Support: linux-ha@lists.linux-ha.org
# License: GNU General Public License (GPL)
# Copyright: (C) 2005 International Business Machines
#
# This script manages IP alias IP addresses
#
# It can add an IP alias, or remove one.
#
# usage: $0 ip-address[/netmaskbits[/interface[:label][/broadcast]]] \
# {start|stop|status|monitor}
#
# The "start" arg adds an IP alias.
#
# Surprisingly, the "stop" arg removes one. :-)
例如,以下是只管理两个节点VIP资源的haresources文件内容。两个服务器上的内容相同时表示:这是一个主主模型,节点1初始时只设置20.16这个IP,节点2初始时只设置20.14这个IP,当某节点故障后,另一节点接管其上VIP。
node1.longshuai.com IPaddr2::192.168.20.16/24/eth0
node2.longshuai.com IPaddr2::192.168.20.14/24/eth0
注意:
heartbeat只支持两个节点,没有主从之分,只能根据haresources中的节点名称来决定是否设置某资源。
VIP这种配置在别名接口上的地址,必须要和它所在接口同网段,否则它没有对应的路由。即使它通过默认路由出去了,如果它的下一跳是Linux主机,由于Linux主机默认设置了rp_filter=1的源地址严格检查,会直接丢弃这样的数据包。如果真这样,将其设置为2(也可以设置为0,但不推荐)。
如果采用广播发送心跳信息,建议心跳接口地址不要和VIP所在接口主地址同网段,否则心跳信息会被各节点的对外通信接口接收,从而影响性能。
4.示例:heartbeat为httpd提供高可用
这是一个没有实际意义的示例,只是为了演示heartbeat提供高可用时需要配置哪些必要的东西,以及如何提供VIP漂移(即IP资源高可用)。
环境如下:
需要说明的是,httpd有两种管理方式:
heartbeat只管理vip的漂移,不管理httpd的启动。这种情况要求httpd要事先在两节点启动好。
heartbeat同时管理VIP和httpd,这时httpd不能事先启动,也不能设置开机自启动。
本文测试采用第二种方案。
(1).配置节点主机名。
# node1上执行
hostname node1.longshuai.com
sed -i "/HOSTNAME/Is/=.*$/=node1\.longshuai\.com/" /etc/sysconfig/network
# node2上执行
hostname node2.longshuai.com
sed -i "/HOSTNAME/Is/=.*$/=node2\.longshuai\.com/" /etc/sysconfig/network
(2).配置主机名解析。
# 两节点都执行
cat >>/etc/hosts<<eof
192.168.100.59 node1.longshuai.com node1
192.168.100.44 node2.longshuai.com node2
eof
(3).为心跳线接口配置主机路由。
# 在node上执行:
route add -host 192.168.10.20 dev eth1
route -n
# 在node2上执行:
route add -host 192.168.10.10 dev eth1
route -n
(4).将两节点进行时间同步。
# 两节点都执行
ntpdate ntp1.aliyun.com
(5).两节点安装httpd,并设置不同页面内容以方便测试。
# node1上执行:
yum -y install httpd
echo "response from node1" >/var/www/html/index.html
# node2上执行:
yum -y install httpd
echo "response from node2" >/var/www/html/index.html
(6).提供配置文件ha.cf。由于此处采用广播方式,两节点ha.cf内容完全一致。