在網上流傳的很多文章中,LVS-DR模式都要求VIP和RIP在同一網段,很少有在不同網段配置成功的案例。但章文嵩博士已經在官網上明
段的網絡連接配接起來就可以,真實伺服器可以通過自己的路由器将響應封包發送給客戶。也就是說Director至少要有兩個網口才滿足VIP和RIP
不在同一網段。
從realserver到client路由,可以是另外的,也可能通過director,但要使用director做路由必須對director的核心打forward_shared
如果使用另外的路由,則隻要求能從realserver到client就行了,不需要得到client的響應,是以realserver可以放在防火牆後面。
下面是具體的配置過程:
[@more@]
director有兩塊網卡:
eth0 192.168.2.254 用于跟realserver連接配接
eth1 61.180.79.110 外網IP,VIP也綁定到此網卡
director的配置
1、安裝ipvsadm
ipvsadm是用來管理lvs設定的指令行工具,可以用來檢視目前狀态。
yum install ipvsadm
2、安裝keepalived
keepalived可以用于雙機熱備的自動故障轉移,也可以管理lvs的realserver清單,自動對realserver做健康檢查。
tar zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/usr --sysconfdir=/etc
如果最後顯示
Use IPVS Framework : No
IPVS sync daemon support : No
請指定核心源碼目錄再運作configure
./configure --prefix=/usr --sysconfdir=/etc --with-kernel-dir=/usr/src/kernels/linux-2.6.35.9
make && make install
将keepalived加入服務中
chkconfig --add keepalived
chkconfig --level 35 keepalived on
修改配置檔案
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.old
vi /etc/keepalived/keepalived.conf
填入以下内容
! Configuration File for keepalived
global_defs {
notification_email {
}
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #備份伺服器上将MASTER改為BACKUP
interface eth1 #HA監測網絡接口(綁定VIP的網口)
virtual_router_id 1 #主、備機的virtual_router_id一定要相同,必須相同!!!
priority 100 #主、備機取不同的優先級,主機值較大,備份機值較小
advert_int 1 #VRRP Multicast廣播周期秒數
authentication {
auth_type PASS #VRRP認證方式
auth_pass 1111 #VRRP密碼字
virtual_ipaddress {
61.180.79.18 #LVS虛拟位址,可寫多個VIP,一行一個VIP
virtual_server 61.180.79.18 80 {
delay_loop 2 #延時等待時間
lb_algo wrr #輪詢算法
lb_kind DR #傳輸模式
persistence_timeout 0 #單一連結重連保持時間秒
protocol TCP
real_server 192.168.2.11 80 {
weight 1 #權重
TCP_CHECK { #realserve的狀态檢測設定部分,機關是秒
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
real_server 192.168.2.12 80 {
realserver的配置
rs1和rs2的IP分别是192.168.2.11 192.168.2.12
1、安裝nginx用于測試
tar zxvf nginx-0.8.54.tar.gz
cd nginx-0.8.54
./configure --prefix=/usr/local/nginx
make && make install
啟動nginx
/usr/local/nginx/sbin/nginx
2、綁定VIP到lo
ifconfig lo:0 61.180.79.18 broadcast 61.180.79.18 netmask 255.255.255.255 up
3、将綁定VIP的網卡設定為no_arp
vi /etc/sysctl.conf
增加
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
使之生效
sysctl -p
4、設定realserver能到達client的路由網關
route add default gw 192.168.2.1
我開始測試的時候,使用一個tp-link的無線寬帶路由器,一直配置不成功,後來用tcpdump分析才發現,這個路由器就是不轉發從
realserver到client的資料包,不知道什麼原因,但直接ping client又是通的,後來直接用一台linux做路由就可以了
(net.ipv4.ip_forward = 1,而且這台路由啟用NAT也不影響)。
如果要使用director做realserver到client的網關,就需要給director的核心打更新檔,我是使用最新的核心編譯的,過程如下:
tar -xjvf linux-2.6.35.9.tar.bz2
mv linux-2.6.35.9 /usr/src/kernels
為核心打forward_shared更新檔
cd /usr/src/kernels
patch -p1 < ../forward_shared-2.6.34-2.diff
cd
為了友善編譯配置,将boot目錄下的配置檔案複制到 /usr/src/kernels/linux-2.6.35.9
cp /boot/config-2.6.18-194.32.1.el5 /usr/src/kernels/linux-2.6.35.9/.config
make menuconfig 選擇 Load an Alternate Configuration 回車确認載入
預設情況下啟動時會提示如下錯誤:
mount: could not find filesystem ‘/dev/root’
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic – not syncing: Attempted to kill init!
解決方法:
執行完make menuconfig後,修改/usr/src/kernels/linux-2.6.35.9/.config
将#CONFIG_SYSFS_DEPRECATED_V2 is not set
預設被注釋掉的,将其改為y。即修改為
CONFIG_SYSFS_DEPRECATED_V2=y
根據需要再選擇編譯選項;
make (這個過程相當的漫長,起碼半個小時以上)
如果沒有錯誤,執行子產品編譯安裝
make modules_install
編譯核心安裝
make install
sh /usr/src/kernels/linux-2.6.35.9/arch/x86/boot/install.sh 2.6.35.9 arch/x86/boot/bzImage
System.map "/boot"
看到如上提示表示編譯成功,
如果沒有看到錯誤,可以修改啟動項 讓 centos 啟動時加載 新核心, (如有編譯錯誤請勿修改啟動配置,否則啟動失敗)
vi /boot/grub/grub.conf
default=0 (修改為0 即可)
不知為什麼這個核心啟動的時候會報錯
insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists
解決辦法如下:
1、解壓initrd檔案
[root@vhost ~]# cp /boot/initrd-2.6.35.4.img /tmp
[root@vhost ~]# cd /tmp/
[root@vhost tmp]# ls
initrd-2.6.35.4.img
[root@vhost tmp]# mkdir newinitrd
[root@vhost tmp]# cd newinitrd/
[root@vhost newinitrd]# zcat ../initrd-2.6.35.4.img |cpio -i
11282 blocks
釋放之後看到如下内容
[root@vhost newinitrd]# ls
bin dev etc init lib proc sbin sys sysroot
2、下邊就是編輯init,删掉其中重複的四行中的兩行
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
3、重新打包initrd
[root@vhost newinitrd]# find .|cpio -c -o > ../initrd
[root@vhost newinitrd]# cd ..
[root@vhost tmp]# gzip -9 < initrd > initrd.img
initrd-2.6.35.4.img initrd initrd.img newinitrd
initrd.img就是重新打包的initrd了,然後把initrd.img拷貝到/boot
[root@vhost tmp]# mv /boot/initrd-2.6.35.4.img /boot/initrd-2.6.35.4.img.bak
[root@vhost tmp]# mv initrd.img /boot/initrd-2.6.35.4.img
[root@vhost tmp]# reboot
這樣“insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists” 就不會有了
使用新核心重新開機後
修改或增加
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0.forward_shared = 1
net.ipv4.conf.all.forward_shared = 1
注意檢視forward_shared選項是否成功設定
這樣,就可以将realserver的網關改為192.168.2.254了
本文轉自 yntmdr 51CTO部落格,原文連結:http://blog.51cto.com/yntmdr/1588328,如需轉載請自行聯系原作者