LVS配置

来源:互联网 发布:电线传输网络信号原理 编辑:程序博客网 时间:2024/05/01 07:01
环境描述:本文在配置LVS时使用三台linux,虚拟VIP:172.18.3.209
一台做Directorserver(172.18.3.208)
两台做realserver(172.18.3.205,172.18.3.207)
在配置lvs+heartbeat时,又添加了一台(192.168.8.3)做为备份主节点Virtual IP: 192.168.8.11
 
Load Balancer: 172.18.3.208
Backup: 192.168.8.3 ...............还没有实践
Real Server 1: 172.18.3.205
Real Server 2: 172.18.3.207
 
 
软件
ipvsadm-1.24.tar.gz:
 

tar zxvf ipvsadm-1.24.tar.gz

cd ipvsadm-1.24

make && make install

注意在make时可能会出现很多错误的信息,请按照如下操作就可以心编译正常

ln -s /usr/src/kernels/2.6.11-1.1369_FC4-i686/ /usr/src/linux

在进行编译就不会出错了

======================================

一.配置基于DR模式Lvs集群

Load Balancer:172.18.3.208

[root@localhost lvs]# cat /usr/local/lvs/LvsDR
#!/bin/sh

#VIP=192.168.8.11
 VIP=172.18.3.209

#RIP1=192.168.8.6
 RIP1=172.18.3.205

 RIP2=172.18.3.207

/etc/rc.d/init.d/functions

case "$1" in

start)

echo "start LVS of DirectorServer"

#Set the Virtual IP Address

/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev eth0:1

#Clear IPVS Table

/sbin/ipvsadm -C

#Set Lvs

/sbin/ipvsadm -A -t $VIP:80 -s rr     #rr 是使用了轮叫算法

/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g

/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g

#Run Lvs

/sbin/ipvsadm

;;

stop)

echo "close LVS Directorserver"

ifconfig eth0:1 down

/sbin/ipvsadm -C

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

=======================================

Real Server 1:172.18.3.205

[root@localhost lvs]# cat /usr/local/lvs/realserver
#!/bin/sh

#VIP=192.168.8.11

 VIP=172.18.3.209

/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

#:注释:这四句目的是为了关闭ARP广播响应

sysctl -p
================================================

 

Real Server 2:172.18.3.207

[root@localhost lvs]# cat /usr/local/lvs/realserver
#!/bin/sh

#VIP=192.168.8.11

 VIP=172.18.3.209

/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

==================================

 

[root@localhost lvs]# echo "This is realserver1" > /usr/local/apache/htdocs/index.html
This is realserver1

[root@localhost lvs]#  echo "This is realserver2" > /usr/local/apache/htdocs/index.html
This is realserver2

分别启动服务

172.18.3.208  ./LvsDR start

172.18.3.205  ./realserver

172.18.3.207  ./realserver

 

启动apache

访问: http://172.18.3.209

测试方法分别打开四个网页,回轮循打开四个网页

This is realserver1 This is realserver2

==================================================

 

二、配置基于隧道模式Lvs集群

172.18.3.208

[root@localhost lvs]# cat TunLVS
#!/bin/sh

VIP=172.18.3.209

RIP1=172.18.3.205

RIP2=172.18.3.207

/etc/rc.d/init.d/functions

case "$1" in

start)

echo "Start Lvs of DirectorServer"

#set vip server

/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev tunl0

#clear IPVS table

/sbin/ipvsadm -C

#set lvs

/sbin/ipvsadm -A -t $VIP:80 -s rr

/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i

/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i

#Run Lvs

/sbin/ipvsadm

;;

stop)

echo "Close Lvs DirectorServer "

ifconfig tunl0 down

/sbin/ipvsadm -C

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

=====================================

172.18.3.205

[root@localhost lvs]# cat realserver1
#!/bin/sh

VIP=172.18.3.209

/etc/rc.d/init.d/functions

case "$1" in

start)

echo "tunl port starting"

/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev tunl0

echo "1" > /proc/sys/net/ipv4/ip_forward      #1.开启ip转发

 

echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce

echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

;;

stop)

