利centos 4.6+heartbeat+ldirectord+ipvsadm构建lvs-dr负载均衡服务器
otto
|
1#
otto 发表于 2008-08-15 16:27
利centos 4.6+heartbeat+ldirectord+ipvsadm构建lvs-dr负载均衡服务器
Centos 4.6中利用heartbeat+ldirectord+ipvsadm设置lvs-dr高可用负载均衡服务器
一。我实验室中服务ip地址规划如下: lvs director(及lvs服务器): IP-192.168.5.238 vip-192.168.5.236 网关:192.168.5.1 两台lvs real server ip分别为:192.168.5.45,192.168.5.216 网关:192.168.5.1 二。所需软件列表如下: heartbeat-2.1.3-1.fc7.i386.rpm (requires pils and stonith RPMs) heartbeat-debuginfo-2.1.3-1.fc7.i386.rpm heartbeat-devel-2.1.3-1.fc7.i386.rpm heartbeat-gui-2.1.3-1.fc7.i386.rpm heartbeat-ldirectord-2.1.3-1.fc7.i386.rpm (needed for integration with LVS) pils-2.1.3-1.fc7.i386.rpm stonith-2.1.3-1.fc7.i386.rpm 软件官方下载地址:http://linux-ha.org/download/index.html#2.1.3 三。检查内核是否支持ipvs功能 modprobe -l|grep ipvs,下面是我本机输出的列表,你的有可能与不同,但只要有下列类似ip_vs输出,证明你的内核巳支持ipvs,否则你还必须下载内核原代码重新译内核。 /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_sed.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_dh.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_wrr.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_wlc.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_nq.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_lc.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_lblc.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_ftp.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_rr.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_sh.ko /lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs.ko 四。安装第二步下载的heartbeat软件及配置heartbeat与ldirectord a)录找配置实例文件 rpm -qd heartbeat|grep ha.cf rpm -qd heartbeat|grep haresources rpm -qd heartbeat-ldirectord|grep ldirectord.cf 如我本机中ha.cf 与 haresources安装好后在/usr/share/doc/heartbeat-2.1.3/目录下,而ldirector.cf配置文件是在 /usr/share/doc/heartbeat-ldirectord-2.1.3/下。找到后将ha.cf与haresources挎至 /etc/ha.d与/etc/ha.d/conf目录下,而ldirectord.cf挎至/etc/ha.d/conf目录下。 b)修改配置文件. 1.以下是我/etc/ha.d/ha.cf中我注释掉的内容: debugfile /var/log/ha-debug---heartbeat debbug日志文件路径 logfile /var/log/ha-log----heartbeat 日志文件路径 keepalive 2 心跳检测时间间隔 deadtime 30 多久没有检测到心跳时宣布死亡 warntime 10 initdead 120 heartbeat第一次启动时启动其所控资源的时间 udpport 694 heartbeat监听端口 bcast eth0 # Linux心跳路径,最好不要与正常生产网络中的设备混在一起 watchdog /dev/watchdog 启动内核看门狗功能 node zhanghy 主节点主机名称(必须同uname -n返回的主机名相同) node host188 备份主机名称(同上) ping 192.168.5.1 ping我内部网关地址,主要是利用ipfail功能检测主服务器网络是否正常 ping 192.168.5.2 同上 respawn hacluster /usr/lib/heartbeat/ipfail heartbeat的一插件 apiauth ipfail gid=haclient uid=hacluster 2.下面是我在haresources中修改的项 zhanghy 192.168.5.236/24/eth0/192.168.5.255 ldirectord::ldirectord.cf LVSSyncDaemonSwap::master haresources中语法格式如下: lvs director主机服务器名称 vip地址/掩码/监听网卡/广播地址 资源脚本(注:资料脚本必须位于/etc/init.d/或/etc/ha.d/resource.d下,且不能随机一启动) 3.ldirectord.cf的配置文件如下 # Global Directives checktimeout=3 超时时间 checkinterval=1 检测真实服务器的间隔 #fallback=127.0.0.1:80 autoreload=yes 表示修改ldirectord.cf配置文件ldirectord自动加载 logfile="/var/log/ldirectord.log" #logfile="local0" #emailalert="zhanghuiyun0978@gmail.com" #emailalertfreq=3600 #emailalertstatus=all quiescent=yes 如果真实服务器失败,ldirectord所采取的动作,注意如果主里设为yes,则必须在内核中修改下列文件: echo "1" >/proc/sys/net/ipv4/vs/expire_quiescent_template # Sample for an http virtual service virtual=192.168.5.236:80 增加一台ip地址为192.168.5.236虚拟服务器 real=192.168.5.45:80 gate 对虚拟服务器80端口的访问重定向ip地址为192.168.5.45的真实服务器的80端上 real=192.168.5.216:80 gate 意义同上 # real=192.168.5.238:80 gate fallback=127.0.0.1:80 gate 如果两台真实服务器都无效,则定向本机的lo地址 service=http 指定服务类型 request="testpage" ldirectord检查真实服务器时用到的页面 receive="test page" ldirectord所请求页面内的内容 # virtualhost=some.domain.com.au scheduler=rr lvs-dr调度方法,rr表示循环调用 persistent=600 tcp连接时间 netmask=255.255.255.255 掩码 protocol=tcp 协议类型 checktype=negotiate ldirectord检测真实服务器的方式 # checkport=80 request="testpage" 同上可不用 receive="test page"同上可不用 # virtualhost=www.x.y.z ldirectord工作原理: ldirectord 需要你在真实服务器内启用apache服务器,并在每台真实服务器web服务器的根目录下建立你在配置文件所指定的文件与内容,然后ldirectord 通过循环检查此文件来确定真实服务器是否存活,如果不存活,则自动将其权重设为0,以确保后面客户的连接不会再导向失效的真实服务器,如果真实服务修复上线后,则其又将它的权重设为以使它能够继续为客端连接提供服务。 ldirectord主要是通过调用ipvsadm来创建ipvs虚拟服务器表 五。在真实服务器上打开arp广播忽略及在真实服务器上回环设备上增加vip地址,直接将下面脚本放在你的真实服务器上运行并确定能随机启动。 #!/bin/bash #ignore arp script VIP1=192.168.5.236 #************************************************************* case $1 in start) echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore echo "2">/proc/sys/net/ipv4/conf/all/arp_announce #Add ip alias for lo /sbin/ifconfig lo:0 $VIP1 netmask 255.255.255.255 up /sbin/route add -host $VIP1 dev lo:0 ;; stop) echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore echo "0">/proc/sys/net/ipv4/conf/all/arp_announce /sbin/ifconfig lo:0 $VIP1 netmask 255.255.255.255 down /sbin/route del -host $VIP1 ;; status) iothere=`/sbin/ifconfig lo:0|grep $VIP1` iorthere=`/bin/netstat -rn|grep $VIP1` if [ ! "$iothere" -o ! "$iorthere" ];then echo "LVS Real Server is STOP" else echo "LVS Real Server is ALIVE" fi ;; *) echo "Usage: $0 start|stop|status" ;; esac 六。在lvs director服务器输入watch ipvsadm -L -n检查你的ipvs表,并在其它电脑上输入http://192.168.5.236检查lvs服务器是否会自动循环真实服务器ip地址。 后面我将陆续增加一些关于集群服务性能监控方面的文章,也希望朋友能提供集群方面的相关知识,共同时进步。 |