【轉貼】lvs負載均衡+keepalived高可用性配置詳解

weixin_33860553發表於2013-04-22
國內私募機構九鼎控股打造APP,來就送 20元現金領取地址:http://jdb.jiudingcapital.com/phone.html
內部邀請碼:C8E245J (不寫邀請碼,沒有現金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統掛牌的公眾公司,股票程式碼為430719,為“中國PE第一股”,市值超1000億元。 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

一些名詞解釋 (利用下面的拓撲來理解名詞)

 

    1; VIP: Virtual IP(虛擬ip, 主要是提供使用者進行訪問的);

    2; RIP: REAL SERVER IP(真實伺服器ip, 主要是提供服務的主要的伺服器有http伺服器);

    3; CIP: CLIENT IP(客戶端ip, 用來訪問虛報ip);

    4; DIP: DEVICE IP(裝置的ip, 作為REAL SERVERGateway, 這個最好也是用虛擬ip, 這個ip是在nat模式下才使用配置nat模式最好使用兩張網路卡);

    5; DIRECTOR: 排程器(是指安裝ipvsadm的那臺機器);

    6; RS: REAL SERVER(真實的伺服器裡面有安裝伺服器比如web, mail等等;)

        

 

 

: lvs的三種模式(按照出現的時間順序來排列);

    1; nat模式 (回覆包要經過DIRECTOR, 這種模式最早出現最成熟但是排程器是瓶頸,所以這個模式現在比較少用; tunneling模式和直接路由模式是後來為了解決某些問題而出現的);             

    2; tunneling模式;(回覆包不需要經過DIRECTOR, 這種模式只要排程器和真實伺服器的路由可達即可所以應用起來比較廣回覆包的時候直接通過各自的路由器出去所以比較方便配置只要realserver支援tunneling即可)

    3; 直接路由模式;(回覆包不需要經過DIRECTOR, 這種模式要求RSDIRECTOR中間不能用路由器隔開回為這個模式只改變目標的mac地址)

 

: lvs的十種演算法;

    1; 四種靜態演算法(假設伺服器為a, b, c! 後面的數字代表伺服器的權重);

 

1: rr: abc, abc, abc

2: wrr: a3b2c1, aababc aababc

           3: dh: 目標hash;(根據目標地址選擇伺服器)

4: sh: hash;(根據源地址選擇伺服器)

 

    2; 六種動態演算法;

1: lc: ci最小, (ciestablished狀態的數量)處理能力比較強的計算機就一直回覆;

2: wlc: ci/wi最小, (wiweight的值)針對處理能力強的計算機weight調大一點;

3: lblc: 基於wlc, cache, 如果有一臺已經跟伺服器在連線那就一直使用這一臺;如果負載太重(ci>wi), wlc選擇一臺就一直這臺;

4: lblcr: 基於lblc, 只是cache叢集;如果每臺負載都過重, wlc選一臺如果一臺沒有用, remove;

5: sed: (ci+1)/wi最小;一開始就把weight用上;

6: nq: 基於sed選一臺如果沒過載一直就這臺有過載再使用sed再選一臺;(ci>wi)

 

 

需要實現的目標;

1; 使用者訪問192.168.2.149, 192.168.2.149把服務請求一會兒轉發到192.168.2.31, 一會兒轉發到192.168.2.32;

    DIRECTOR: 192.168.2.23(VIP 192.168.2.149)

    REAL SERVERS: 192.168.2.31(lo:0 192.168.2.149)

 

à        把上面的需要用三種模式各實現一遍除錯演算法使用wrr;

 

 

 

2; 使用兩臺機器192.168.2.23(DIRECTOR MASTER)192.168.2.31(DIRECTOR BACKUP)作為偵錯程式使用192.168.2.20, 192.168.2.21, 192.168.2.22, 192.168.2.31, 192.168.2.32作為真實伺服器;

    DIRECTOR: 192.168.2.23, 192.168.2.31(VIP 192.168.2.149)

    REAL SERVERS: 192.168.2.21, 192.168.2.20, 192.168.2.22, 192.168.2.31, 192.168.2.32(lo:0 192.168.2.149);

 

 

第一個目標的實現;

1; DIRECTOR的配置;

1; 安裝lvs軟體ipvsadm; (確認有ip_vs模組使用lsmod | grep ip_vs)

apt-get install ipvsadm

    2; 配置虛擬ip;

       ifconfig eth1:1 192.168.2.149 netmask 255.255.255.255 up

       route add –host 192.168.2.149 dev eth1:1

    3; 配置負載均衡(使用dr模式排程演算法為wrr, weight統一配置成5);

       ipvsadm –A –t 192.168.2.149:80 –s wrr

       ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.31:80 –g –w 5

       ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.32:80 –g –w 5

 

    2; 真實伺服器的配置(要注意arp問題分別在192.168.2.31192.168.2.32上配置);

       1; 配置虛擬ip;

           ifconfig lo:0 192.168.2.149 netmask 255.255.255.255 up

           route add –host 192.168.2.149 dev lo:0

       2; 抑制arp廣播;

           echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

           echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter

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

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

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

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

 

第二個目標的實現;

1; DIRECTOR的配置(上面那個主要實現的是負載均衡這個主要實現的高可用性的配置這個是在192.168.2.23上的配置, 192.168.2.31只需要改變兩個地址即可下面有註釋);

    1; 高可用性軟體的安裝keepalived;

        apt-get install keepalived

       2; keepalived主要的配置檔案如下(keepalived.conf)

           ! configuration file for keepalived

global_defs {

        notification_email{

                361589194@qq.com

        }

        notification_email_from 361589194@qq.com

        smtp_server smtp.163.com

        router_id lvs_director #郵件通知的標識, keepalived的日誌檔案在/var/log/syslog, 可以在這個檔案檢視狀態即可;

}

 

vrrp_instance V1{

        state MASTER #192.168.2.31配置為BACKUP

        interface eth1

        lvs_sync_daemon_interface eth1

        virtual_router_id 51   #虛擬路由的標識必須與BACKUP一樣;

        priority 150 #192.168.2.31配置為100(一般來說要小t50);

        advert_int 5

        authentication {

                auth_type PASS

                auth_pass 1111

        }

        virtual_ipaddress {

                192.168.2.149

                 }

}

 

virtual_server 192.168.2.149 80 {

        delay_loop 10  #ping的超時時間;

        lb_algo wrr

        lb_kind DR

        #persistence_timeout 10 #這個是配置永續性連線的如果配置這個那要預防單臺的突發性連線;

        protocol TCP

        real_server 192.168.2.20 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10 #檢測80的埠的超時時間;

                        nb_get_retry 3 #重試次數

                        delay_before_retry 3 #重試的延時

                        connect_port 80

                }

        }

        real_server 192.168.2.22 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

           delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.21 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.30 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.32 80 {

                       weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.32 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

}

       3; 啟動keepalived;

           /etc/init.d/keepalived restart

    2; 真實伺服器的配置與上面lvs的配置一樣每臺都要配置;

 

配置lvs或者lvs+keepalived需要注意的問題;

   1; 使用client機器ping一下虛擬ip(ping 192.168.2.149), 使用arp –n檢視192.168.2.149mac地址必須與排程器的mac地址一樣如果不一樣那就是真實伺服器的欺騙了交換機排程器就失去了作用;

    2; tunnel模式的配置需要在真實伺服器配置tunnel介面地址;

       ifconfig tunl0 192.168.2.149 netmask 255.255.255.255 up(同時如果在同一個區域網裡面測試也要預防arp欺騙)

    3; nat模式下真實伺服器基本不需要配置什麼只需要把閘道器指向DIP即可;

 

作者: whzhuang

日期: 2013/4/20

版本: first release

 

參考網站:

1; 51ctolvs標籤推薦部落格; http://blog.51cto.com/tagindex.php

2; lvs的英文官方網站; http://www.linuxvirtualserver.org/

3; lvs的中文官方網站http://zh.linuxvirtualserver.org/

4; arp問題的解決(教授親自出手指點); http://zh.linuxvirtualserver.org/node/225

4; lvs初學必看http://os.51cto.com/art/201202/319979.htm

相關文章