FreeBSD6.1 +CARP+IPVS雙機熱備份負載均衡技術

FreeBSD6.1 +CARP+IPVS雙機熱備份負載均衡 


經過一個星期的找資料….測試….找資料….再測試……,終於測試成功Freebsd6.1+IPVS+CARP,實現雙機熱備份和負載均衡功能。其中:
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<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        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 <full-duplex,flag0,flag1>)
        status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 ::1 prefixlen 128 
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
        inet 127.0.0.1 netmask 0xff000000 
carp0: flags=49<UP,LOOPBACK,RUNNING> mtu 1500
        inet 192.168.2.144 netmask 0xffffff00 
        carp: MASTER vhid 1 advbase 1 advskew 0

 

Srv02# ifconfig

rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        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 <full-duplex,flag0,flag1>)
        status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 ::1 prefixlen 128 
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
        inet 127.0.0.1 netmask 0xff000000 
carp0: flags=49<UP,LOOPBACK,RUNNING> mtu 1500
        inet 192.168.2.144 netmask 0xffffff00 
        carp: BACKUP vhid 1 advbase 1 advskew 100
從ifconfig結果可以看到srv01 爲master,srv02爲backup.

 

IPVS 測試

客戶端訪問 http://192.168.2.144 ,不停刷新web頁面時,web頁面會在srv01,srv02上切換(爲使切換效果明顯srv01,srv02用內容不同的主頁),說明負載均衡功能已成功。
客戶端訪問 192.168.2.144:22 (ssh) 每次連接一臺不同Server(srv01,srv02)。

 

CARP 測試

用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。
這時說明雙機熱備份功能已經成功。


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章