LVS-DR RR(輪詢模式)搭建

來源:互聯網
上載者:User

本次實驗需要兩台DR(調度器),兩台RS(真實伺服器)

DR1:192.168.0.221

DR2:192.168.0.222

RS1:192.168.0.223

RS2:192.168.0.224

 

DR配置

先安裝基礎軟體包

[root@DR1 ~]# yum install -y gcc gcc-c++ make openssl-devel kernel-devel kernel-headers libnl* libpopt* popt-static libnfnet* keepalived

 

軟連結核心檔案以供ipvsadm安裝使用

[root@DR1 ~]# ln -s /usr/src/kernels/2.6.32-642.11.1.el6.x86_64 /usr/src/linux

 

解壓ipvsadm

[root@DR1 ~]# tar xzvf ipvsadm-1.26.tar.gz

[root@DR1 ipvsadm-1.26]# make &&make install

安裝好ipvsadm後即可,無需修改其他檔案

 

由於keepalived軟體包已包含在上述基礎軟體包中,所以可直接在/etc/keepalived中修改keepalived.conf中修改檔案使用,亦或使用以下提供的精簡內容替換使用:

 

! Configuration File for keepalived

 

global_defs {

  notification_email {

     service@qq.com #組態管理員郵箱,用於警示,一行設定一個,可以設定多個,系統需要開啟sendmail 服務

   }

  notification_email_from Alexandre.Cassen@firewall.loc         #設定郵件的發送地址

  smtp_server 127.0.0.1     #設定smtp server地址

  smtp_connect_timeout 30        #設定串連smtp服務逾時時間

  router_id LVS_DEVEL1       #路由ID,和BACKUP 要不同,不然會報錯

}

 

vrrp_instance VI_1 { 

   state MASTER   #指定Keepalived的角色,MASTER表示此主機是主用伺服器,BACKUP表示是待命伺服器。

   interface eth1  #指定檢測網路的介面 

   virtual_router_id 55  #虛擬路由辨別碼,即同一個vrrp_instance下,MASTER和BACKUP必須是一致的。

   priority 100   #定義優先順序,數字越大,優先順序越高,在一個vrrp_instance下,MASTER的優先順序必須大於BACKUP的優先順序。

   advert_int 1  #設定MASTER與BACKUP負載平衡器之間同步檢查的時間間隔,單位是秒。

   authentication {  #設定驗證類型和密碼。

   auth_type PASS   #設定驗證類型,主要有PASS和AH兩種

   auth_pass 1111  #設定驗證密碼,在一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通訊。

}

virtual_ipaddress{ 

   192.168.0.220  #設定虛擬IP地址,可以設定多個虛擬IP地址,每行一個。

       }

    }

   virtual_server 192.168.0.220 80 {            #設定虛擬伺服器,需要指定虛擬ip地址和服務連接埠,ip與連接埠之間用空格隔開。

   delay_loop 6  #設定健全狀態檢查時間,單位是秒。

   lb_algo rr   #設定負載調度演算法,這裡設定為rr,即輪詢演算法

   lb_kind DR   #設定LVS實現負載平衡的機制,可以有NAT、TUN和DR三個模式可選。

   persistence_timeout 2             #會話保持時間,單位是秒,這個會話保持功能,使用者的請求會被一直分發到某個服務節點,直到超過這個會話保持時間。需要注意的是,這個會話保持時間,是最大無響應逾時時間,也就是說使用者在操作動態網頁面時,如果在2秒內沒有執行任何操作,那麼接下來的操作會被分發到另外節點,但是如果一直在操作動態網頁面,則不受2秒的時間限制。由於在本次屬於實驗性質,需要看到輪詢功能的情況,所以將此值調整得2秒這麼小。

   protocol TCP    #指定轉寄協議類型,有tcp和udp兩種。

   

real_server 192.168.0.223 80 {  #佈建服務節點1,需要指定realserver的真實IP地址和連接埠,ip與連接埠之間用空格隔開。

   weight 3  #佈建服務節點的權值,權值大小用數字表示,數字越大,權值越高,設定權值的大小可以為不同效能的伺服器分配不同的負載,可以對效能高的伺服器設定較高的權值,而對效能較低的伺服器設定相對較低的權值,這樣就合理的利用和分配了系統資源。

   TCP_CHECK {  #realserve的狀態檢測設定部分,單位是秒

   connect_timeout 10  #10秒無響應逾時

   nb_get_retry 3        #重試次數

   delay_before_retry 3       #稍候再試

       } 

    }

    real_server 192.168.0.224 80 {       #佈建服務節點2

   weight 1 

   TCP_CHECK { 

   connect_timeout 3 

nb_get_retry 3

delay_before_retry3 

        } 

     } 

}

儲存並退出

 

使用ipvsadm –L –n命令查看keepalived是否運行,正常狀態如下:

[root@DR1 keepalived]#ipvsadm -L -n

IP VirtualServer version 1.2.1 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.0.220:80 rr persistent 2

  -> 192.168.0.223:80             Route   1      0         0        

  -> 192.168.0.224:80             Route   1     0          0

 

OK,keepalived正常運作

 

查看eth1網卡是否有VIP

[root@DR1keepalived]# ip a

1: lo:<LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

    link/ether 00:0c:29:b0:09:39 brdff:ff:ff:ff:ff:ff

    inet 192.168.0.221/24 brd 192.168.0.255scope global eth1

    inet 192.168.0.220/32 scope global eth1

    inet6 fe80::20c:29ff:feb0:939/64 scope link

       valid_lft forever preferred_lft forever

 

