wesley4248 发表于 2004-11-27 18:19:52

Linux-HA安裝手冊... 之四

==========================================================
==Saker新一代IT资源智能集中监管系统 (www.sakersoft.org) ==
==========================================================
###得知您负责管理本单位的IT设备,贵单位的IT设备可能包括多种UNIX系统、NT(包括Windows2000)等系统;网络设备可能包括交换机、路由器等;数据库可能有ORACLE、MsSql等的数据库产品;提供的网络服务有WWW、DNS、FTP、EMAIL等多种服务。
------------------------------------------------------------
###通过我们的Saker系统可以统一进行7×24小时的监控,短信、邮件报警,故障自动处理。这样可以大大降低您工作量的同时提高工作效率。并且本软件回报丰厚,请您考虑!
-----------------------------------------------------------
###优秀的跨平台性, Saker支持当今全部主流的操作系统,包括:Windows NT/Windows 2000/Windows 2003/Windows XP,linux,Aix,HP-UX,Irix, SunOS/Solaris,SCO ,Novell Netware,BSD,MacOS等;
-----------------------------------------------------------
###超强的监控功能:Saker拥有数百种监控模块,可以实现对网络服务(SMTP, POP3, HTTP, TCP,SNMP,NNTP,BGP等)、网络设备(路由器,交换机,Modem,UPS等)主机(CPU,内存,硬盘,文件,进程,用户等)、数据库(Oracle,MS SQl,DB2, INFORMIX,SYBASE,MYSQL, PostgreSQL等)、机房环境(温度等)和用户自己的应用程序的集中监控和管理。
----------------------------------------------------------
###丰富的报警功能:Saker支持非常丰富的报警手段,包括邮件,手机短信,呼机,电话、弹出窗口,声音,ICQ等多种技术手段。
-------------------------------------------------------------------------------------------
###强大的事件处理功能:Saker为每个受自己监管的服务分配一个事件处理器(Event Handler),用户可以根据需要,自定义事件处理模块(如:重启进程, 重启主机,备份数据等等)。比如:当检测到web进程停止服务时,Saker会按照用户的定义自动的重启进程;又如,当硬盘的使用率超过用户设定的阀值时,Saker会按照用户的定义自动的进行数据的压缩或者备份。从而实现真正的自动化管理。
-----------------------------------------------------------
Saker是一套功能全面、技术国际领先、运行稳定、实用的IT资源监管系统。
=========================================
==Saker系统--使IT管理更轻松         ===
==http://www.sakersoft.org/         ===
==========================================3.2 mon daemon的设定
因为我是以telnet的服务为测试范例,我真正上线使用的系统将会是Web server的监测,因此下面的设定只针对telnet来作设定,需要其他Service的请自行更正,并请自己去看mon的一些设定说明,这儿只简单说明下列的意思。

#
# Extremely basic mon.cf file
# 除了lvs.alert外,事实上还可发送Email,只是我把他拿掉了,
# 因为我的Server并没有启动Sendmail..:)
# global options
#
cfbasedir = /etc/mon
pidfile = /var/run/mon.pid
statedir = /var/run/mon/state.d
logdir = /var/run/mon/log.d
dtlogfile = /var/run/mon/log.d/downtime.log
alertdir = /usr/lib/mon/alert.d
mondir = /usr/lib/mon/mon.d
maxprocs = 20
histlength = 100
randstart = 60s
authtype = userfile
userfile = /etc/mon/userfile

#
# group definitions (hostnames or IP addresses)
# 要监测的机器,一次可以一部也可以多部
# 为了减少麻烦,而且我设备也不多,所以我设定一个group只有一个Server
hostgroup server1 10.144.43.175
hostgroup server2 10.144.43.187
# 监测10.144.43.175
watch server1
# service 后面的telnet名称同/etc/services里面的名称,不是自己乱给的
service telnet
# 间隔多久测试一次,这儿设定20秒,也可以设定10m、1h。
interval 20s
# 用哪一个monitor程式去作,基本上telnet.monitor是用perl写的程。
# 所以如果有自己的monitor程式,也可以比照办理。
monitor telnet.monitor
# 监测的时间
period wd {Mon-Fri} hr {7am-10pm}
# alert:当有连线失败时会呼叫这个Event,执行后面lvs.alert程式
alert lvs.alert -P tcp -V 10.144.43.185:23 -R 10.144.43.175 -W 5 –F dr
# uplaert:当当连线失败后,又发现对方活过来时候,会呼叫这个event。
upalert lvs.alert -P tcp -V 10.144.43.185:23 -R 10.144.43.175 -W 5 -F dr -u 1

