Chinaunix首页 | 论坛 | 博客
  • 博客访问: 629431
  • 博文数量: 197
  • 博客积分: 4858
  • 博客等级: 上校
  • 技术积分: 2162
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-06 22:46
文章分类

全部博文(197)

文章存档

2011年(30)

2010年(21)

2009年(25)

2008年(80)

2007年(41)

分类: BSD

2009-01-15 09:44:25

这两天在做关于carp和IPVS的试验,昨天安装carp,发掘了一下carp的功能,前一个文章已经记录,现在再记录一下昨天做carp+IPVS的过程。freebsd7.1已经发布了,昨天刚开始用的是7.1,在使用过程发现在编译内核支持ipvs的时候,无法编译过去,无耐转而换成freebsd 6.4.希望在以后的过程中,IPVS可以在7.1中顺利运行。
实验环境:
real1.zocc.net.cn 125.93.188.242
real2.zocc.net.cn 125.93.188.243
real.zocc.net.cn  125.93.188.244 (share ip).
 
在开始之前,我们先看一下/usr/ports/net/ipvs中Makefile文件中的安装过程如下:
LVS on FreeBSD works only with 5.3-RELEASE and 5.4-RELEASE.
However it may work on 5-STABLE. If you are running FreeBSD 5.4-STABLE, define TRY_STABLE and check if patches apply correctly to your src tree,To build ipvs, I strongly encourage you to follow these instructions"
     1. checkout supported src tree"
     2. run \"make patch-system\""
     3. configure and build your kernel. (you need support of NetFilter"
        sockopt, add \"options NF_SOCKOPT\")"
     4. Install your freshly compiled kernel"
     5. install the port"
     6. reboot your system"
现在开始:
1,mini安装freebsd6.4,然后安装base,sys,ports,为纺译内核和安装ipvs做准备。
2。Freebsd6.4 的uipc_socket.c中没有#include "opt_nfsockopt.h" ,需手动添加否则
编译将出错。
ee /usr/src/sys/kern/uipc_socket.c
找到#include "opt_compat.h"这一行,在下面加上 #include "opt_nfsockopt.h"
3.对系统打补丁
#cd /usr/ports/net/ipvs
#make patch-system
4.编辑自己的内核文件
#mkdir /root/kernels
#cd /usr/src/sys/i386/conf
#cp GERNIC /root/kernels/LVSCARP
#ln -s /root/kernels/LVSCARP
#ee LVSCARP
添加支持以下内容:
 
options NF_SOCKOPT
device carp
 
#make buildkernel KERNCONF=LVSCARP
#make installkernel KERNCONF=LVSCARP
 
等待编译安装完成后重启系统。
 
然后配置carp:
 
real1.zocc.net.cn这台机器的/etc/rc.conf文件如下:
hostname="real1.zocc.net.cn"
ifconfig_lnc0="inet 125.93.188.242  netmask 255.255.255.240"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass zbhdpx 125.93.188.244/28"
sshd_enable="YES"
apache22_enable="YES"
 
real2.zocc.net.cn这台机器的/etc/rc.conf文件如下:
hostname="real2.zocc.net.cn"
ifconfig_lnc0="inet 125.93.188.243  netmask 255.255.255.240"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advskew 100 pass zbhdpx 125.93.188.244/28"
sshd_enable="YES"
apache22_enable="YES"
 
同时在/etc/sysctl.conf中添加以下内容:
net.inet.carp.preempt=1
 
关于上边添加内容的解释,可以看资料。这里不做描述了。功能是自动检测实现master/bakcup切换。
我做完这个之后发现有一个小问题,就是新创建的carp0这个接口,在开机的时候不是处于master/bakckup这两个装态中的一个,而是处于init.没有弄清楚这个是什么问题。只好在/etc/rc.local中添加:/sbin/ifconfig carp0 up.经过测试,可以达到目的。
 
然后我们开始配置IPVS:
#cd /usr/ports/net/ipvs
#make install
 
我把ipvsadm的操作都写入了/etc/rc.local
real1,real2机器的/etc/rc.local的文件如下:
 
/sbin/ifconfig carp0 up
/sbin/kldload /boot/modules/ipvs.ko
/sbin/kldload /boot/modules/ip_vs_rr.ko
/usr/local/sbin/ipvsadm -A -t 125.93.188.244:80 -s rr
/usr/local/sbin/ipvsadm -a -t 125.93.188.244:80 -r 125.93.188.242:80 -g
/usr/local/sbin/ipvsadm -a -t 125.93.188.244:80 -r 125.93.188.243:80 -g
/usr/local/sbin/ipvsadm -A -t 125.93.188.244:22 -s rr
/usr/local/sbin/ipvsadm -a -t 125.93.188.244:22 -r 125.93.188.242:22 -g
/usr/local/sbin/ipvsadm -a -t 125.93.188.244:22 -r 125.93.188.243:22 -g
 
重启机器,安装一个apache22来做这个测试。
 
设置pkg_add 要下载包的镜像站点如下:
#setenv PACKAGESITE
#pkg_add -r apache22
 
编辑real1.zocc.net.cn /usr/local/www/apache22/data/index.html文件,内容改为
real1.zocc.net.cn
同样
编辑real2.zocc.net.cn /usr/local/www/apache22/data/index.html文件,内容改为
real2.zocc.net.cn
 
现在在客户端,打
不断的打开和刷新这页面,会发现显示的内容会在:real1.zocc.net.cn real2.zocc.net.cn
之间切换。这样实现了负载均衡。
现在在carp0为master的机器上运行ifconfig lnc0 down,持续的ping 125.93.188.244,会发现ping包在丢失一个后,就会再ping通,查看另一台机器,carp0的接口状态就变为了master.
 
实验完成。
 
 
阅读(1189) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~