首页 > 系统应用 > LVS > 安装LVS – DR 模式详解
2015
08-03

安装LVS – DR 模式详解

#######################################
# 系统安装准备:
#######################################
1.    glib、glib-devel(glib-config)
2.    libnet   (可以用rpm 包,也可以用源码安装)
3.    libxml2、libxml2-devel
rpm -ivh /mnt/cdrom/RedHat/RPMS/glib2-devel-*
rpm –ivh /mnt/cdrom/RedHat/RPMS/libnet*
 
本人安装系统的过程如下:
1、安装系统.( CentOS-4.4-i386)
见另一篇linux服务器安装与安全规范.txt
2、下载最新的内核包.( linux-2.6.18.1.tar.bz2) 及最新的lvs补丁(patch-2.6.17-ja1.diff)
备注:分別在3个Linux系统中设置Virtual IP, 在RS上必须对VIP忽略ARP回应。由于2.42.6內核处理ARP方式不一样,在2.6內核中通过调整内核参数忽略ARP广播回应。所以可以不打lvs补丁,所以本次测试未打ARP补丁。
cd /usr/src
tar –jxvf linux-2.6.18.1.tar.bz2
ln –s linux-2.6.18.1  linux
cd linux
patch –p1 < patch-2.6.17-ja1.diff
make mrproper  && make menuconfig && make  && make modules_install  && make install
如出现” Enforcing mode requested but no policy loaded, halting now.
Kernel panic - not syncing : Attempted to kill init!“,
修改/etc/selinux/config          将selinux=enforcing或permissive改成disabled
3、下载相关链接:
Kernel:http://www.kernel.org/
IPVS和IPVSadm:http://www.linuxvirtualserver.org/software/ipvs.html
ARP hidden:http://www.ssi.bg/~ja/#hidden        (备注:以前2.4kernal的版本需要,新的版本不需要)
 
4、我的测试环境:
二台PC,一台PC上装linux,安装四台虚拟机,一台虚拟机做active  ,另一台虚拟机做standby。还有一台虚拟机器作WEBSERVER03,本身的linux做WEBSERVER01,另一台WINDOWS PC上安装一台虚拟机,此虚拟机作WEBSERVER02
 
注意事项:
自己编译内核时,从http://www.kernel.org/下载标准内核源文件,不要使用发行版的内核源文件。
ARP hidden可以用arp_ignore/arp_announce或者arptables_jf代替
 
 
 
#######################################
# IPVS --  Load Balance (负载均衡集群)
#######################################
 
一.下载最新内核包,编译kernel。(见上页)
二.安装最新的ipvsadm
ipvsadm-1.24.tar.gz
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make && make install
注意在make时可能会出现很多错误的信息,请按照如下操作就可以心编译正常
ln -s /usr/src/ linux-2.6.18 /usr/src/linux(在上一页中已经作好,所以一般不会错)
cd ipvsadm-1.24
 
make && make install
三.重要的一些shell
1.Director(注释:我写的脚本名称为lvs-dr.sh)
#!/bin/bash
echo "1" >; /proc/sys/net/ipv4/ip_forward (开启ip_forward)
echo "1" >; /proc/sys/net/ipv4/conf/all/send_redirects (开启ICMP Redirects)
echo "1" >; /proc/sys/net/ipv4/conf/default/send_redirects (开启ICMP Redirects)
echo "1" >; /proc/sys/net/ipv4/conf/eth0/send_redirects  (开启ICMP Redirects)
 
ifconfig eth0:0 192.168.0.100 broadcast 192.168.0.100 netmask 255.255.255.255 up (设置虚拟IP)
route add -host 192.168.0.100 dev eth0:0 (设置达到虚拟Ip的路由)
ipvsadm –C (清空ipvsadm table)
ipvsadm -A -t 192.168.0.100:80 -s wrr    (建立service rule, 当前调度算法为加权轮叫调度)
(如果需要session保持添加-p 默认保持300)
ipvsadm -a -t  192.168.0.100:80 -r 192.168.0.11 -g -w 1  (建立转发规则)
备注:192.168.0.11为REALSERVER(也是GFS)的IP,将来需要替换为公网IP,下同
ipvsadm -a -t  192.168.0.100:80 -r 192.168.0.12 -g -w 1   (建立转发规则)
ipvsadm -a -t  192.168.0.100:80 -r 192.168.0.13 -g -w 1   (建立转发规则)
ipvsadm (检查当前ipvsadm table)
 
2.RealServer(注释:我写的脚本名称为no-arp.sh)
#!/bin/bash
echo "0" >; /proc/sys/net/ipv4/ip_forward (关闭ip_forward)
ifconfig lo:0 192.168.0.100 broadcast 192.168.0.100 netmask 255.255.255.255 up  (设置虚拟IP)
route add -host 192.168.0.100 dev lo:0 #(设置达到虚拟Ip的路由)
echo "1" >; /proc/sys/net/ipv4/conf/all/hidden (开启No-ARP)
echo "1" >; /proc/sys/net/ipv4/conf/lo/hidden  (开启No-ARP)
 
 
#######################################
# HeartBeat   -----  高可用性软件
#######################################
 
