Ubuntu10.04.4 Server下基於LVS DR模式+Keepalived的負載均衡高可用

Ubuntu10.04.4 Server下基於LVS DR模式+Keepalived的負載均衡高可用集羣
linux

LVS+Keepalived 介紹 2 算法

LVS 2 shell

Keepalvied 2 ubuntu

ubuntu系統環境準備工做 2 bash

更換Ubuntu軟件源 2 服務器

架構拓撲圖 2 網絡

服務安裝 3 架構

安裝LVS 3 負載均衡

安裝Keepalived 3 less

服務配置 4

配置LVS實現負載均衡 4

LVS Server 4

Real Server 4

測試LVS 5

配置keepalived實現高可用 5

LVS Server 5

測試keepalived 6

附錄A lvs參數簡介 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LVS+Keepalived 介紹

申明:這只是我照着網絡上的相關技術文檔作實驗後的整理

LVS

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);

十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalvied

Keepalived在這裏主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現,對lvs的單點故障提供高可用接管方案

ubuntu系統環境準備工做

更換Ubuntu軟件源

將源配置爲:http://old-releases.ubuntu.com/ubuntu/(國內163等源對舊版本的ubuntu已不支持了)

架構拓撲圖

  

服務安裝

安裝LVS

分別在lbserver一、lbserver2上安裝lvs

它是基於linux內核實現的,2.6.X內核默認集成了lvs模塊,須要安裝管理工具ipvsadm。若是已安裝過會提示已是最新版本)

#apt-get install ipvsadm

