天天看點

LVS-DR VIP和RIP不同網段的配置方法

在網上流傳的很多文章中,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,如需轉載請自行聯系原作者

繼續閱讀