HeartBeat是Linux-HA的高可用性集群软件,它的主要作用是:
安装在Load Balancer和Backup上,运行于active/standby模式。
当Load Balancer失效时,Backup自动激活,成为实际的Load Balancer。
切换到active模式时,按顺序启动Virtual IP、IPVS和Ldirectord。
切换到standby模式时,按顺序关闭Ldirectord、IPVS和Virtual IP。
 
1、安装libnet
tar zxf libnet.tar.gz
cd libnet
./configure
make
make install
 
2、安装heartbeat
groupadd -g 694 haclient
useradd -u 694 -g haclient hacluster
 
tar zxf heartbeat-2.0.7.tar.tar
cd heartbeat-2.0.7.tar.tar
./ConfigureMe configure --disable-swig --disable-snmp-subagent
make
make install
 
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
cp ldirectord/ldirectord.cf /etc/ha.d/
 
#chkconfig --add heartbeat
#chkconfig --del ldirectord
 
 
2、修改主机名(/etc/hosts)# that require network functionality will fail.
127.0.0.1               mainha localhost.localdomain localhost
172.16.1.11           mainha
172.16.1.12           backupha
(注意:主备都要修改)
 
3、主配置文件(/etc/ha.d/ha.cf):
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 10
warntime 5
initdead 30
udpport 694
# 当主节点恢复后,是否自动切回
auto_failback on
# stonith用来保证共享存储环境中的数据完整性
#stonith baytech /etc/ha.d/conf/stonith.baytech
# watchdog能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。
# 如果使用该特性,则在内核中装入"softdog"内核模块,用来生成实际的设备文件,输入"insmod softdog"加载模块。
# 输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc | grep watchdog"(应为130)。
# 生成设备文件:"mknod /dev/watchdog c 10 130" 。
#watchdog /dev/watchdog
node mastha
node backupha
# 默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
# 所以当网络中断时,并不会进行Load Balancer和Backup之间的切换。
# 可以通过ipfail插件,设置'ping nodes'来解决这一问题。详细说明参考hearbeat文档。
ping 192.168.0.1
respawn hacluster /usr/lib64/heartbeat/ipfail
# 其他一些插件可以在/usr/lib/heartbeat下找到
#apiauth ipfail uid=hacluster    #apiauth ccm uid=hacluster    #apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root                    #apiauth default gid=haclient
4、资源文件(/etc/ha.d/haresources):
mainha IPaddr::192.168.0.100/24/eth0 ipvsadm ldirectord
5、认证文件(/etc/ha.d/authkeys),选取一种认证方式,这个文件的权限必须是600:
auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password
 
 
#######################################
# Ldirectord
#######################################
 
安装HeartBeat过程中,已经自动安装了Ldirectord,它的作用是:
监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加。
配置(/etc/ha.d/ldirectord.cf)# Global Directives
 
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
 
# A sample virual with a fallback that will override the gobal setting
 
virtual=192.168.0.100:80
real=192.168.0.201:80  gate weight 1
real=192.168.0.202:80 gate  weight 1
#real=172.20.9.24:80 gate weight 1
#real=172.20.9.25:80 gate weight 1
#real=172.20.9.26:80 gate weight 1
#fallback=127.0.0.1:80   gate
service=http
request="test.html"
receive="Test Page"
#virtualhost=www.asiacorp.net
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
要点:
使用同样的方法配置节点2 (即backupha)
备份节点192.168.0.134 上的heartbeat和apache的配置与节点1要完全相同,lvs配置也要相同。测试用APACHE安装位置:
./configure --prefix=/usr/local/apache
指定目录默认安装
 
 
 
在每个Real Server的中添加监控页:
echo "Test Page" > /usr/local/apache/htdocs/test.html
Http配置文件(/usr/local/apache2/conf/httpd.conf):
Listen 80
 
#######################################
启动顺序:
#######################################
 
1、    主HA上运行lvs-dr.sh
2、    备HA上运行lvs-dr.sh
3、    各个webserver上运行no-arp.sh
4、    主HA上运行heartbeat
5、    备HA上运行heartbeat
6、    各个webserver上运行apache server
 
 
#######################################
全文备注:
#######################################
因为实际测试时候的ip是自动获得的,所以贴上实际测试时的lvs-dr.sh和no-arp.sh
 
LVS-DR.SH
 
[root@mainha ~]# cat lvs-dr.sh
#!/bin/bash
 
# set the system kernal setting
echo "1" >/proc/sys/net/ipv4/ip_forward
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
sysctl -p
 
# set the value name
VIP=192.168.0.100
RIP1=192.168.0.167
RIP2=192.168.0.143
RIP3=192.168.0.20
GW=192.168.0.1
 
# set the Virtual IP Address
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
 
#Clear IPVS table
/sbin/ipvsadm -C
 
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s wrr -p 300
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g -w 1
 
#Run LVS
/sbin/ipvsadm
#end
 
 
NO-ARP.SH
 
[root@localhost ~]# cat no-arp.sh
i#!/bin/bash
VIP=192.168.0.100
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
sysctl -p
#end
 
由于这个文档是我几年安装的,所以系统版本都很老了
最后编辑:
作者:saunix
大型互联网公司linux系统运维攻城狮,专门担当消防员

留下一个回复