watch server2
service telnet
interval 20s
monitor telnet.monitor
period wd {Mon-Fri} hr {7am-10pm}
alert lvs.alert -P tcp -V 10.144.43.185:23 -R 10.144.43.187 -W 5 –F dr
upalert lvs.alert -P tcp -V 10.144.43.185:23 -R 10.144.43.187 -W 5 -F dr -u 1
# See /usr/doc for the original example...

3.3.修改完成后,就可以用service mon start,启动mon daemon,进行监测。
4.可以自己作一些测试,例如拔掉网路线,关掉Realserver上的服务,测试看看哪儿有问题。(呼!总算可以对老板交代了。^_^)

三、做Director的Load Balance:
那如果今天我有一堆机器,而且在上面执行的服务都相当的重要,所以只有一部Director对这些重要工作来说,是非常危险的,万一这部Director死掉了,那我的服务不就毁了?因此在这儿要介绍「mon+heartbeat+fake+coda」的heartbeat与fake的安装与设定。
1.从http://www.linux-ha.org/download/ 抓取下列RPM档案:
heartbeat-1.0.3-1.rh.8.0.1.i386.rpm
heartbeat-1.0.3-1.rh.8.0.1.src.rpm
heartbeat-ldirectord-1.0.3-1.rh.8.0.1.i386.rpm
heartbeat-pils-1.0.3-1.rh.8.0.1.i386.rpm
heartbeat-stonith-1.0.3-1.rh.8.0.1.i386.rpm
从http://rpmfind.net 抓取下列RPM档案:
libnet-1.1.0-1.rh.8.0.um.1.i386.rpm
perl-Authen-SASL-2.03-1.rh.8.0.um.1.noarch.rpm
perl-Convert-ASN1-0.16-2.rh.8.0.um.1.noarch.rpm
perl-IO-Socket-SSL-0.92-1.rh.8.0.um.1.noarch.rpm
perl-Mail-IMAPClient-2.2.7-1.rh.8.0.um.1.noarch.rpm
perl-Net-SSLeay-1.22-1.rh.8.0.um.1.i386.rpm
perl-Parse-RecDescent-1.80-8.noarch.rpm
perl-XML-NamespaceSupport-1.08-2.noarch.rpm
perl-XML-SAX-0.12-1.rh.8.0.um.1.noarch.rpm
从http://search.cpan.org抓取下列perl-ldap档案,目前最新版本是0.27版本,其实都无所谓,可以用就好了。
perl-ldap-0.25.tar.gz (我这儿用以前我抓的tar.gz档)

2.开始依照下列顺序安装:
# rpm –ivh perl-Convert-ASNI-0.16.2.rh.8.0.um.1.onarch.rpm
# perl –ivh perl-Authen-SASL-2.03-1.rh.8.0.um.1.noarch.rpm
# rpm –ivh perl-Net-SSLeay-1.22-1.rh.8.0.um.1.i386.rpm
# rpm –ivh perl-IO-Socket-SSL-0.92-1.rh.8.0.um.1.noarch.rpm
# rpm –ivh perl-Mail-IMAPClient-2.2.7-1.rh.8.0.um.1.noarch.rpm
# rpm –ivh perl-Parse-RecDescent-1.80-8.noarch.rpm
# rpm –ivh perl- NamespaceSupport-1.08-2.noarch.rpm
# rpm –ivh perl- XML-SAX-0.12-1.rh.8.0.um.1.noarch.rpm
# rpm –ivh libnet-1.1.0-1.rh.8.0.um.1.i386.rpm
# gzip –dc perl-ldap-0.25.tar.gz |tar xvf –
# cd perl-ldap-0.25
# perl Makefile
# make && make test && make install
# cd ..
需要的Perl module安装完毕,开始安装heartbeat的modules。
# rpm –ivh heartbeat-pils-1.0.3-1.rh.8.0.1.i386.rpm
# rpm –ivh heartbeat-stonith-1.0.3-1.rh.8.0.1.i386.rpm
# rpm –ivh heartbeat-1.0.3-1.rh.8.0.1.i386.rpm
下面这个module是一个整合所有功能的RPM,heartbeat官方网站有介绍。
# rpm –ivh --nodeps heartbeat-ldirectord-1.0.3-1.rh.8.0.1.i386.rpm