echo "tunl port closing"

ifconfig tunl0 down

echo "1" > /proc/sys/net/ipv4/ip_forward

echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce

;;

*)

echo "Usege: $0 {start|stop}"

exit 1

esac

========================================

172.18.3.207

[root@localhost lvs]# cat realserver1
#!/bin/sh

VIP=172.18.3.209

/etc/rc.d/init.d/functions

case "$1" in

start)

echo "tunl port starting"

/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev tunl0

echo "1" > /proc/sys/net/ipv4/ip_forward

echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce

echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

;;

stop)

echo "tunl port closing"

ifconfig tunl0 down

echo "1" > /proc/sys/net/ipv4/ip_forward

echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce

;;

*)

echo "Usege: $0 {start|stop}"

exit 1

esac

============================================

测试同上

===========================================

看完前面的设定,如果测试成功的话,如果发现万一Real Server死掉了怎么办?负责转送封包的DR并不晓得Real Server已经故障无法使用,还是会将封包往故障的Real Server处送,这样会影响用户的使用权益,为了解决这个问题有几种解法,一个是通过安装第三方监视程序mon进行后台监视,另一个是可以自己写个监视脚本进行监视,发现某台Real Server死掉后,把这台Real Server直接从轮循规则中去掉,然后重启LVS服务,重启后立即生效,而且并不是断开当前的连接。同理,为了防止Director down掉,可以把Director 做个HA,这样可以防止Director死掉,服务不至于停止,要不后果很严重

 

三、配置基于高可用Lvs+heartbeat

3.安装heartbeat

3.1 安装

tar -zxvf libnet.tar.gz

cd libnet

./configure

make

make install

groupadd -g 694 haclient

useradd -u 694 -g haclient hacluster

 

tar tar xvf heartbeat-2.1.3.tar.tar

cd heartbeat-2.1.3

./ConfigureMe configure

编译出错,把时间该下,该为目前时间是2008-06-18在编译就正常了。

make

make install

 

cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/

cp ldirectord/ldirectord.cf /etc/ha.d/

 

配置主文件/etc/ha.d/ha.cf

debugfile /var/log/ha-debug
logfile /var/log/ha-log

keepalive 2

deadtime 60

warntime 10

initdead 120

#udpport 694

bcast eth0

auto_failback on

#ping_group group1 172.18.3.208 172.18.3.205

ping 172.18.3.208

respawn root /usr/lib/heartbeat/ipfail

apiauth ipfail gid=root uid=root

hopfudge 1

use_logd yes

node test7

node test8

#crm on

资源文件/etc/ha.d/ haresources

test7 172.18.3.209 httpd

 

认证文件(/etc/ha.d/authkeys),选取一种认证方式,这个文件的权限必须是600

auth 1

1 crc

#2 sha1 sha1_any_password

#3 md5 md5_any_password

chmod 600 /etc/ha.d/ haresources

 

3.5编辑主机名:/etc/hosts

172.18.3.208 test7

172.18.3.205 test8

 

 在172.18.3.208 172.18.3.209上该四个文件一样

 

 

 

启动heartbeat 出现如下错误

[root@test8 lvs]# /usr/lib/heartbeat/heartbeat start
/usr/lib/heartbeat/heartbeat: error while loading shared libraries: libltdl.so.3: cannot open shared object file: No such file or directory

解决办法

[root@test7 heartbeat]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/BerkeleyDB.4.2/lib/

[root@test7 heartbeat]# cd /usr/local/BerkeleyDB.4.2/lib/

[root@test7 lib]# ln -s /usr/local/lib/libltdl.so.3  libltdl.so.3

[root@test7 lib]# ldconfig

参照如下内容

