Linux LVS+KEEPALIVED

來源:互聯網
上載者:User

 LVS + KEEPALIVED
工作原理此處不作講解,自己去官方網站學習(http://www.linuxvirtualserver.org),這裡重點講如何配置!
註:最好從官方網站對其進行瞭解,不至於會對某些問題產生誤解,儘管是英文的!

環境:
192.168.1.1  GateWay
192.168.1.10  LVS_VIP(VIP:Virtual IP)
192.168.1.14  LVS_Master     
192.168.1.15  LVS_Backup
192.168.1.16  WEB1_RealServer
192.168.1.17  WEB2_RealServer

LINUX(CentOS 5.6)配置

1. 安裝CentOS(此處我使用的版本為:CentOS-5.6-x86_64)
2. 安裝IPVSADM
    知識點:IPVSADM理解為IPVS管理工具;LVS(Linux Virtual Server)的核心為IPVS(IP Virtual Server),從Linux核心版本2.6起,IPVS模組已經編譯進了Linux核心。  
    > 使用yum命令進行安裝,系統會選擇最適合核心版本的ipvsadm
       yum -y install ipvsadm
3. 配置(使用KeepAlived時,此步可省略,因為KeepAlived提供了更簡單的配置方式來實現負載平衡。不過仍然建議使用此種方式配置一遍。)
    > ifconfig eth0:0 192.168.1.10 broadcast 192.168.1.10 netmask 255.255.255.255 up
    > route add -host 192.168.1.10 dev eth0:0
    > ipvsadm -A -t 192.168.1.10:80 -s wrr
    > ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.16:80 -g
    > ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.17:80 -g
4. 防火牆設定
    > service iptables stop
    或 在防火牆規則表中加入一條記錄
    > vi /etc/sysconfig/iptables
    > -A RH-Firewall-1-INPUT -m state --state NEW -m -tcp -p tcp --dport 80 -j ACCEPT
    > service iptables restart

WINDOWS 2008 SERVER R2 配置

1. 建立windows環回網卡(如何建立,請自己Google)
2. 設定環回網卡IP地址
    > IP地址:    192.168.1.10
    > 子網路遮罩: 255.255.255.255
    其它不用設定了
3. 修改用戶端網卡介面、環回介面串連模式(至關重要)
    > netsh interface ipv4 set interface "網卡名稱" weakhostreceive=enabled
    > netsh interface ipv4 set interface "網卡名稱" weakhostsend=enabled
    > netsh interface ipv4 set interface "環回網卡名稱" weakhostreceive=enabled
    > netsh interface ipv4 set interface "環回網卡名稱" weakhostsend=enabled

接下來,我們在瀏覽器地址欄中輸入 http://192.168.1.10,你會發現你的訪問請求被轉移到了192.168.1.16或192.168.1.17,這時我們嘗試停掉其中任何一台伺服器,你再來訪問 http://192.168.1.10,你會發現有時正常,有時不正常。原因很簡單,因為其中一台機器被你停掉了,但是IPVS無法發現這種錯誤,所以還是會把請求均衡負載到當初配置的真實伺服器列表中;針對這種問題,我們該如何來解決呢?此時該是KEEPALIVED登場的時候了!

KEEPALIVED 配置

知識點:KeepAlived是一個路由軟體,它主要的目的是讓我們通過簡單的配置,實現高可用負載平衡,當然負載平衡依賴於Linux虛擬伺服器(IPVS)的核心模組,其高可用性
           使用VRRP協議來實現,KeepAlived不僅會檢測負載平衡伺服器集區中每台機器的健康情況並通知IPVS將非健康的機器從池中移除掉;同時它還能對負載平衡調度器本身
           實現健康狀態檢查,當主負載平衡調度器出現問題時,備用負載平衡調度器頂替主進行工作。
1. 安裝KeepAlived(KeepAlived依賴openssl,所以在安裝KeepAlived之前需要先安裝openssl)
    > yum -y install openssl-devel
    > wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz(KeepAlived版本大家自己去 http://www.keepalived.org 上查看,下載最新版本即可)
    > tar zxvf keepalived-1.2.7.tar.gz
    > cd keepalived-1.2.7
    > ./configure -prefix=/usr/local/keepalived
    > make && make install
2. 配置KeepAlived
    The First:開啟IP Forward 功能(LVS現有三種負載平衡規則都需要開啟此功能,如果不開啟此功能,下面的配置配得再好都無濟於事。)
    > vi /etc/sysctl.conf
    > net.ipv4.ip_forward = 1
    > sysctl -p(使設定立即生效)
    KeepAlived配置分三部分
    > 全域定義塊--global_defs
       . 不建議使用email通知,改用nagios來進行監控
       . router_id:負載平衡器標識。在一個網路內,它應該是唯一的。
    > VRRP定義塊--vrrp_instance
       . state
                 均衡器狀態。只有MASTER和BACKUP兩種狀態,並且需要大寫這些單詞;其中MASTER為工作狀態,BACKUP為備用狀態;當MASTER所在伺服器
                 失效時,BACKUP所在系統會自動把它的狀態由BACKUP變為MASTER;當失效的MASTER所在系統復原時,BACKUP從MASTER恢複到BACKUP狀態。
       . interface
                 對外提供服務的網路介面,如eth0,eth1;當前的主流伺服器一般都有2個或2個以上的介面,在選擇服務介面時,一定要核實清楚。
       . virtual_router_id
                 這個標識是個數字,並且同一個VRRP執行個體使用唯一的標識。即同一個vrrp_instance,MASTER和BACKUP的virtual_router_id是一致的。
       . priority
                 優先順序。這個標識也是個數字,數值越大,優先順序越高;在同一個vrrp_instance裡,MASTER的優先順序高於BACKUP。
       . advert_int
                 同步通知間隔。MASTER與BACKUP負載平衡器之間同步檢查的時間間隔,單位為秒。
       . authentication
                 驗證。包含驗證類型和驗證密碼。類型主要有PASS、AH兩種,通常使用PASS類型,據說AH使用時有問題;驗證密碼為明文,同一個vrrp_instance
                 執行個體MASTER與BACKUP使用相同的密碼才能正常通訊。
       . virtual_ipaddress
                 虛擬IP地址。可以有多個地址,每個地址佔一行。
    > 虛擬伺服器定義塊--virtual_server
       . delay_loop
                  健全狀態檢查時間間隔,單位為秒。
       . lb_algo
                  負載平衡調度演算法(rr、wrr、dh、sh、lc、wlc、sed、nq、lblc、lblcr)。
                  演算法分兩大類:靜態演算法、動態演算法
                  靜態演算法:只是根據演算法進行調度並不考慮後端REALSERVER的實際串連情況
                  ---- rr(輪叫調度 - Round-Robin Scheduling)
                        調度器通過"輪叫"調度演算法將外部請求按順序輪流分配到叢集中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的串連數
                        和系統負載。
                  ---- wrr(加權輪叫調度 - Weighted Round-Robin Scheduling)
                        調度器通過"加權輪叫"調度演算法根據真實伺服器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的伺服器處理更多的訪問流量。調
                        度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值
                  ---- dh(目標地址散列調度 - Destination Hashing Scheduling)
                        "目標地址散列"調度演算法根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且
                        未超載,將請求發送到該伺服器,否則返回空。
                  ---- sh(源地址散列調度 - Source Hashing Scheduling)
                        "源地址散列"調度演算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超
                        載,將請求發送到該伺服器,否則返回空。
                  動態演算法:前端的調度器會根據後端REALSERVER的實際串連情況來分配請求
                  ---- lc(最小串連調度 - Least-Connection Scheduling)
                        當一個使用者請求過來的時候,就計算下哪台RS的連結誰最小,那麼這台RS就獲得了下次響應用戶端請求的機會,計算的方法
                        Overhead=active*256+inactive,如果兩者的結果是相同的則從LVS中的規則依次往下選擇RS。這種演算法也是不考慮伺服器的效能的。
                  ---- wlc(加權最小串連調度 - Weighted Least-Connection Scheduling)
                        這個就是加了權重的LC,考慮了RS的效能,即是效能好的就給的權重值大一些,不好的給的權重值小一些。缺點就是如果Overhead相同,
                        則會按規則表中的順序,由上而下選擇RS,Overhead=(active*256+inactive)/weight
                  ---- sed(最短預期延時調度 - Shortest Expected Delay Scheduling)
                        就是對WLC的情況的補充,Overhead=(active+1)*256/weight,加一,就是為了讓其能夠比較出大小。
                  ---- nq(不排隊調度 - Never Queue Scheduling)
                        never queue 基本和SED相同,避免了SED當中的效能差的伺服器長時間被閒置弊端,它是第一個請求給效能好的伺服器,第二個請求
                        一定是給的空閑伺服器不論它的效能的好與壞。以後還是會把請求給效能好的伺服器
                  ---- lblc(基於局部性的最少連結 - Locality-Based Least Connections Scheduling)
                        它就是動態DH和LC的組合,適用於cache群,對於從來沒有來過的那些新的請求會分給當前串連數較少的那台伺服器。
                  ---- lblcr(帶複製的基於局部性最少連結 - Locality-Based Least Connections with Replication Scheduling)
                        帶有複製功能的LBLC,它的適用情境這裡舉例說明一下,比如說現在有RS1和RS2,第一次訪問RS1的5個請求第二次又來了,理所應到
                        Director將會將其交給RS1,而此時在RS2是非常閑的,所以此時最好的處理方法就是可以將後來的這5個請求分別交給RS1和RS2,所以
                        此時就需要把用戶端第一次請求的資源複製下來。(特殊情況)
                  小解:活動連結active和非活動連結inactive
                  這裡以http為例,http本身是一種無狀態的連結,當用戶端請求訪問的時候,有個等待響應過程,這個時段可以稱其為活動連結active狀態。
                  當伺服器端給與響應後,請求因為keepalive而並未斷開,則此段時間的狀態就是非活動連結狀態。
       . lb_kind
                  負載平衡轉寄規則(DR、NET、TUN),常用DR。
       . persistence_timeout
                  會話保持時間,單位是秒。這個選項對動態網站很有用處,當使用者用帳號登入網站時,有了這個會話保持功能,就能把使用者的請求轉寄給同一個應用服務
                  器。在這裡,我們來做一個假設,假定現在有一個LVS環境,使用DR轉寄模式,真實伺服器有3台,如果負載平衡器不啟用會話保持功能,當使用者第一次
                  訪問的時候,他的訪問請求分發給某個真實伺服器,這樣他看到一個登入頁面,第一次訪問完畢;接著他在登入框填寫使用者名稱和密碼,然後提交,這個時
                  候,問題就可能出現了:登入不成功,因為沒有會話保持,負載平衡器可能把第2次的請求轉寄到其它伺服器。
       . protocol
                  轉寄協議。一般有TCP和UDP兩種,UDP沒嘗試過。
       . real_server
                  真實伺服器,也即伺服器詞。real_server的值包括IP和連接埠。
                  * weight
                             權重值,它是一個數字,數值越大,權重越高。使用不同的權重值的目的在於為不同效能的機器分配不同的負載。
                  * tcp_check
                             TCP方式檢查機器健康狀態
    我這裡把我配好的給大家看看(包含負載平衡器的高可用)
    MASTER:
   
   
   
    BACKUP:
   
   
   
    MASTER與BACKUP配置僅三處不同:global_defs中的router_id、vrrp_instance中的state、priority
3. 啟動KeepAlived
    /usr/local/keepalived/sbin/keepalived -D
    此處需要注意:KeepAlived預設會去/etc/keepalived下面找它的設定檔,要麼你將keepalived.conf檔案copy到該目錄下,要麼在啟動時帶上 -f 參數來指
    定keepalived.conf檔案位置。
4. 到這裡,KeepAlived就安裝成功了!接下來我們可以使用一些命令來檢查一下。
    > 查看進程:ps aux | grep keepalived
       Keepalived正常運行時,共啟動3個進程,其中一個進程是父進程,負責監控其子進程;一個是vrrp子進程;另外一個是checkers子進程。
       我們也可以通過命令(pstree | grep keepalived)查看進程相關性來驗證上面的說法
    > 查看日誌:tail -f /var/log/messages
    > 查看請求轉寄情況:ipvsadm -lcn | grep 虛擬IP
5. 最佳化。
    最後,我們需要做一下最佳化,那就是將KeepAlived做成服務,隨機啟動,這樣我們就免去了每次手動去啟動的麻煩
    將KeepAlived加入系統服務
    > ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
    > ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    > mkdir /etc/keepalived
    > ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    > ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/  
    設定KeepAlived系統服務隨機啟動
    > chkconfig --add keepalived
    > chkconfig keepalived on
    > 查看:chkconfig --list keepalived

到這裡,整個配置就完成了,最後我們嘗試關閉Master機器或Master上的keepalived服務,看看Backup機器是否會代替Master來工作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.