IPVS: 实现负载均衡功能
CARP: 实现双机热备份
一 系统环境
FreeBSD 6.1 Release 最小化安装(完全安装也可以) + Kernel Source (ALL)
SRV01 192.168.2.133 255.255.255.0 (双机热备 主)
SRV02 192.168.2.130 255.255.255.0 (双机热备 辅)
Share IP 192.168.2.144 255.255.255.0 (主辅机器共享)
二 安装过程
a.在核心配置文件中添加对CARP的支持和options NF_SOCKOPT(ipvs需要) 选项
Srv01# cd /usr/src/sys/i386/conf/
Srv01# cp GENERIC LVS
Srv01# vi LVS
添加以下选项:
options NF_SOCKOPT
device carp
b. Freebsd6.1 的uipc_socket.c中没有#include "opt_nfsockopt.h" ,需手动添加否则编译将出错。
vi /usr/src/sys/kern/uipc_socket.c
找到#include "opt_compat.h"这一行,在下面加上 #include "opt_nfsockopt.h"
c. 打ipvs for freebsd6.1补丁(patch)。
Srv01# cd /usr/ports/net/ipvs
Srv01# make patch-system #具体说明可以查看当前目录下的Makefile
d. 编译核心
Srv01# cd /usr/src/sys/i386/conf
Srv01# config LVS
Srv01# cd ../compile/LVS
Srv01# make depend
Srv01# make
Srv01# make install
Srv01# reboot
以上操作在srv02上同样做一遍
三 具体配置
CARP 部分 (如果只需双机备份功能只配这部分就可以了)
SRV01
srv01# sysctl net.inet.carp.preempt=1
srv01# ifconfig carp0 create
srv01# ifconfig carp0 vhid 1 pass password 192.168.2.144/24 up #password随便输入,但srv01和srv02必需一致。
SRV02
srv02# sysctl net.inet.carp.preempt=1
srv02# ifconfig carp0 create
srv02# ifconfig carp0 vhid 1 advskew 100 pass yourpassword 192.168.2.144/24 up
IPVS 部分
srv01# kldload /boot/modules/ipvs.ko
srv01# kldload /boot/modules/rr/ip_vs_rr.ko
srv01# ipvsadm -A -t 192.168.2.144:80 -s rr
srv01# ipvsadm -a -t 192.168.2.144:80 -r 192.168.2.133:80 -g
srv01# ipvsadm -a -t 192.168.2.144:80 -r 192.168.1.130:80 -g
srv01# ipvsadm -A -t 192.168.2.144:22 -s rr
srv01# ipvsadm -a -t 192.168.2.144:22 -r 192.168.2.133:22 -g
srv01# ipvsadm -a -t 192.168.2.144:22 -r 192.168.1.130:22 -g
这里我只测试了http(80)和ssh(22)服务,其它的服务配置方法一样。
以上操作在srv02上同样做一遍
清除 IPVS配置命令如下:
srv01# ./ipvsadm -C
srv01# kldunload ip_vs_rr
srv01# kldunload ipvs
四 测试
Srv01# ifconfig
sk0: flags=8943
options=8
inet6 fe80::217:31ff:fe62:be1b%sk0 prefixlen 64 scopeid 0x1
inet 192.168.2.133 netmask 0xffffff00 broadcast 192.168.2.255
ether 00:17:31:62:be:1b
media: Ethernet autoselect (100baseTX
status: active
plip0: flags=108810
lo0: flags=8049
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
carp0: flags=49
inet 192.168.2.144 netmask 0xffffff00
carp: MASTER vhid 1 advbase 1 advskew 0
Srv02# ifconfig
rl0: flags=8943
options=8
inet6 fe80::217:31ff:fe62:be1b%sk0 prefixlen 64 scopeid 0x1
inet 192.168.2.130 netmask 0xffffff00 broadcast 192.168.2.255
ether 00:17:31:62:be:1b
media: Ethernet autoselect (100baseTX
status: active
plip0: flags=108810
lo0: flags=8049
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
carp0: flags=49
inet 192.168.2.144 netmask 0xffffff00
carp: BACKUP vhid 1 advbase 1 advskew 100
从ifconfig结果可以看到srv01 为master,srv02为backup.
客户端访问 192.168.2.144:22 (ssh) 每次连接一台不同Server(srv01,srv02)。
用ssh 到 192.168.2.144 可以看到主机名应为 srv01 。
在客户端上ping 192.168.2.144 -t 拔除 srv01 的网线,在丢失1个包后重新连通。
再次ssh 到 192.168.2.144 可以看到主机名应为 srv02,并且srv02自动提升为Master。
当重新连上srv02的网线时,srv02自动降为Backup。
这时说明双机热备份功能已经成功。
kinron 于 2009-12-11 12:55:38发表:
有图解说明,这贴子一定是精华了
kinron 于 2009-12-11 12:55:11发表:
真是不错的贴子
要是能编成PDF文档该有多好啊