测试成功Freebsd6.2+IPVS+CARP,实现双机热备份和负载均衡功能。其中:
IPVS: 实现负载均衡功能
CARP: 实现双机热备份 CARP —通用地址冗余协议
一.安装:
在虚拟机上做测试,
构架: 系统都是freebsd 6.2
虚拟机一: ip: 10.122.82.123 (双机热备 主)
虚拟机二: ip: 10.122.82.35 (双机热备 辅)
二台web 1.ip: 10.122.82.168
2.ip: 10.122.82.240
虚拟机上配置:
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
vi /usr/src/sys/kern/uipc_socket.c
找到#include “opt_compat.h”这一行,在下面加上 #include “opt_nfsockopt.h”
打补丁:
Srv01# cd /usr/ports/net/ipvs
Srv01# make patch-system
编译核心:
Srv01# cd /usr/src/sys/i386/conf
Srv01# config LVS
Srv01# cd ../compile/LVS
Srv01# make depend
Srv01# make
Srv01# make install
Srv01# reboot
安装ipvs:
Srv01# cd /usr/ports/net/ipvs
Srv01# make install clean
在另一台虚拟机上做同样操作.
二.重启后设置: 在/usr/local/etc/rc.d/下创建启动脚本:
sysctl net.inet.ip.forwarding=1 设置forward
#carp:
sysctl net.inet.carp.preempt=1
ifconfig carp0 create
ifconfig carp0 vhid 1 pass 123456 10.122.82.251/24 up
ifconfig carp0 down && ifconfig carp0 up
#ipvs:
kldload /boot/modules/ipvs.ko
kldload /boot/modules/ip_vs_rr.ko
ipvsadm -A -t 10.122.82.251:80 -s rr
ipvsadm -a -t 10.122.82.251:80 -r 10.122.82.168:80 -g
ipvsadm -a -t 10.122.82.251:80 -r 10.122.82.240:80 -g
在另一台虚拟机上做同样操作.
sysctl net.inet.ip.forwarding=1
sysctl net.inet.carp.preempt=1
ifconfig carp0 create
ifconfig carp0 vhid 1 advskew 100 pass 123456 10.122.82.251/24 up advskew 100,该参数是用来设定主用机发送广告包(CARP)的频率
ifconfig carp0 down && ifconfig carp0 up
kldload /boot/modules/ipvs.ko
kldload /boot/modules/ip_vs_rr.ko
ipvsadm -A -t 10.122.82.251:80 -s rr
ipvsadm -a -t 10.122.82.251:80 -r 10.122.82.168:80 -g
ipvsadm -a -t 10.122.82.251:80 -r 10.122.82.240: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
注意: 默认的 FreeBSD 内核 可能 启用了主机间抢占。 如果是这样的话, provider.example.org 可能在正式的内容服务器恢复时不释放 IP 地址。 此时, 管理员可以 “提醒” 一下接口。 具体做法是在 provider.example.org 上使用下面的命令:
# ifconfig carp0 down && ifconfig carp0 up
第三台机器, 需要进行配置,以便在另外两台机器出现问题时接管。 这台机器需要两个 carp 设备, 分别处理两个机器。 对应的 rc.conf 配置类似下面这样:
hostname=”provider.example.org”
ifconfig_fxp0=”inet 192.168.1.5 netmask 255.255.255.0″
cloned_interfaces=”carp0 carp1″
ifconfig_carp0=”vhid 1 advskew 100 pass testpass 192.168.1.50/24″
ifconfig_carp1=”vhid 2 advskew 100 pass testpass 192.168.1.51/24″
三.客户端设置:
客户端需要设置ip_forward =1
lo0 10.122.82.251 255.255.255.255 -arp 不需要arp解析
freebsd系统设置:
在/etc/rc.conf中加入
ifconfig_lo0_alias0=”inet 10.122.82.251 netmask 255.255.255.255 -arp”
sysctl net.inet.ip.forwarding=1
linux系统下设置:
ee /etc/sysctl.conf 中将ip_forward =1
ifconfig lo:0 10.122.82.251 netmask 255.255.255.255 -arp
附:
ipvsadm的用法和格式
ipvsadm的用法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm –set tcp tcpfin udp
ipvsadm –start-daemon state [–mcast-interface interface]
ipvsadm –stop-daemon
ipvsadm -h
命令选项解释:
命令选项长短格式具有相同的意思。在实际使用时,两种都可以。
-A –add-service 在虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器,每个服务为一条记录。
-E –edit-service 编辑虚拟服务器表中的一条虚拟服务器记录。
-D –delete-service 删除虚拟服务器表中的一条虚拟服务器记录。
-C –clear 清除虚拟服务器表中的所有记录。
-R –restore 恢复虚拟服务器规则
-S –save 保存虚拟服务器规则,输出为-R选项可读的格式
-a –add-server 在虚拟服务器表里添加一条新的真实服务器记录。
-e –edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d –delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list 显示虚拟服务器表
-Z –zero 虚拟服务表计数器清零(清空当前的连接数量等)
–set tcp tcpfin udp 设置连接超时值
–start-daemon 启动同步守护进程。它后面可以是master或backup,用来说明LVS Router是master或是backup。在这个功能上也可以采用keepalived的VRRP功能。
–stop-daemon 停止同步守护进程
-h –help 显示帮助信息
其它的选项:
-t –tcp-service service-address 说明虚拟服务器提供的是tcp的服务
-u –udp-service service-address 说明虚拟服务器提供的是udp的服务
-f –fwmark-service fwmark 说明是经过iptables标记过的服务类型。
-s –scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.
-p –persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout的默认值为300秒。
-M –netmask netmask persistent granularity mask
-r –real-server server-address 真实的服务器
-g –gatewaying 指定LVS的工作模式为直接路由模式(也是LVS默认的模式)
-i –ipip 指定LVS的工作模式为隧道模式
-m –masquerading 指定LVS的工作模式为NAT模式
-w –weight weight 真实服务器的权值
–mcast-interface interface 指定组播的同步接口
-c –connection 显示LVS目前的连接 如:ipvsadm -L -c
–timeout 显示tcp tcpfin udp的timeout值 如:ipvsadm -L –timeout
–daemon 显示同步守护进程状态
–stats 显示统计信息
–rate 显示速率信息
–sort 对虚拟服务器和真实服务器排序输出
–numeric -n 输出IP地址和端口的数字形式
rr 為使用的調度演算法。
有以下幾種調度演算法:
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
默認的調度演算法是: wlc.
rr :时间片轮转法
wrr :加权轮询调度算法
lc :最小连接调度
wlc :加权最小连接调
lblc :基于局部性的最少链接
lblcr:带复制的基于局部性最少链接
dh :目标地址散列调度
sh :源地址散列调度
sed :最短预期延时调度
nq :不排队调度
转载 http://blog.chinaunix.net/u/27383/showart_466112.html
参考
http://www.chinaunix.net/jh/88/862596.html
http://www.bsdlover.cn/html/13/n-113.html