--> 作者:
1用rpm安装dep pack(相关包):
rpm -ivh ipvsadm-1.21-1.rh.el.1.i386.rpm
rpm -ivh ipvsadm-debuginfo-1.21-1.rh.el.1.i386.rpm
rpm -ivh libnet-1.1.0-1.rh.el.1.i386.rpm
rpm -ivh perl-Digest-SHA1-2.01-15.1.i386.rpm
rpm -ivh perl-Digest-HMAC-1.01-11.1.noarch.rpm
rpm -ivh perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Convert-ASN1-0.16-2.rh.el.um.1.noarch.rpm
rpm -ivh perl-Net-SSLeay-1.23-1.rh.el.um.1.i386.rpm
rpm -ivh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Net-SSLeay-debuginfo-1.23-1.rh.el.um.1.i386.rpm
rpm -ivh perl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Parse-RecDescent-1.80-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1.noarch.rpm
rpm -ivh libnet-debuginfo-1.1.0-1.rh.el.1.i386.rpm
rpm -ivh perl-HTTP-GHTTP-1.07-1.n0i.3.i386.rpm
rpm -ivh perl-XML-SAX-0.12-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-libwww-perl-5.65-6.noarch.rpm
下面是最初的安装过程
rpm -ivh ipvsadm-1.21-1.rh.el.1.i386.rpm
rpm -ivh ipvsadm-debuginfo-1.21-1.rh.el.1.i386.rpm
rpm -ivh libnet-1.1.0-1.rh.el.1.i386.rpm
rpm -ivh libnet-debuginfo-1.1.0-1.rh.el.1.i386.rpm
rpm -ivh perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
error: Failed dependencies:
perl(Digest::HMAC_MD5) is needed by perl-Authen-SASL-2.03-1.rh.el.um.1
Suggested resolutions:
perl-Digest-HMAC-1.01-11.1.noarch.rpm
从网上
下载上面的rpm包*/
rpm -ivh perl-Digest-SHA1-2.01-15.1.i386.rpm
rpm -ivh perl-Digest-HMAC-1.01-11.1.noarch.rpm
重新安装perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Convert-ASN1-0.16-2.rh.el.um.1.noarch.rpm
rpm -ivh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
perl(Net::SSLeay) >= 1.08 is needed by perl-IO-Socket-SSL-0.92-1.rh.el.um.1
perl-Net-SSLeay >= 1.0.3 is needed by perl-IO-Socket-SSL-0.92-1.rh.el.um.1
rpm -ivh perl-Net-SSLeay-1.23-1.rh.el.um.1.i386.rpm
重新安装 perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Net-SSLeay-debuginfo-1.23-1.rh.el.um.1.i386.rpm
rpm -ivh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
error: Failed dependencies:
perl(IO::Socket::SSL) is needed by perl-ldap-0.2701-1.rh.el.um.1
perl(XML::SAX::Base) is needed by perl-ldap-0.2701-1.rh.el.um.1
perl-IO-Socket-SSL is needed by perl-ldap-0.2701-1.rh.el.um.1
perl-XML-SAX is needed by perl-ldap-0.2701-1.rh.el.um.1
新安装下面的包
rpm -ivh perl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpm
重新安装perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1.noarch.rpm
error: Failed dependencies:
perl(Parse::RecDescent) is needed by perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1
perl-Parse-RecDescent is needed by perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1
先安装
rpm -ivh perl-Parse-RecDescent-1.80-1.rh.el.um.1.noarch.rpm
2.安装heartbeat包
rpm -ivh heartbeat-pils-1.2.3-2.rh.el.3.0.i386.rpm
rpm -ivh heartbeat-stonith-1.2.3-2.rh.el.3.0.i386.rpm
rpm -ivh heartbeat-1.2.3-2.rh.el.3.0.i386.rpm
rpm -ivh heartbeat-ldirectord-1.2.3-2.rh.el.3.0.i386.rpm
这样有关的软件已经全部安装完毕,下面进行Heartbeat和ipvs的配置:
配置ipvsadm:
ipvsadm是1.0.8版,安装后在/etc/rc.d/init.d/目录下自动生成了标准的init服务 脚本,如果你的Director没有 备份服务器,你可以通过服务管理工具让它在相应的运行级里自动运行,如果Director是HA系统,则由heartbeat控制运行。
另外该服务脚本提供了配置保存功能。配置文件为:/etc/sysconfig/ipvsadm 你必须手工建立。然后在其中输入规则和策略:
-A -t 10.1.0.254:80 -s rr
-a -t 10.1.0.254:80 -r 10.1.0.1:80 -g -w 1
-a -t 10.1.0.254:80 -r 10.1.0.3:80 -g -w 1
-a -t 10.1.0.254:80 -r 10.1.0.4:80 -g -w 1
然后存盘。
或直接运行:
ifconfig lo:0 10.1.0.254 netmask 255.255.255.255 broadcast 10.1.0.254 up
route add -host 10.1.0.254 dev lo:0
(这两条在手工启动Ipvsadm时需要执行)
1. modifying the line containing net.ipv4.ip_forward in /etc/sysctl.conf
2. 查看上述是否成功:
For these changes to take effect the sysctl command may be used:
配置directord:负责侦听realserver的状态,如果realserver出现问题将自动从路由表中删除之。
/usr/share/doc/ heartbeat-ldirectord-1.2.3/ldirectord.cf文件是Ldirectord的配置文件的范例。拷贝该文件到 /etc/ha.d/conf目录下,修改其内容以便在Heartbeat的配置文件haresources中使用,并建立链接:ln Cs /etc/ha.d/conf/ldirectord.cf /etc/ha.d/ldirectord.cf
编辑ldriectord.cf:下面是一个配置实例
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting
virtual=10.1.0.254:80
real=10.1.0.1:80 gate
real=10.1.0.3:80 gate
real=10.1.0.4:80 gate
fallback=127.0.0.1:80 gate
service=http
request="reply.html"
receive="Yeah OK!"
virtualhost=DR1
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
配置HA
需要配置的有三个文件:ha.cf haresources(在每个节点必须相同) Authkeys,应该将它们放置在/etc/ha.d目录下。范例配置在/usr/share/doc/heartbeat-1.2.3目录下,你可以 修改后拷贝到/etc/ha.d目录下
cd /usr/share/doc/heartbeat-1.2.3
cp ha.cf /etc/ha.d
cp haresources /etc/ha.d
cp authkeys /etc/ha.d
1.设置双机脚本ha.cf:负责测试两台DR的状态,如果主机有故障将自动切换到备机上去。
主要修改如下几项:
debugfile
logfile
logfacility
keepalive
deadtime
warntime
initdead
udpport
ucast eth1 10.3.1.6此处需要自己指定eth1为心跳线的连接网卡,10.3.1.6为对方网卡的地址
auto_failback off:此处指定当主机恢复后是否将资源自动切换到主机上,建议选off.
//这次设置为on看看怎样?
node DR1
node DR2 :此处指定加入集群的节点的机器名可以通过uname Cn查看,一定注意不能用ip地址。
上面几个参数出了有说明的地方外,都可以用默认值,只需将该项前面的#去掉就可以了
下面是ha.cf中主要的参数介绍:
这个配置文件告诉heartbeat 使用的是什么介质和如何配置它们。ha.cf 包含你将到的所有的选项,内容如下:
serial /dev/ttyS0 使用串口heartbeat - 如果你不使用串口heartbeat, 你必须选择其它的介质,比如以太网bcast (ethernet) heartbeat。如果你使用其它串口heartbeat,修改/dev/ttyS0 为其它的串口设备。
watchdog /dev/watchdog 可 选项:watchdog功能提供了一种方法能让系统在出现故障无法提供"heartbeat"时,仍然具有最小的功能,能在出现故障1分钟后重启该机器。 这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果你想使用该特性,你必须在内核中装入"softdog" 内核模块用来生成实际的设备文件。想要达到这个目的, 首先输入 "insmod softdog" 加载模块。然后,输入"grep misc /proc/devices" 注意显示的数字 (should be 10). 然后, 输入"cat /proc/misc | grep watchdog" 注意输出显示出的数字(should be 130)。现在你可以生成设备文件使用如下命令:"mknod /dev/watchdog c 10 130" 。
bcast eth1 指定使用的广播heartbeat 的网络接口eth1(修改为eth0, eth2, 或你所使用的接口)
keepalive 2 设置心跳间隔时间为2两秒。
warntime 10 在日志中发出最后心跳"late heartbeat" 前的警告时间设定。
deadtime 30 在30秒后明确该节点的死亡。
initdead 120 在一些配置中,节点重启后需要花一些时间启动网络。这个时间与"deadtime"不同,要单独对待。至少是标准死亡时间的两倍。
hopfudge 1 可选项: 用于环状拓扑结构,在集群中总共跳跃节点的数量。
baud 19200 串口波特率的设定(bps).
udpport 694 bcast和ucast通讯使用的端口号694 。这是缺省值,官方IANA 使用标准端口号。
nice_failback on 可选项:对那些熟悉Tru64 Unix, 心跳活动就像是"favored member"模式。主节点获取所有资源直到它宕机,同时备份节点启用。一旦主节点重新开始工作, 它将从备份节点重新获取所有资源。这个选项用来防止主节点失效后重新又获得集群资源。
node linuxha1.linux-ha.org 强制选项:通过`uname -n`命令显示出的集群中的机器名。
node linuxha2.linux-ha.org 强制选项:通过`uname -n`命令显示出的集群中的机器名。
respawn userid cmd 可选项:列出可以被spawned 和监控的命令。例如:To spawn ccm 后台进程,可以增加如下内容:
respawn hacluster /usr/lib/heartbeat/ccm
通知heartbeat 重新以可信任userid身份运行(在我们的例子中是hacluster) 同时监视该进程的"健康"状况,如果进程死掉,重启它。例如ipfail, 内容如下:
respawn hacluster /usr/lib/heartbeat/ipfail
NOTE: 如果进程以退出代码100死掉, 这个进程将不会respawned。
ping ping1.linux-ha.org ping2.linux-ha.org .... 可选项:指定ping 的节点。 这些节点不是集群中的节点。它们用来检测网络的连接性,以便运行一些像ipfail的模块。
2.配置authkey: 配置加密认证算法,有三种算法:CRC, md5,sha1如果heartbeat运行在一个安全的网络,例如CAT5交叉线,可以用CRC,从资源开销上来说,这是最节省开销的。如果网络是不可靠 的,就用md5,最后如果关心的是安全而不是CPU资源的开销,那么可以使用 sha1,将会得到最佳的安全度,很难被黑客所破解。
我们采用CRC验证:
auth 2
2 crc
一定记得要赋权限:chmod 600 authkeys
格式如下:auth []
例: /etc/ha.d/authkeys
使用sha1
auth 1
1 sha1 key-for-sha1-any-text-you-want
使用md5
auth 1
1 sha1 key-for-md5-any-text-you-want
使用CRC
auth 2
2 crc
cd /var/www/html
编写html测试脚本test.html
3.配置haresource
这个文件指定集群所提供的服务以及谁是缺省的主节点。注意,该配置文件在所有节点应该是相同的。
我们的HA集群提供的是负载均衡服务(LVS)和服务监控服务(Ldirectord)。这里集群的IP(虚拟)地址是必须配置的,不要在haresources文件以外的地方配置该IP地址。所以我们应该添加如下一行:
DR1 IPaddr::10.1.0.254/32/10.1.0.254 ipvsadm ldirectord::ldirectord.cf
::前的表示服务脚本名称(IPaddr),你可以在目录/etc/ha.d/resource.d下找到一个脚本名叫 Ipaddr,后面的表示输入的参数
Heartbeat 会在下面的路径搜索同名的启动脚本:
/etc/ha.d/resource.d
/etc/rc.d/init.d
3. 编辑/etc/hosts
在文件中加上两台dr的机器名和ip的对应关系。
127.0.0.1 DR2 localhost.localdomain localhost
10.3.0.5 DR2
10.3.0.6 DR1
10.1.0.5 DR2
10.1.0.6 DR1
以上是DR的配置,下面进行realserver的配置
配置realserver
安装patch:在lvs才用dr方式时存在arp问题需要用如下补丁修改。
将hidden-2.4.25-1.diff传到realserver上
这个内核补丁包可以从:下载对应内核的补丁。
cd /usr/src/linux-.2.4
配置ha如下:
几点注意事项:
4. haresources中指定的资源之一应该有ipvsadm,也就是我们手工编写的启动ipvs的脚本。
5. haresoueces的resources资源包含两部分:ipvsadm和ldirectord
6. 原来的ipvsadm文件可能有问题,需要重新修改
7. LVS的虚地址应该有HeartBeat启动,所以应该在haresources中设定该地址。
8. test3(节点名) IPaddr::ip_address/netmask/broadcast_address ipvsadm ldirectord::ldirectord配置包 ldirectord::ldirectord配置包
9. ldirectord和ha的日志位于/var/log/ldirectord.log和ha-log
10. heartbeat检测应该采用ucast,需要了解单播地址应该设自己的还是对端的,首先考虑设为对端的。
11. modifying the line containing net.ipv4.ip_forward in /etc/sysctl.conf
12. 查看上述是否成功:
For these changes to take effect the sysctl command may be used:
启动heartbeat出现如下问题:
Starting High-Availability services:
2005/03/08_14:17:46 CRITICAL: Resource IPaddr::10.1.0.254/32/10.1.0.254 is active, and should not be!
2005/03/08_14:17:46 CRITICAL: Non-idle resources can affect data integrity!
2005/03/08_14:17:46 info: If you don't know what this means, then get help!
2005/03/08_14:17:46 info: Read the docs and/or source to /usr/lib/heartbeat/ResourceManager for more details.
CRITICAL: Resource IPaddr::10.1.0.254/32/10.1.0.254 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or the source to /usr/lib/heartbeat/ResourceManager for more details.
2005/03/08_14:17:46 CRITICAL: Non-idle resources will affect resource takeback!
2005/03/08_14:17:46 CRITICAL: Non-idle resources may affect data integrity!
[FAILED]
heartbeat: 2005/03/08_14:17:46 ERROR: Current node [test3] not in configuration!
heartbeat: 2005/03/08_14:17:46 info: By default, cluster nodes are named by `uname -n` and must be declared with a 'node' directive in the ha.cf file.
heartbeat: 2005/03/08_14:17:46 ERROR: Configuration error, heartbeat not started.
其中要注意node必须用机器名,可以通过uname Cn查看机器名最终就是这一点解决了上面的问题!
在realserver上安装arp problem patch
cd /usr/src/linux-2.4
Hunk #1 FAILED at 339.
1 out of 1 hunk FAILED -- saving rejects to file include/linux/sysctl.h.rej
此问题说明安装的patch与系统内核不匹配。需要重新下载新的内核patch
关于arp problem:
由于在DR模式中,Load Blancer和Real Server共享Vitual IP,所以当Realserver响应VIP的arp(地址解析)时,可能造成混乱,VIP响应的客户端的请求包可能一会发给load blancer,一会发给一台realserver,一会发给另一台realserver,这样有时候连接将中断,因此需要关闭realserver上的 arp,所有的来自VIP的连接请求必须由load blancer来转发。
关闭方法如下:
在realserver上打上patch后
patch -p1 --dry-run < file.diff
rpm -ivh perl-Digest-SHA1-2.01-15.1.i386.rpm
rpm -ivh perl-Digest-HMAC-1.01-11.1.noarch.rpm
重新安装perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Convert-ASN1-0.16-2.rh.el.um.1.noarch.rpm
rpm -ivh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
perl(Net::SSLeay) >= 1.08 is needed by perl-IO-Socket-SSL-0.92-1.rh.el.um.1
perl-Net-SSLeay >= 1.0.3 is needed by perl-IO-Socket-SSL-0.92-1.rh.el.um.1
rpm -ivh perl-Net-SSLeay-1.23-1.rh.el.um.1.i386.rpm
重新安装 perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Net-SSLeay-debuginfo-1.23-1.rh.el.um.1.i386.rpm
rpm -ivh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
error: Failed dependencies:
perl(IO::Socket::SSL) is needed by perl-ldap-0.2701-1.rh.el.um.1
perl(XML::SAX::Base) is needed by perl-ldap-0.2701-1.rh.el.um.1
perl-IO-Socket-SSL is needed by perl-ldap-0.2701-1.rh.el.um.1
perl-XML-SAX is needed by perl-ldap-0.2701-1.rh.el.um.1
新安装下面的包
rpm -ivh perl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpm
重新安装perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
rpm -ivh perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1.noarch.rpm
error: Failed dependencies:
perl(Parse::RecDescent) is needed by perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1
perl-Parse-RecDescent is needed by perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1
先安装
rpm -ivh perl-Parse-RecDescent-1.80-1.rh.el.um.1.noarch.rpm
2.安装heartbeat包
rpm -ivh heartbeat-pils-1.2.3-2.rh.el.3.0.i386.rpm
rpm -ivh heartbeat-stonith-1.2.3-2.rh.el.3.0.i386.rpm
rpm -ivh heartbeat-1.2.3-2.rh.el.3.0.i386.rpm
rpm -ivh heartbeat-ldirectord-1.2.3-2.rh.el.3.0.i386.rpm
这样有关的软件已经全部安装完毕,下面进行Heartbeat和ipvs的配置:
配置ipvsadm:
ipvsadm是1.0.8版,安装后在/etc/rc.d/init.d/目录下自动生成了标准的init服务 脚本,如果你的Director没有 备份服务器,你可以通过服务管理工具让它在相应的运行级里自动运行,如果Director是HA系统,则由heartbeat控制运行。
另外该服务脚本提供了配置保存功能。配置文件为:/etc/sysconfig/ipvsadm 你必须手工建立。然后在其中输入规则和策略:
-A -t 10.1.0.254:80 -s rr
-a -t 10.1.0.254:80 -r 10.1.0.1:80 -g -w 1
-a -t 10.1.0.254:80 -r 10.1.0.3:80 -g -w 1
-a -t 10.1.0.254:80 -r 10.1.0.4:80 -g -w 1
然后存盘。
或直接运行:
ifconfig lo:0 10.1.0.254 netmask 255.255.255.255 broadcast 10.1.0.254 up
route add -host 10.1.0.254 dev lo:0
(这两条在手工启动Ipvsadm时需要执行)
ipvsadm -C
ipvsadm -A -t 10.1.0.254:80 -s rr
ipvsadm -a -t 10.1.0.254:80 -r 10.1.0.1:80 -g
ipvsadm -a -t 10.1.0.254:80 -r 10.1.0.3:80 -g
ipvsadm -a -t 10.1.0.254:80 -r 10.1.0.4:80 Cg
然后运行:/etc/rc.d/init.d/ipvsadm save
就可以保存当前配置到/etc/sysconfig/ipvsadm文件中
在DR上启用IP转发:
1. modifying the line containing net.ipv4.ip_forward in /etc/sysctl.conf
# Enables packet forwarding
net.ipv4.ip_forward = 1
# Enables source route verification
net.ipv4.conf.default.rp_filter = 1
2. 查看上述是否成功:
For these changes to take effect the sysctl command may be used:
/sbin/sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
配置directord:负责侦听realserver的状态,如果realserver出现问题将自动从路由表中删除之。
/usr/share/doc/ heartbeat-ldirectord-1.2.3/ldirectord.cf文件是Ldirectord的配置文件的范例。拷贝该文件到 /etc/ha.d/conf目录下,修改其内容以便在Heartbeat的配置文件haresources中使用,并建立链接:ln Cs /etc/ha.d/conf/ldirectord.cf /etc/ha.d/ldirectord.cf
编辑ldriectord.cf:下面是一个配置实例
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting
virtual=10.1.0.254:80
real=10.1.0.1:80 gate
real=10.1.0.3:80 gate
real=10.1.0.4:80 gate
fallback=127.0.0.1:80 gate
service=http
request="reply.html"
receive="Yeah OK!"
virtualhost=DR1
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
配置HA
需要配置的有三个文件:ha.cf haresources(在每个节点必须相同) Authkeys,应该将它们放置在/etc/ha.d目录下。范例配置在/usr/share/doc/heartbeat-1.2.3目录下,你可以 修改后拷贝到/etc/ha.d目录下
cd /usr/share/doc/heartbeat-1.2.3
cp ha.cf /etc/ha.d
cp haresources /etc/ha.d
cp authkeys /etc/ha.d
1.设置双机脚本ha.cf:负责测试两台DR的状态,如果主机有故障将自动切换到备机上去。
主要修改如下几项:
debugfile
logfile
logfacility
keepalive
deadtime
warntime
initdead
udpport
ucast eth1 10.3.1.6此处需要自己指定eth1为心跳线的连接网卡,10.3.1.6为对方网卡的地址
auto_failback off:此处指定当主机恢复后是否将资源自动切换到主机上,建议选off.
//这次设置为on看看怎样?
node DR1
node DR2 :此处指定加入集群的节点的机器名可以通过uname Cn查看,一定注意不能用ip地址。
上面几个参数出了有说明的地方外,都可以用默认值,只需将该项前面的#去掉就可以了
下面是ha.cf中主要的参数介绍:
这个配置文件告诉heartbeat 使用的是什么介质和如何配置它们。ha.cf 包含你将到的所有的选项,内容如下:
serial /dev/ttyS0 使用串口heartbeat - 如果你不使用串口heartbeat, 你必须选择其它的介质,比如以太网bcast (ethernet) heartbeat。如果你使用其它串口heartbeat,修改/dev/ttyS0 为其它的串口设备。
watchdog /dev/watchdog 可 选项:watchdog功能提供了一种方法能让系统在出现故障无法提供"heartbeat"时,仍然具有最小的功能,能在出现故障1分钟后重启该机器。 这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果你想使用该特性,你必须在内核中装入"softdog" 内核模块用来生成实际的设备文件。想要达到这个目的, 首先输入 "insmod softdog" 加载模块。然后,输入"grep misc /proc/devices" 注意显示的数字 (should be 10). 然后, 输入"cat /proc/misc | grep watchdog" 注意输出显示出的数字(should be 130)。现在你可以生成设备文件使用如下命令:"mknod /dev/watchdog c 10 130" 。
bcast eth1 指定使用的广播heartbeat 的网络接口eth1(修改为eth0, eth2, 或你所使用的接口)
keepalive 2 设置心跳间隔时间为2两秒。
warntime 10 在日志中发出最后心跳"late heartbeat" 前的警告时间设定。
deadtime 30 在30秒后明确该节点的死亡。
initdead 120 在一些配置中,节点重启后需要花一些时间启动网络。这个时间与"deadtime"不同,要单独对待。至少是标准死亡时间的两倍。
hopfudge 1 可选项: 用于环状拓扑结构,在集群中总共跳跃节点的数量。
baud 19200 串口波特率的设定(bps).
udpport 694 bcast和ucast通讯使用的端口号694 。这是缺省值,官方IANA 使用标准端口号。
nice_failback on 可选项:对那些熟悉Tru64 Unix, 心跳活动就像是"favored member"模式。主节点获取所有资源直到它宕机,同时备份节点启用。一旦主节点重新开始工作, 它将从备份节点重新获取所有资源。这个选项用来防止主节点失效后重新又获得集群资源。
node linuxha1.linux-ha.org 强制选项:通过`uname -n`命令显示出的集群中的机器名。
node linuxha2.linux-ha.org 强制选项:通过`uname -n`命令显示出的集群中的机器名。
respawn userid cmd 可选项:列出可以被spawned 和监控的命令。例如:To spawn ccm 后台进程,可以增加如下内容:
respawn hacluster /usr/lib/heartbeat/ccm
通知heartbeat 重新以可信任userid身份运行(在我们的例子中是hacluster) 同时监视该进程的"健康"状况,如果进程死掉,重启它。例如ipfail, 内容如下:
respawn hacluster /usr/lib/heartbeat/ipfail
NOTE: 如果进程以退出代码100死掉, 这个进程将不会respawned。
ping ping1.linux-ha.org ping2.linux-ha.org .... 可选项:指定ping 的节点。 这些节点不是集群中的节点。它们用来检测网络的连接性,以便运行一些像ipfail的模块。
2.配置authkey: 配置加密认证算法,有三种算法:CRC, md5,sha1如果heartbeat运行在一个安全的网络,例如CAT5交叉线,可以用CRC,从资源开销上来说,这是最节省开销的。如果网络是不可靠 的,就用md5,最后如果关心的是安全而不是CPU资源的开销,那么可以使用 sha1,将会得到最佳的安全度,很难被黑客所破解。
我们采用CRC验证:
auth 2
2 crc
一定记得要赋权限:chmod 600 authkeys
格式如下:auth
例: /etc/ha.d/authkeys
使用sha1
auth 1
1 sha1 key-for-sha1-any-text-you-want
使用md5
auth 1
1 sha1 key-for-md5-any-text-you-want
使用CRC
auth 2
2 crc
cd /var/www/html
编写html测试脚本test.html
3.配置haresource
这个文件指定集群所提供的服务以及谁是缺省的主节点。注意,该配置文件在所有节点应该是相同的。
我们的HA集群提供的是负载均衡服务(LVS)和服务监控服务(Ldirectord)。这里集群的IP(虚拟)地址是必须配置的,不要在haresources文件以外的地方配置该IP地址。所以我们应该添加如下一行:
DR1 IPaddr::10.1.0.254/32/10.1.0.254 ipvsadm ldirectord::ldirectord.cf
::前的表示服务脚本名称(IPaddr),你可以在目录/etc/ha.d/resource.d下找到一个脚本名叫 Ipaddr,后面的表示输入的参数
Heartbeat 会在下面的路径搜索同名的启动脚本:
/etc/ha.d/resource.d
/etc/rc.d/init.d
3. 编辑/etc/hosts
在文件中加上两台dr的机器名和ip的对应关系。
127.0.0.1 DR2 localhost.localdomain localhost
10.3.0.5 DR2
10.3.0.6 DR1
10.1.0.5 DR2
10.1.0.6 DR1
以上是DR的配置,下面进行realserver的配置
配置realserver
安装patch:在lvs才用dr方式时存在arp问题需要用如下补丁修改。
将hidden-2.4.25-1.diff传到realserver上
这个内核补丁包可以从:下载对应内核的补丁。
cd /usr/src/linux-.2.4
patch -p1 < /root/hidden-2.4.25-1.diff (arp for LVS-DR/LVS-Tun)
打上补丁后需要重新编译内核:
make mrproper 检查相关文件的一致性
make menuconfig
make dep
make clean
make bzImage
make modules
make modules_install
depmod Ca: 检查内核中有没有未解析的symbol,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。假如输入这个命令后看不到没有任何返回信息的话,那说明在编译过程是已经成功了
在/boot下生成 initrd img文件:
cd /boot
mkinitrd initrd-lvs 2.4.21-27.ELcustom
(后一是编译完内核后在/lib/modules/生成的,具体的文件名可以在,/usr/src/linux-2.4中的makefile中指定具体的名字,默认是initrd-当前内核名custom)
生成新的内核引导文件:
修改启动内核:
cp /usr/src/linux-2.4/arch/i386/boot/bzImage /boot/vmlinuz-lvs (rs)
cp /usr/src/liunx-2.4/System.map /boot/System.map-lvs (rs)
cp /usr/src/linux-2.4/vmlinux /boot/vmlinux-lvs (rs)
cd /boot
rm -f System.map
ln -s System.map.lvs (rs) System.map
修改启动引导文件
vi /boot/grub/grub.conf:
title Redhat-lvs
root (hd0,0)
kernel /boot/ vmlinuz-lvs ro root=/dev/xxx
title Red Hat Enterprise LVS
root (hd0,0)
kernel /vmlinuz-lvs ro root=LABEL=/
initrd /initrd-lvs
重新启动计算机
shutdown Cr now
并用新内核引导系统,系统就有了Hidden补丁了。
在rc5.d, rc3.d加入如下脚本S98startrs:使realserver启动时获得路由和禁止lo:0上arp
ifconfig lo:0 10.1.0.254 netmask 255.255.255.255 broadcast 10.1.0.254:80 up
route add -host 10.1.0.254 dev lo:0
echo 1 >/proc/sys/net/ipv4/conf/all/hidden
echo 1 >/proc/sys/net/ipv4/conf/lo/hidden
#!/bin/bash
#----------mini-rc.lvs_dr-realserver------------------
#installing default gw 192.168.7.254 for vs-dr
/sbin/route add default gw 192.168.7.254
#showing routing table
/bin/netstat -rn
#checking if DEFAULT_GW 192.168.1.254 is reachable
ping -c 1 192.168.7.254
#set_realserver_ip_forwarding to OFF (1 on, 0 off).
echo 0 >/proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
#looking for DIP 192.168.7.9
ping -c 1 192.168.7.9
#looking for VIP (will be on director)
ping -c 1 192.168.7.110
#install_realserver_vip
/sbin/ifconfig lo:0 192.168.7.110 broadcast 192.168.7.110 netmask 255.255.255.255 up
#ifconfig output
/sbin/ifconfig lo:0
#installing route for VIP 192.168.1.110 on device lo:0
/sbin/route add -host 192.168.7.110 dev lo:0
#listing routing info for VIP 192.168.7.110
/bin/netstat -rn
#hiding interface lo:0, will not arp
echo 1 >/proc/sys/net/ipv4/conf/all/hidden
cat /proc/sys/net/ipv4/conf/all/hidden
echo 1 >/proc/sys/net/ipv4/conf/lo/hidden
cat /proc/sys/net/ipv4/conf/lo/hidden
#----------mini-rc.lvs_dr-realserver------------------
配置ha如下:
几点注意事项:
4. haresources中指定的资源之一应该有ipvsadm,也就是我们手工编写的启动ipvs的脚本。
5. haresoueces的resources资源包含两部分:ipvsadm和ldirectord
6. 原来的ipvsadm文件可能有问题,需要重新修改
7. LVS的虚地址应该有HeartBeat启动,所以应该在haresources中设定该地址。
8. test3(节点名) IPaddr::ip_address/netmask/broadcast_address ipvsadm ldirectord::ldirectord配置包 ldirectord::ldirectord配置包
9. ldirectord和ha的日志位于/var/log/ldirectord.log和ha-log
10. heartbeat检测应该采用ucast,需要了解单播地址应该设自己的还是对端的,首先考虑设为对端的。
11. modifying the line containing net.ipv4.ip_forward in /etc/sysctl.conf
# Enables packet forwarding
net.ipv4.ip_forward = 1
# Enables source route verification
net.ipv4.conf.default.rp_filter = 1
12. 查看上述是否成功:
For these changes to take effect the sysctl command may be used:
/sbin/sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
通过以上修改应该ip_forward就不用在ipvsadm中手工修改了!现在还有路由不知在什么地方加!
10.Ldirectord的debug模式启动:
ldirectord -d ldirectord.cf start
这样可以通过重定向查看debug信息,以定位错误!
下面是别人的一个测试例子和报错信息:
> ldirectord -d /etc/ha.d/ldirectord.cf start
> DEBUG2: Running exec(/usr/sbin/ldirectord -d /etc/ha.d/ldirectord.cf start)
> Running exec(/usr/sbin/ldirectord -d /etc/ha.d/ldirectord.cf start)
> DEBUG2: Starting Linux Director v1.62 with pid: 15834
> Starting Linux Director v1.62 with pid: 15834
> DEBUG2: Running system(/sbin/ipvsadm -A -t 192.168.0.163:80 -s rr )
> Running system(/sbin/ipvsadm -A -t 192.168.0.163:80 -s rr )
> DEBUG2: Added virtual server: 192.168.0.163:80
> Added virtual server: 192.168.0.163:80
> DEBUG2: Running system(/sbin/ipvsadm -a -t 192.168.0.163:80 -r 127.0.0.1:80
> -g
> -w 1)
> Running system(/sbin/ipvsadm -a -t 192.168.0.163:80 -r 127.0.0.1:80 -g -w 1)
> DEBUG2: Added fallback server: 127.0.0.1:80 (0 x 192.168.0.163:80) (Weight
> set
> to 1)
> Added fallback server: 127.0.0.1:80 (0 x 192.168.0.163:80) (Weight set to 1)
> DEBUG2: Checking negotiate: real
> server=negotiate:http:tcp:192.168.0.160:80:\/index\.html:ds10Testseite\ fuer\
> die\ Apache\-Installation\ auf\ dieser\ Web\ Site
> (virtual=tcp:192.168.0.163:80)
> ldirectord ldirectord.cf received signal: Can't locate LWP/UserAgent.pm in
> @INC (@INC contains: /usr/local/lib/perl5/5.8.0/i686-linux
> /usr/local/lib/perl5/5.8.0 /usr/local/lib/perl5/site_perl/5.8.0/i686-linux
> /usr/local/lib/perl5/site_perl/5.8.0 /usr/local/lib/perl5/site_perl .) at
> /usr/sbin/ldirectord line 1514.
You are missing LWP/UserAgent.pm which is part of the libwww-perl
perl module. I have packages for this and all of ldirectord's
dependancies available on ultramonkey.org.
Alternatively you can manually installed the dependancies from CPAN.
(Refer to the download directory on ultramonley.org for a guide
to the modules needed).
参照官方文档,将fallback重新打开了。
修改了ldirectord.cf中的通讯页,原来是TestPage改为index.html
启动heartbeat出现如下问题:
Starting High-Availability services:
2005/03/08_14:17:46 CRITICAL: Resource IPaddr::10.1.0.254/32/10.1.0.254 is active, and should not be!
2005/03/08_14:17:46 CRITICAL: Non-idle resources can affect data integrity!
2005/03/08_14:17:46 info: If you don't know what this means, then get help!
2005/03/08_14:17:46 info: Read the docs and/or source to /usr/lib/heartbeat/ResourceManager for more details.
CRITICAL: Resource IPaddr::10.1.0.254/32/10.1.0.254 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or the source to /usr/lib/heartbeat/ResourceManager for more details.
2005/03/08_14:17:46 CRITICAL: Non-idle resources will affect resource takeback!
2005/03/08_14:17:46 CRITICAL: Non-idle resources may affect data integrity!
[FAILED]
heartbeat: 2005/03/08_14:17:46 ERROR: Current node [test3] not in configuration!
heartbeat: 2005/03/08_14:17:46 info: By default, cluster nodes are named by `uname -n` and must be declared with a 'node' directive in the ha.cf file.
heartbeat: 2005/03/08_14:17:46 ERROR: Configuration error, heartbeat not started.
其中要注意node必须用机器名,可以通过uname Cn查看机器名最终就是这一点解决了上面的问题!
在realserver上安装arp problem patch
cd /usr/src/linux-2.4
patch -p1 < /root/ipvs-1.0.9/contrib/patches/hidden-2.4.20pre10-1.diff
patching file include/linux/sysctl.h
Hunk #1 FAILED at 339.
1 out of 1 hunk FAILED -- saving rejects to file include/linux/sysctl.h.rej
此问题说明安装的patch与系统内核不匹配。需要重新下载新的内核patch
关于arp problem:
由于在DR模式中,Load Blancer和Real Server共享Vitual IP,所以当Realserver响应VIP的arp(地址解析)时,可能造成混乱,VIP响应的客户端的请求包可能一会发给load blancer,一会发给一台realserver,一会发给另一台realserver,这样有时候连接将中断,因此需要关闭realserver上的 arp,所有的来自VIP的连接请求必须由load blancer来转发。
关闭方法如下:
在realserver上打上patch后
# Start the hiding interface functionality
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
# Hide all addresses for this interface
echo 1 > /proc/sys/net/ipv4/conf//hidden
在打patch前查看一下:
patch -p1 --dry-run < file.diff