也是按linux源码安装的三步曲完成,没有什么好说的了。该软件默认是安装在/usr/local/BerkeleyDB.4.2目录下。安装完成后,要把/usr/local/BerkeleyDB.4.2/lib的库路径加到/etc/ld.so.conf文件内,添加完成后执行一次 ldconfig,使用配置文件生效。这样编译openldap时才能找到相应的库文件。这样资料库就安装完成了,接下来可以安装openldap了。

  ld.so.conf是什么东西?它就是系统动态链接库的配置文件。此文件内,存放着可被LINUX共享的动态链接库所在目录的名字(系统目录 /lib,/usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔。一般的LINUX发行版中,此文件均含一个共享目录 /usr/X11R6/lib,为X window窗口系统的动态链接库所在的目录。 ldconfig是它的管理命令,具体操作方法可查询man手册,这里就不细讲了。

http://www.linuxpk.com/2582.html

重新启动heartbeat

[root@test7 lib]# ps aux|grep heart
root     19919  1.4  9.1  11472 11472 ?        SLs  03:22   0:00 heartbeat: master control process
nobody   19927  0.1  3.8   4876  4876 ?        SL   03:22   0:00 heartbeat: FIFO reader           
nobody   19930  0.3  3.8   4872  4872 ?        SL   03:22   0:00 heartbeat: write: ping_group group1
nobody   19931  0.1  3.8   4872  4872 ?        SL   03:22   0:00 heartbeat: read: ping_group group1
root     20387  0.0  0.3   1684   500 pts/0    R+   03:22   0:00 grep heart

备份节点172.18.3.205 上的heartbeat和apache的配置与节点1要完全相同,lvs配置也要相同

完装完毕进行测试,关闭主节点机器,另一台自动接管,主节点恢复后自动接管回服务。如果以上测试没有问题,那么开始和lvs整合

以上测试heartbeat 成功

=================================

 

 

 

四.heartbeat lvs正

172.18.3.208 ---> 172.18.3.205

 

4.配置Ldirectord

Ldirectord的作用是监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord。

172.18.3.208

配置(/etc/ha.d/ldirectord.cf):

checktimeout=3

checkinterval=1

fallback=127.0.0.1:80

autoreload=yes

logfile="/var/log/ldirectord.log"

quiescent=yes

# Sample for an http virtual service

virtual=172.18.3.209:80

real=172.18.3.207:80 gate

#real=192.168.8.5:80 gate

fallback=127.0.0.1:80 gate

service=http

request="index.html"

receive="Test Page"

protocol=tcp

checktype=negotiate

checkport=80

=====================================================

[root@test7 lvs]# cat /etc/sysconfig/ipvsadm
-A -t 172.18.3.209:3306 -s wrr

-a -t 172.18.3.209:3306 -r 172.18.3.207 -g

 

=============================================

在每个Real Server的中添加监控页:

echo "Test Page" >> /var/www/html/index.html

修改/etc/ha.d/haresources

test7 172.18.3.209 ipvsadm ldirectord http

==============================================

以上几个文件在208 207上配置是相同的.

 

现在可以在主节点启动heartbeat

/etc/init.d/heartbeat start

并在备份节点启动heartbeat

/etc/init.d/heartbeat start

 

启动ldirectord

启动时如果提示ldirectord某行出错,一般是有些运行需要的软件没安装,大部分是perl开头的软件包。

[root@test7 lvs]# service ldirectord start
Starting ldirectord... Can't locate Mail/Send.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.6/i386-linux-thread-multi /usr/lib/perl5/5.8.6 .) at /usr/sbin/ldirectord line 3882.
BEGIN failed--compilation aborted at /usr/sbin/ldirectord line 3882.
failure

解决办法

wget http://www.cpan.org/modules/by-module/Mail/MailTools-1.77.tar.gz

 

在启动出现如下错误

[root@test7 MailTools-1.77]# service ldirectord start
Starting ldirectord... Error [32691] reading file /etc/ha.d/ldirectord.cf at line 324: autoreload must be 'yes' or 'no'
failure

 

[root@test7 MailTools-1.77]# service ldirectord start
Starting ldirectord... success
[root@test7 MailTools-1.77]# ps aux|grep ldire
root       740  1.1  7.3  13308  9264 ?        S    14:47   0:00 /usr/bin/perl -w /usr/sbin/ldirectord start

 

 

 

 

在备份172.18.3.205上做同样的设置 

测试:关闭主节点,备份节点将自动接管directorserver服务。

至此配置完毕。

原创粉丝点击