从http://www.linux-ha.org/ 这个网站上可以知道fake已经整合进heartbeat的功能里面,所以我们就不需要安装fake相关的程式了。
目前Linux-HA可以应用的方面如下:
o Web servers
o LVS director servers
o Mail servers
o Database servers
o Firewalls
o File servers
o DNS servers
o DHCP servers
o Proxy Caching servers
o etc.
我们这里的重点是要做LVS Director Servers的Failover机制,也就是要做HA(High availability)架构。所以对于heartbeat-ldirectord这个套件不作介绍,有兴趣的人请自行研究(http://www.linuxvirtualserver.org/HighAvailability.html)一文。

Linux-HA实验例子:
系统架构如同基本设置范例图形所示,只是这儿设置Primary Director为10.144.43.187 (linux187),而Secondary Director为10.144.43.142(linux142),而10.144.43.175(就是唯一的RealServer,但是事实上10.144.43.142与10.144.43.187上面还是有提供服务。简单的说就是Director可以互相备援,且Realserver失败的时候,会自动从Director上面将该笔资料自LVS的Routing Rule中消除。

1.在Linux142与Linux187上都将Mon与Heartbeat套件安装完成。且在/etc/rc.local中加入一个设定subinterface的shellscript(/root/conf/data)。

/root/conf/data 内容如下:
#!/bin/sh
# 开机时读取,设定LVS相关的设定值,此时扮演LVS中的RealServer的角色

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
ifconfig lo:0 10.144.43.185 netmask 255.255.255.255 broadcast 10.144.43.185
echo 1 >/proc/sys/net/ipv4/ip_forward
echo 1 >/proc/sys/net/ipv4/conf/all/hidden
echo 1 >/proc/sys/net/ipv4/conf/lo/hidden
route add -host 10.144.43.185 dev lo:0

/etc/rc.local内容如下:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
# add subinterface
/root/conf/data
作这个动作的目的在于让Linux142、Linux187在开机的时候将lo:0这个subinterface加入在网路卡中,同时启动hidden避免ARP问题。记得
chmod 755 data。

2.在Linux142与 linux187中,接着设定Mon基本设定,修改/etc/mon/mon.cf,使其对nb8048、Linux187、linux142作监测。因为提供的服务是Port 8080,在/etc/services中的名称为(webcache)
#
# Extremely basic mon.cf file
#
#
# global options
#
cfbasedir = /etc/mon
pidfile = /var/run/mon.pid
statedir = /var/run/mon/state.d
logdir = /var/run/mon/log.d
dtlogfile = /var/run/mon/log.d/downtime.log
alertdir = /usr/lib/mon/alert.d
mondir = /usr/lib/mon/mon.d
maxprocs = 20
histlength = 100
randstart = 60s
authtype = userfile
userfile = /etc/mon/userfile

#
# group definitions (hostnames or IP addresses)
#
hostgroup server1 10.144.43.175
hostgroup server2 10.144.43.142
hostgroup server3 10.144.43.187

watch server1
service webcache
interval 10s
monitor http.monitor -p 8080 -t 10
allow_empty_group
period wd {Sun-Sat}
alert lvs.alert -P tcp -V 10.144.43.185:8080 -R 10.144.43.175 -W 5 -F dr
alertevery 1h
upalert lvs.alert -P tcp -V 10.144.43.185:8080 -R 10.144.43.175 -W 5 –F dr -u 1

watch server2
service webcache
interval 10s
monitor http.monitor -p 8080 -t 10
period wd {Sun-Sat}
alert lvs.alert -P tcp -V 10.144.43.185:8080 -R 10.144.43.142 -W 5 -F dr
alertevery 1h
upalert lvs.alert -P tcp -V 10.144.43.185:8080 -R 10.144.43.142 -W 5 -F dr -u 1
watch server3
service webcache
interval 10s
monitor http.monitor -p 8080 -t 10
period wd {Sun-Sat}
alert lvs.alert -P tcp -V 10.144.43.185:8080 -R 10.144.43.187 -W 5 -F dr
alertevery 1h
upalert lvs.alert -P tcp -V 10.144.43.185:8080 -R 10.144.43.187 -W 5 -F dr -u 1

3.编辑lvs.alert同前面提过的lvs.alert档案,放在/usr/lib/mon/alert.d/中。记得
chmod 755 lvs.alert

4.设定Heartbeat套件(High Availability)。
4.1 利用rpm –q heartbeat –d 将Heartbeat三个重要的设定档案(ha.cf、authkeys、haresources),copy到/etc/ha.d目录下。
# rpm -q heartbeat -d
/usr/share/doc/heartbeat-1.0.3/authkeys
/usr/share/doc/heartbeat-1.0.3/ha.cf
/usr/share/doc/heartbeat-1.0.3/haresources
#
4.2 修改/etc/hosts内容如下:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
10.144.43.142 linux142
10.144.43.187 Linux187
10.144.43.175 nb8048

4.3修改/etc/ha.d/authkeys内容如下:
auth 1
1 sha1 doss123
其中doss123为重要的key。然后
# chmod 600 authkeys
4.4修改/etc/ha.d/ha.cf内容如下:
logfacility local0 # 使用syslogd
keepalive 2 # 每隔几秒送一次heartbeat讯号
deadtime 40 # 多长时间就认定Primary Server Dead
initdead 240
# hopfudge maximum hop count minus number of nodes in config
nice_failback on # 如果Service转移到Secondary,就不要再转移回Primary
hopfudge 1 # ???
udpport 1001 # 使用哪一个udp port
ucast eth0 10.144.43.142 # Primary用unicast送给Secondary,如果在 Secondary则送给Primary
node Linux187 # 给定cluster中的节点
node linux142 # 给定cluster中的节点

4.5修改/etc/ha.d/haresources内容如下:
Linux187 10.144.43.185 lvs mon
这里设定Linux187在/etc/hosts里面要有设定,否则会找不到。且名称必须等于「uname –n」的内容。上面的意思是说,当heartbeat两边启动时,Linux187与linux142都启动时,会有linux187取得LVS VIP的控制权。而他会启动后面两个Service,lvs(我们皆下来要写的启动Daemon 的shell script),而mon则是先前我们已经设定的好的mon daemon。

4.6 编写/etc/init.d/lvs(启动lvs daemon)内容如下:
#!/bin/sh
# /etc/init.d/lvs
# 当LVS Server启动时,也就是透过High Availability启动LVS程式时,
# 1.将Lo的hidden属性取消
# 2.将lo:0 down下来,将lo:0删除
# 3.设定相关LVS设定档案
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PATH
IPVSADM=/sbin/ipvsadm

case "$1" in
start)
if [ -x $IPVSADM ]
then
# 因为我们有设定lo:0的loopbback 的subinterface所以要先将相关设定移除
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/hidden
echo 0 > /proc/sys/net/ipv4/conf/lo/hidden
route del -host 10.144.43.185 dev lo:0
ifconfig lo:0 down
# 建立Subinterface eth0:0
ifconfig eth0:0 10.144.43.185 netmask 255.255.255.255 broadcast 10.144.43.185
# 设定LVS/DR相关设定,建立8080 Port的Service
$IPVSADM -A -t 10.144.43.185:8080 -s rr
$IPVSADM -a -t 10.144.43.185:8080 -r 10.144.43.175 -w 5 -g
$IPVSADM -a -t 10.144.43.185:8080 -r 10.144.43.187 -w 5 -g
$IPVSADM -a -t 10.144.43.185:8080 -r 10.144.43.142 -w 5 -g
fi
;;
stop)
if [ -x $IPVSADM ]
then
#---- 停止LVS Server,但是依然要回复RealServer的身份
$IPVSADM –C
echo 1 >/proc/sys/net/ipv4/conf/all/hidden
echo 1>/proc/sys/net/ipv4/conf/lo/hidden
ifconfig lo:0 10.144.43.185 netmask 255.255.255.255 broadcast 10.144.43.185
route add –host 10.144.43.185 dev lo:0
fi
;;
*)
echo "Usage: lvs {start|stop}"
exit 1
esac
exit 0

