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

全部博文(197)

文章存档

2011年(30)

2010年(21)

2009年(25)

2008年(80)

2007年(41)

分类: BSD

2009-01-13 23:03:23

1,最小化安装系统
2。在内核文件中添加"device carp"
3.编译内核,安装新内核。重启系统。
使用3个IP:
realA.zocc.net.cn  125.93.188.242
realB.zocc.net.cn  125.93.188.243
共享IP:real.zocc.net.cn  125.93.188.244
 
realA机的rc.conf文件如下配置:
defaultrouter="125.93.188.241"
hostname="real1.zocc.net.cn"
ifconfig_le0="inet 125.93.188.242  netmask 255.255.255.240"
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advbase 5 pass zbhdpx 125.93.188.244/28"
ifconfig_carp1="vhid 2 advbase 5 advskew 100 pass zbhdpx 125.93.188.244/28"
sshd_enable="YES"
apache22_enable="YES"
 
realB机的rc.conf文件如下配置:
defaultrouter="125.93.188.241"
hostname="real2.zocc.net.cn"
ifconfig_le0="inet 125.93.188.243  netmask 255.255.255.240"
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advbase 5 advskew 100 pass zbhdpx 125.93.188.244/28"
ifconfig_carp1="vhid 2 advbase 5 pass zbhdpx 125.93.188.244/28"
sshd_enable="YES"
apache22_enable="YES"
 
然后在/etc/sysctl.conf文件中加入以下内容:
net.inet.carp.preempt=1
net.inet.carp.arpbalance=1
 
文档中还有关于:
net.inet.carp.allow=1,在7.1当中,这个参数默认已经打开了。所以我就不在sysctl.conf中添加了。
然后安装apache22,就可以看到效果了。
 
在realA机器通过ifconfig来查看接口状态如下:
 
realA# ifconfig
le0: flags=8943 metric 0 mtu 1500
        options=8
        ether 00:0c:29:08:6a:2a
        inet 125.93.188.243 netmask 0xfffffff0 broadcast 125.93.188.255
        media: Ethernet autoselect
        status: active
plip0: flags=108810 metric 0 mtu 1500
lo0: flags=8049 metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
carp0: flags=49 metric 0 mtu 1500
        inet 125.93.188.244 netmask 0xfffffff0
        carp: BACKUP vhid 1 advbase 5 advskew 100
carp1: flags=49 metric 0 mtu 1500
        inet 125.93.188.244 netmask 0xfffffff0
        carp: MASTER vhid 2 advbase 5 advskew 0
 
当把realB机器关闭的时候,realA机器的接口状态如下:
real2# ifconfig
le0: flags=8943 metric 0 mtu 1500
        options=8
        ether 00:0c:29:08:6a:2a
        inet 125.93.188.243 netmask 0xfffffff0 broadcast 125.93.188.255
        media: Ethernet autoselect
        status: active
plip0: flags=108810 metric 0 mtu 1500
lo0: flags=8049 metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
carp0: flags=49 metric 0 mtu 1500
        inet 125.93.188.244 netmask 0xfffffff0
        carp: MASTER vhid 1 advbase 5 advskew 100
carp1: flags=49 metric 0 mtu 1500
        inet 125.93.188.244 netmask 0xfffffff0
        carp: MASTER vhid 2 advbase 5 advskew 0
 
这样就完成了热备,同时还有负载均衡的能力,通过不同的IP访问就可以测试出来。
注意
    carp的负载均衡使用的是arpbalance功能,从字面意思理解为使用arp的负载均衡,也就是说是属于osi7层模型的第二层——数据链路层。所以用arpbalance只能应用于本地局域网,无法实现更高层次的balance。
 
其原理大至如下:
    两台服务器a,b,分别建立两个carp虚拟网卡a1,a2.b1,b2.其中a1,b1为一个carp组,即相同的vhid,其余的两个网卡为另一个carp组,在第一个carp组中a1为master,b1为slave。在第二个carp组中,正好与些相反,a2为slave,b2为master.这两个carp组的虚拟ip相同。于是arpbalance就可以在这两个组之间进行轮转。当使用carp1组的时候,由于a1为master.所以些时由a提供服务,当使用carp2组的时候,由于b2为master则些时由b提供服务。
 
如果只是简单的完成热备功能,就可以如下设置:
RealA:
 
defaultrouter="125.93.188.241"
hostname="real1.zocc.net.cn"
ifconfig_le0="inet 125.93.188.242  netmask 255.255.255.240"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advbase 5 pass zbhdpx 125.93.188.244/28"
sshd_enable="YES"
realB:
 
defaultrouter="125.93.188.241"
hostname="real2.zocc.net.cn"
ifconfig_le0="inet 125.93.188.243  netmask 255.255.255.240"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advbase 5 advskew 100 pass zbhdpx 125.93.188.244/28"
sshd_enable="YES"
以上试验,在7.1上测试通过,存在一个问题,就是热备时切换的慢。可能是虚拟机存在的问题,大概要1分钟才能切换过来。以后如果有条件,在真实的环境下测试就好了。。
 
做这个试验的同时,也参考了以下文单:

 
 
 
阅读(4367) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~