Linux 負載均衡(一) LVS + Keepalived

来源:互联网 发布:ubuntu 挂载 编辑:程序博客网 时间:2024/06/07 00:47


一) 架構




二) 安裝 real server (web主機)


分別在 172.24.42.124 和 172.24.42.125 中完成以下操作

安裝 httpd

<span style="font-size:10px;"># yum install -y httpd# /etc/init.d/httpd start# cd /var/www/html# echo "172.24.42.124" > keep.html  </span><span style="font-size:18px;">    </span>

備注:keep.html 的內容為web主機的ip地址,以便通過虛擬IP訪問時能知道具體連上的是哪一臺.


編寫 realserver.sh, 內容如下

SNS_VIP=172.24.42.126source /etc/rc.d/init.d/functionscase "$1" instart)ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up/sbin/route add -host $SNS_VIP dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1echo "RealServer Start OK";;stop)ifconfig lo:0 downroute del $SNS_VIP >/dev/null 2>&1echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;*)        echo "Usage: $0 {start|stop}"        exit 1 esac exit 0

執行 realserver.sh start 啟動 lvs 客戶端 

# ./realserver.sh start 


三) 安裝 ipvsadm & keepalived


分別在 172.24.42.122 和 172.24.42.123 完成以下操作

下載 ipvsadm-1.27.tar.gz 后 進行安裝

# tar zxf ipvsadm-1.27.tar.gz# cd ipvsadm-1.27; make; make install

下載 keepalived-1.2.10.tar.gz 后進行安裝

# tar zxf keepalived-1.2.10.tar.gz# cd keepalived-1.2.10# yum install -y libnfnetlink-devel openssl-devel# ./configure --prefix=/usr/local/keepalived
make; make install


執行 link 

# ln -s /usr/local/keepalived/etc/keepalived/ /etc/# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/


分別獲取兩臺 realserver 主機的 keep.html 的 MD5值

# /usr/local/keepalived/bin/genhash -s 172.24.42.124 -p 80 -u /keep.htmlMD5SUM = f27498879019e5123512819c82fb7c4f# /usr/local/keepalived/bin/genhash -s 172.24.42.125 -p 80 -u /keep.htmlMD5SUM = f9b71fc29a750aca13934513f050234e
分別記下 MD5SUM 值, 在下一個步驟會用到


修改 /etc/keepalived/keepalived.conf 文件, 內容如下 :

global_defs {  router_id LVS_DEVEL}vrrp_sync_group bl_group {    group {        VI_1    }}vrrp_instance VI_1 {    state MASTER              interface ens160    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        172.24.42.126/24    }}virtual_server 172.24.42.126 80 {    delay_loop 6    lb_algo rr    lb_kind DR    persistence_timeout 50    protocol TCP    real_server 172.24.42.124 80 {        weight 1        HTTP_GET {            url {                path /keep.html                digest f27498879019e5123512819c82fb7c4f            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }    real_server 172.24.42.125 80 {        weight 1        HTTP_GET {            url {                path /keep.html                digest f9b71fc29a750aca13934513f050234e            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }}

備注:

(1) 配置文件中的 digest 后面的值是上一個步驟記錄的 midsum 值


(2) 配置文件對于負載均衡主備兩臺服務器(172.24.42.122 / 172.24.42.123)來說, 有兩處不一樣: 

172.24.42.122 (主) :

第一處: state MASTER 

第二處: priority 100

172.24.42.123 (備) :

第一處: state BACKUP

第二處: priority 90


啟動 keepalived 服務

# /etc/init.d/keepalived restart

執行 ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  172.24.42.126:80 rr persistent 50  -> 172.24.42.124:80             Route   1      0          0  -> 172.24.42.125:80             Route   1      0          0

四) 驗證 


1) 分別在不同的 client 上訪問 http://172.24.42.126/keep.html 會顯示真實訪問的服務器 ip (172.24.42.124 或 172.24.42.125)

    (具備分配機制)


2) 顯示分配連接數

# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  172.24.42.126:http rr persistent 50  -> 172.24.42.124:http           Route   1      0          5  -> 172.24.42.125:http           Route   1      0          2
網上的資料介紹 使用  lb_algo rr  時會平均分配, 但實際測試并沒有這樣 (待進一步分析)

3) 將real server  172.24.42.124 服務器斷網, 再在多臺 cient 上訪問 http://172.24.42.126/keep.html

都會得到 172.24.42.125 的結果  (具備故障檢測功能)

恢復 172.24.42.124 的網絡后, 就會自動恢復分配機制


4) 再將負載均衡(主)服務器 172.24.42.122 斷網, 仍然可以訪問 http://172.24.42.126/keep.html,

得到 172.24.42.125 的結果 (當主出現故障后, 備自動接替主的工作)

恢復 172.24.42.122 的網絡后,負載均衡(主)服務器會重新接管虛擬IP 172.24.42.126

172.24.42.123 再進次入待命狀態.


重要筆記:

1) 配置 keepalived.conf 時, 所有大括號 { 前面要留一個空格, 否則無法正確識別,

2) 當負載均衡有兩臺或以上服務器時, 只有當主服務器 down 了以后, 備服務器才開始工作.

    使用 # ip a 可以查看虛擬IP 工作在哪一臺負載均衡服務器

3) keepalived 服務日志存放在 /var/log/messages 中

4) LVS負載均衡有三種模式 

    LVS-DR (Direct Routing): 直接路由模式, 實際使用較多

    LVS-NAT (Network Address Translaton) 地址轉換,因負載較重, 使用較少

    LVS-TUN (IP Tunneling) 應用于遠程(外網)

5) LVS 負載均衡的調度算法

    rr (Round Robin) 輪循調度

    wrr (Weighted Round Robin) 加權輪循

    DH (Destination Hashing) 目標地址散列

    SH (Source Hashing) 源地址散列

    LC (Least Connections) 最小鏈接

    WLC (Weighted Least Connections) 加權最少鏈接 (推薦使用)

    SED (Shortest Expected Delay0 最短的期望的延時

    NQS (Never Queue Scheduling0 最少隊列調度

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

    LBLCR (Locality-Based Leat Connections Witch Replication) 帶復制的基于局部最少連接


0 0
原创粉丝点击