OK,IP地址已經識別出來了

 

接下來查看ipvsadm預設逾時時間

[root@DR1 keepalived]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 900 120 300

900 120 300這三個數值分別是TCP TCPFINUDP的時間.也就是說一條tcp的串連經過lvs後,lvs會把這台記錄儲存15分鐘,就是因為這個時間過長,所以大部分人都會發現做好LVS DR之後輪詢現象並沒有發生,而且我也看到大部分的教程是沒有說明這一點的,巨坑。。。。。。因為是實驗性質,所以將此數值調整為非常小,使用以下命令調整:

[root@DR1 ~]# ipvsadm --set 1 2 1

 

調整之後查看調整效果

[root@DR1 ~]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 1 2 1

 

OK,沒問題。

註:以上列出的僅為DR1的配置,DR2的配置僅需要修改keepalived.conf中的以下選項:

router_id LVS_DEVEL1 可改為 router_idLVS_DEVEL2

state MASTER 改為 state BACKUP

interface eth1 根據網卡具體介面而修改

priority 100 改為 priority 90

 

下面就可以開始做RS

 

RS

首先關閉防火牆

[root@localhost ~]# service iptables stop

iptables: Setting chains to policy ACCEPT:filter [  OK  ]

iptables: Flushing firewall rules: [  OK  ]

iptables: Unloading modules: [  OK  ]

[root@localhost ~]# setenforce 0

 

安裝基礎軟體包

[root@localhost ~]# yum install -y gcc-c++ ncurses-devel gdbm-devel libxml2-devel openssl-devel

 

安裝apache

[root@localhost ~]# tar xzvfhttpd-2.2.14.tar.gz

[root@localhost ~]# cd httpd-2.2.14

[root@localhost httpd-2.2.14]# ./configure--prefix=/usr/local/apache2 --enable-module=so --enable-so --enable-cache --enable-disk-disk-cache --enable-mem-cache --enable-threads --enable-ssl && make && make install

 

由於是實驗性質,所以apache就修改httpd.conf的ServerName和index.html內容而不做其他的設定了

[root@localhost ~]# cd /usr/local/apache2/conf/

[root@localhost conf]# vim httpd.conf

把ServerName www.example.com:80改為 ServerName 0.0.0.0:80

儲存退出

[root@localhost conf]# cd ..

[root@localhost apache2]# cd htdocs/

[root@localhost htdocs]# vim index.html

把<html><body><h1>It works! </h1></body></html>修改為 <html><body><h1>It works! RealServer1</h1></body></html>

儲存退出

這樣apache就設定完畢了

 

接下來設定IP轉寄

在/etc/init.d建立sh檔案,把以下內容複寫進去,記得要修改VIP地址

#!/bin/bash

. /etc/init.d/functions

SNS_VIP=192.168.0.220

 

case "$1" in

start)

     ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

     /sbin/route add -host $SNS_VIP dev lo:0

     echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

     echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

     echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

     echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

     sysctl -p >/dev/null 2>&1

     echo "RealServer Start OK"

     ;;

stop)

    ifconfig lo:0 down

     route del $SNS_VIP >/dev/null 2>&1

     echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

     echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

     echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

     echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

     echo "RealServer Stoped"

     ;;

*)

     echo "Usage: $0 {start|stop}"

     exit 1

esac

exit 0

儲存並退出

 

賦予檔案運行許可權

[root@localhost init.d]# chmod a+x lvsrs

 

運行檔案

[root@localhost init.d]# service lvsrs start

RealServer Start OK

 

OK,運行沒問題,查看以下IP地址有沒有掛在lo環回口上

[root@localhost init.d]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

   inet 192.168.0.220/32 brd 192.168.0.220 scope global lo:0

   inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 00:0c:29:86:2a:17 brd ff:ff:ff:ff:ff:ff

   inet 192.168.0.224/24 brd 192.168.0.255 scope global eth1

   inet6 fe80::20c:29ff:fe86:2a17/64 scope link

      valid_lft forever preferred_lft forever

 

OK,已經掛上了,接下來就可以開始測試

 

首先回到DR1的介面上,執行以下命令用於監測串連保持狀態(2s重新整理一次狀態)

[root@DR1 ~]# watch ipvsadm -L -n -c

 

開啟瀏覽器,輸入VIP地址,每隔2秒按F5重新整理一次,效果如下圖所示:


第一次重新整理

 

查看ipvsadm狀態

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.223:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.223:80

 


第二次重新整理

 

查看ipvsadm狀態

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.224:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.224:80

 

OK,這樣MASTER端就沒有問題,接下來斷開MASTER的eth1網路測試BACKUP DR輪詢情況

 

首先要開啟cmd先ping VIP地址 -t,如下圖所示


然後執行以下命令關閉eth1網卡,查看ping情況

 

[root@DR1 ~]# ifdown eth1


可以看到,ping只丟了一個包,就切換到BACKUP DR上了

 

接下來測試BACKUP DR的輪詢情況,也是使用瀏覽器每隔2秒重新整理一次


第一次重新整理

 

查看ipvsadm狀態

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.223:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.223:80



第二次重新整理

 

查看ipvsadm狀態

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.224:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.224:80

 

OK,這樣BACKUP DR就沒有問題,整個實驗大功告成。

註:以上列出的僅為RS1的配置,RS2的配置僅需要修改index.html中的以下內容:

RealServer1 改為RealServer2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.