4.7修改/etc/ha.d/resource.d/IPaddr 这个shellscript:
在add_interface() subrouteing 中新加入下列三行:
add_interface () {
ipaddr="$1"
ifinfo="$2"
iface="$3"

#
# On Linux the Alias is named ethx:y
# This will remove the "extra" interface Data
# leaving us with just ethx
#
case $SYSTYPE in
*BSD)
IFEXTRA=""
;;
*)
IFEXTRA=`echo "$ifinfo" | cut -f2-`
;;
esac

case $SYSTYPE in
SunOS)
case `uname -r` in
5.8)
$IFCONFIG $iface plumb
CMD="$IFCONFIG $iface inet $ipaddr $IFEXTRA up"
;;
*)
CMD="$IFCONFIG $iface inet $ipaddr $IFEXTRA up"
;;
esac
;;
*BSD)
CMD="$IFCONFIG $iface inet $ipaddr netmask 255.255.255.255 alias"
;;
*)
CMD="$IFCONFIG $iface $ipaddr $IFEXTRA"
;;
esac

ha_log "info: $CMD"
$CMD
# 将subinterface的hidden属性打开,如此可避免ARP问题
echo 1 >/proc/sys/net/ipv4/conf/all/hidden
echo 1 >/proc/sys/net/ipv4/conf/lo/hidden
# 加入预设到VIP的route
route add –host $ipaddr dev $iface
rc=$?

case $rc in
0)
;;
*)
echo "ERROR: $CMD failed."
;;
esac

return $rc
}
页: [1]
查看完整版本: Linux-HA安裝手冊... 之四