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分钟才能切换过来。以后如果有条件,在真实的环境下测试就好了。。
做这个试验的同时,也参考了以下文单:
阅读(4415) | 评论(0) | 转发(0) |