Linux 負載均衡(一) LVS + Keepalived


一) 架構




二) 安裝 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.126

source /etc/rc.d/init.d/functions

case "$1" in

start)

ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up

/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

執行 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.html
MD5SUM = f27498879019e5123512819c82fb7c4f

# /usr/local/keepalived/bin/genhash -s 172.24.42.125 -p 80 -u /keep.html
MD5SUM = 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 InActConn
TCP  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 InActConn
TCP  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) 帶復制的基于局部最少連接


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值