第一次運行ipvsadm前須要配置下ipvsadm(#vi /etc/init.d/ipvsadm) 

#dpkg–reconfigure ipvsadm

[no](不自動啓動)-->[master](設爲主LB Server)-->「eth0」(默認第一塊網卡)-->[yes](肯定後返回)

查看ipvsadm安裝路徑

#which ipvsadm

查看ipvsadm的版本

#ipvsadm -v

其餘的命令可以使用 ipvsadm --help | less 查看,關於lvs的具體知識見附錄A

安裝Keepalived

分別在lbserver一、lbserver2上安裝lvs 

#apt-get install keepalived

查找Keepalived的安裝路徑

#which keepalived

查找Keepalived的版本

#keepalived -v

查看init.d文件夾下是否有LVS、Keepalived啓動文件

#ls -/etc/init.d/ | grep 「ipvsadm\|keepalived」

服務配置

配置LVS實現負載均衡

 

 

LVS Server

分別在lbserver一、lbserver2上建立啓動腳本 (* 附錄B)

#vi /root/lvs.sh

#!/bin/bash
vip=192.168.56.200
rs1=192.168.56.201
rs2=192.168.56.202
 
#clear ipvs tables
ipvsadm -C
 
#set LVS  Server
ipvsadm -A -t $vip:80 -s rr
ipvsadm -a -t $vip:80 -r $rs1:80 -g -w 1 #-w表示權重,默認爲1
ipvsadm -a -t $vip:80 -r $rs2:80 -g  #不加-w 1效果同上句
 
# update /etc/sysctl.conf,如下配置重啓後將復原
echo "1" >/proc/sys/net/ipv4/ip_forward #啓用ip轉發
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
#sysctl -p  #查看sysctl的配置變化,可不執行

*:這裏rr表示ipvsadm的8種算法中的輪詢,作實驗選這個算法,效果比較明顯。-g,就是lvs的三種模式中的LVS-DR模式。-i 就是遂道LVS-TUN.爲何eth0:0的broadcast就是它的IP,由於他的netmask爲/32.(the VIP is a /32 addr, so the brd addr is the VIP, not x.x.x.255.)

Real Server

分別在real server一、real server2上建立啓動腳本 (* 附錄B)

#vi /root/rs.sh

#!/bin/bash
vip=192.168.56.200
ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip up #網關要和虛ip同樣,掩碼不能同於eth0的
route add -host $vip dev lo:0  #添加永久路由
#echo "0" >/proc/sys/net/ipv4/ip_forward #關閉real server ip轉發,2.6.*內核默認是關閉的
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  #查看sysctl的配置變化,可不執行

測試LVS

要在未開啓Cookie狀況下刷新效果明顯,2min流轉一次估計

查看lvs的運行情況

 

查看lvs日誌

 

 

配置keepalived實現高可用

LVS Server

查看Keepalived啓動文件 

#cat /etc/init.d/keepalived

編輯主機keepalived配置文件

#vi /etc/keepalived/keepalived.conf

備機的配置文件,加 * 號處須要注意或作修改

# Global Configuration
global_defs {
router_id  ubuntu-lvs-a # * 當前Server主機名
}
# VRRP Configuration
vrrp_instance LVS {
state MASTER  # * 主機或備機(MASTER/BACKUP)
interface eth0  # * 綁定到哪一個網卡
virtual_router_id 51  #VRID標記(0~255),主備要保持相同
priority 150  # * 優先級,MASTER要高於BACKUP的優先級(至少50)
advert_int 1  #檢查間隔時間,默認1秒
authentication {
auth_type PASS  #指定要使用哪種認證(PASS|AH)
auth_pass 123456  #指定要使用的密碼字符串
}
virtual_ipaddress {
192.168.56.200 # * VIP
}
}
# Virtual Server Configuration - for WWW service
virtual_server 192.168.56.200 80 {
delay_loop 1
lb_algo rr  #調度算法,這裏用了最簡單的rr
lb_kind DR #包轉發模式
persistence_timeout 60  #長鏈接超時設置爲60秒
protocol TCP
# Real Server 1 configuration
real_server 192.168.56.201 80 { #real_server就是用來定義真實服務器的
weight 3  #權重,默認設爲3
TCP_CHECK {
connection_timeout 10 #鏈接遠程真實服務器超時時間(秒)
nb_get_retry 3 #最大重試次數
delay_before_retry 3 #連續兩次重試的延遲時間(秒)
}
}
real_server 192.168.56.202 80 {
weight 1
TCP_CHECK {
connection_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}

啓動keepalived

#/etc/init.d/keepalived start

測試keepalived

查看keepalived日誌

#tail -f /var/log/message

附錄A lvs參數簡介

部分參數以下:man ipvsadm能夠所有看到。

-A, --add-service    Add  a  virtual service

-E, --edit-service    Edit a virtual service

-D, --delete-service        Delete a virtual service

-C, --clear      Clear the virtual server table.

-R, --restore

-S, --save

-a, --add-server      Add a real server to a virtual service

-e, --edit-server      Edit a real server in a virtual service

-d, --delete-server   Remove a real server from a virtual service

-L, -l, --list     List  the  virtual  server  table  if no argument is specified

-t, --tcp-service      Use TCP service.

-u, --udp-service    Use UDP service

 

-s 指定服務採用的算法,經常使用的算法參數以下:

 

    rr   輪叫(Round Robin)

    調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務 器,而無論服務器上實際的鏈接數和系統負載。

    wrr   加權輪叫(Weighted Round Robin)

    調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

    lc   最少連接(Least Connections)

    調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。

    wlc   加權最少連接(Weighted Least Connections)

    在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

    lblc   基於局部性的最少連接(Locality-Based Least Connections)

    "基於局部性的最少連接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務器,將請求發送到該服務器。

    lblcr   帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)

    "帶複製的基於局部性最少連接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。

    dh   目標地址散列(Destination Hashing)

    "目標地址散列"調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

    sh   源地址散列(Source Hashing)

    "源地址散列"調度算法根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。 

 

-a 表示往一個服務內增長一個real server

-r 指定real server的IP地址

-w 表示權重

-g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。

附錄B lvs server、real server故障/增長

增長、故障lvs server

現有的lvs和keepalived無須重配置

增長、故障real server

須要對lvs server的lvs和keepalived都要配置,且要在新加的real server建立啓動腳本

相關文章
相關標籤/搜索