• 欢迎访问Ppabc博客网站,专注于Linux、CentOS、Apache、Nginx、MySQL、PHP等开源工具安装优化的技术博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入Ppabc博客
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏Ppabc博客吧

FreeBSD6.2 +CARP+IPVS双机热备份负载均衡

Freebsd admin 11年前 (2008-03-29) 238次浏览

测试成功 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


Selinux 中国 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:FreeBSD6.2 +CARP+IPVS 双机热备份负载均衡
喜欢 (0)