站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)

        1.1 LVS簡(jiǎn)介
            LVS(Linux Virtual Server),也就是Linux虛擬服務(wù)器, 是一個(gè)自由軟件項(xiàng)目。使用LVS技術(shù)要達(dá)到的目標(biāo)是:通過LVS提供的負(fù)載均衡技術(shù)和Linux操作系統(tǒng)實(shí)現(xiàn)一個(gè)高性能、高可用的服務(wù)器群集,它具有良好可靠性、可擴(kuò)展性和可操作性。從而以低廉的成本實(shí)現(xiàn)最優(yōu)的服務(wù)性能。
            LVS主要用來做四層負(fù)載均衡。
         
        1.2 Keepalived簡(jiǎn)介
            Keepalived是分布式部署系統(tǒng)解決系統(tǒng)高可用的軟件,結(jié)合LVS(Linux Virtual Server)使用,其功能類似于heartbeat,解決單機(jī)宕機(jī)的問題。
            Keepalived是以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ)的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。通過VRRP協(xié)議結(jié)合LVS,對(duì)組群服務(wù)器監(jiān)控情況,若master出現(xiàn)宕機(jī)情況,則將VIP漂移到backup機(jī)上。實(shí)現(xiàn)了分布式系統(tǒng)高可用。可以理解為:keepalived是LVS的管理軟件,根據(jù)監(jiān)控情況,將宕機(jī)服務(wù)器從ipvsadm移除掉。
              Keepalived的誕生最初是為L(zhǎng)VS ipvs(director)提供高可用性的,后來發(fā)展一個(gè)多功能、通用的輕量級(jí)高可用組件,可以為ipvs、nginx、haproxy等諸多服務(wù)提供高可用功能,主要應(yīng)用在負(fù)載均衡調(diào)度器上,同時(shí)也可以檢查后端各realserver的健康狀態(tài)。
         
        1.3 負(fù)載均衡
            四層負(fù)載均衡工作在OSI模型的傳輸層,由于在傳輸層,只有TCP/UDP協(xié)議,這兩種協(xié)議中除了包含源IP、目標(biāo)IP以外,還包含源端口號(hào)及目的端口號(hào)。四層負(fù)載均衡服務(wù)器在接受到客戶端請(qǐng)求后,以后通過修改數(shù)據(jù)包的地址信息(IP+端口號(hào))將流量轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器。
              七層負(fù)載均衡工作在OSI模型的應(yīng)用層,應(yīng)用層協(xié)議較多,常用http、radius、dns等。七層負(fù)載就可以基于這些協(xié)議來負(fù)載。這些應(yīng)用層協(xié)議中會(huì)包含很多有意義的內(nèi)容。比如同一個(gè)Web服務(wù)器的負(fù)載均衡,除了根據(jù)IP加端口進(jìn)行負(fù)載外,還可根據(jù)七層的URL、瀏覽器類別、語言來決定是否要進(jìn)行負(fù)載均衡。
              四層通過虛擬 IP + 端口接收請(qǐng)求,然后再分配到真實(shí)的服務(wù)器,七層通過虛擬的 URL 或主機(jī)名接收請(qǐng)求,然后再分配到真實(shí)的服務(wù)器。所謂的四到七層負(fù)載均衡,就是在對(duì)后臺(tái)的服務(wù)器進(jìn)行負(fù)載均衡時(shí),依據(jù)四層的信息或七層的信息來決定怎么樣轉(zhuǎn)發(fā)流量。
         
        2. 搭建過程及測(cè)試
         
        2.1 主機(jī)配置
        主機(jī)名
        ip
        操作系統(tǒng)
        軟件
        端口
        lvs01
        10.1.28.253
        CentOS 7.0
        lvs  keepalived
        8080
        lvs02
        10.1.28.70
        CentOS 7.0
        lvs keepalived
        8080
        Nginxsever01
        10.1.28.30
        CentOS 7.0
        nginx
        8080
         Nginxsever01
         10.1.28.40  CentOS 7.0  nginx  8080
         
        2.3 搭建準(zhǔn)備
        2.3.1 關(guān)閉所有機(jī)器防火墻
        [root@lvs01 ~]#systemctl stop firewalld.service
         
        2.3.2 關(guān)閉防selinux
        關(guān)閉所有服務(wù)器selinux,修改/etc/selinux/config,將SELINUX由enforcing設(shè)置為disabled,重啟服務(wù)器。
         
        2.4 ipvs安裝
        LVS無需安裝,安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive。ipvsadm是通過命令行管理,而keepalive讀取配置文件管理。
        分別在lvs01和lvs02執(zhí)行如下操作:
        [root@lvs01 ~]# yum -y install ipvsadm
         
        2.4.1 把模塊加載進(jìn)系統(tǒng)
        [root@lvs01 ~]#ipvsadm
         
        2.5 keepalived安裝
        分別在lvs01和lvs02執(zhí)行如下操作:
        [root@lvs01 ~]# yum -y install keepalived
         
        2.6 keepalived配置
        ! Configuration File for keepalived
         
        global_defs {
        router_id MASTER    ## keepalived 服務(wù)器標(biāo)識(shí)符,可以隨意設(shè)定( 貌似也是全局唯一 )
        vrrp_instance VI_1 {     ## 定義一個(gè)名為 VI_1 的 VRRP 實(shí)例
        state MASTER   ## Keepalived 服務(wù)器角色,MASTER 為主、BACKUP 為備
        interface eth0    ## 指定 HA 監(jiān)測(cè)網(wǎng)絡(luò)接口
        virtual_router_id 51    ## 虛擬路由標(biāo)識(shí),同一個(gè) VRRP 實(shí)例使用唯一的標(biāo)識(shí),主備必須一樣
        priority 100    ## 節(jié)點(diǎn)優(yōu)先級(jí),同一 VRRP 實(shí)例中 MASTER 的優(yōu)先級(jí)必須大于 BACKUP
        advert_int 1    ## MASTER / BACKUP 之間同步檢查間隔時(shí)間,單位 秒
        authentication {   ## 節(jié)點(diǎn)之間通信驗(yàn)證類型、密碼 ,同一 VRRP 實(shí)例中,MASTER / BACKUP 必須使用相同的密碼才可以通信
        auth_type PASS
        auth_pass 123456
        }
        virtual_ipaddress { ## 虛擬 IP 地址,又稱漂移 IP 。可以通過 ip add 在 MASTER 上查看是否綁定
        10.1.28.123
        }
        }
        virtual_server 10.1.28.123 8080 {   ## 定義虛擬服務(wù)器
        delay_loop 6   ## 定義健康檢查時(shí)間間隔,單位 秒
        lb_algo rr   ## 負(fù)載均衡調(diào)度算法,支持 rr 、wrr 、lc 、wlc 、lblc 、sh 、dh 等
        lb_kind DR   ## LVS 負(fù)載均衡機(jī)制,支持 NAT 、TUN 、DR
        persistence_timeout 120   ## 會(huì)話保持時(shí)間,單位 秒。提供動(dòng)態(tài)頁面 session 保持功能,同一 IP 該值時(shí)間內(nèi)被持續(xù)分配到同一臺(tái)節(jié)點(diǎn)服務(wù)器上
        protocol TCP   ## 轉(zhuǎn)發(fā)協(xié)議類型,支持 TCP 、UDP
        real_server 10.1.28.30 8080 { ## 定義節(jié)點(diǎn)服務(wù)器
        weight 1   ## 節(jié)點(diǎn)權(quán)重值,數(shù)字越大權(quán)重越高,分配到的連接越多。主要用于后端節(jié)點(diǎn)服務(wù)器性能不統(tǒng)一
        notify_down /etc/keepalived/real_down.sh   ## 該節(jié)點(diǎn)服務(wù)器處于 DOWN 狀態(tài)后執(zhí)行的腳本
        TCP_CHECK {   ## 健康檢測(cè)方式,支持 HTTP_GET 、SSL_GET 、TCP_CHECK 、SMTP_CHECK 、MISC_CHECK
        connect_port 8080   ## 檢測(cè)端口,不指定時(shí)默認(rèn)為 real_server 指定的端口
        connect_timeout 3  ## 無響應(yīng)超時(shí)時(shí)間,單位 秒
        nb_get_retry 3  ## 重試次數(shù)
        delay_before_retry 3  ## 重試間隔,單位 秒
        }
        }
        real_server 10.1.28.40 8080  { ## 第二臺(tái)節(jié)點(diǎn)服務(wù)器
        weight 1
        notify_down /etc/keepalived/real_down.sh
        TCP_CHECK {
        connect_port 8080
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        }
        }
        }

         
        lvs02配置
        ! Configuration File for keepalived
         
        global_defs {
           router_id lvs02
        }
        vrrp_instance VI_1 {
            state BACKUP
            interface ens160
            virtual_router_id 51
            priority 90
           advert_int 1
            authentication {
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress {
               10.1.28.123
            }
        }
        virtual_server 10.1.28.123 8080 {
            delay_loop 6
            lb_algo rr
            lb_kind DR
           # persistence_timeout 50
            protocol TCP
            real_server 10.1.28.30 8080 {
                weight 1
                TCP_CHECK{
                connetct_timeout 10
                retry 3
                delay_before_retry 3
                connetct_port 8080
         
        }
        }
             real_server 10.1.28.40 8080 {
                weight 2
                TCP_CHECK{
                connetct_timeout 10
                retry 3
                delay_before_retry 3
                connetct_port 8080
         
        }
        }
        }
         

        2.7 參數(shù)說明
        IPVS三種IP負(fù)載均衡技術(shù):
        VS/NAT: 即(Virtual Server via Network Address Translation)
        也就是網(wǎng)絡(luò)地址翻譯技術(shù)實(shí)現(xiàn)虛擬服務(wù)器,當(dāng)用戶請(qǐng)求到達(dá)調(diào)度器時(shí),調(diào)度器將請(qǐng)求報(bào)文的目標(biāo)地址(即虛擬IP地址)改寫成選定的Real Server地址,同時(shí)報(bào)文的目標(biāo)端口也改成選定的Real Server的相應(yīng)端口,最后將報(bào)文請(qǐng)求發(fā)送到選定的Real Server。在服務(wù)器端得到數(shù)據(jù)后,Real Server返回?cái)?shù)據(jù)給用戶時(shí),需要再次經(jīng)過負(fù)載調(diào)度器將報(bào)文的源地址和源端口改成虛擬IP地址和相應(yīng)端口,然后把數(shù)據(jù)發(fā)送給用戶,完成整個(gè)負(fù)載調(diào)度過程。可以看出,在NAT方式下,用戶請(qǐng)求和響應(yīng)報(bào)文都必須經(jīng)過Director Server地址重寫,當(dāng)用戶請(qǐng)求越來越多時(shí),調(diào)度器的處理能力將稱為瓶頸。
         
        VS/TUN:即(Virtual Server via IP Tunneling)
        也就是IP隧道技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。它的連接調(diào)度和管理與VS/NAT方式一樣,只是它的報(bào)文轉(zhuǎn)發(fā)方法不同,VS/TUN方式中,調(diào)度器采用IP隧道技術(shù)將用戶請(qǐng)求轉(zhuǎn)發(fā)到某個(gè)Real Server,而這個(gè)Real Server將直接響應(yīng)用戶的請(qǐng)求,不再經(jīng)過前端調(diào)度器,此外,對(duì)Real Server的地域位置沒有要求,可以和Director Server位于同一個(gè)網(wǎng)段,也可以是獨(dú)立的一個(gè)網(wǎng)絡(luò)。因此,在TUN方式中,調(diào)度器將只處理用戶的報(bào)文請(qǐng)求,集群系統(tǒng)的吞吐量大大提高。
         
        VS/DR: 即(Virtual Server via Direct Routing)
        也就是用直接路由技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。它的連接調(diào)度和管理與VS/NAT和VS/TUN中的一樣,但它的報(bào)文轉(zhuǎn)發(fā)方法又有不同,VS/DR通過改寫請(qǐng)求報(bào)文的MAC地址,將請(qǐng)求發(fā)送到Real Server,而Real Server將響應(yīng)直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負(fù)載調(diào)度機(jī)制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網(wǎng)卡連在同一物理網(wǎng)段上,且真實(shí)服務(wù)器網(wǎng)絡(luò)設(shè)備或設(shè)備別名不作 ARP 響應(yīng)。
         
        IPVS調(diào)度器實(shí)現(xiàn)了如下八種負(fù)載調(diào)度算法:
        輪叫(Round Robin)
        調(diào)度器通過”輪叫”調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。
         
        加權(quán)輪叫(Weighted Round Robin)
        調(diào)度器通過”加權(quán)輪叫”調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來調(diào)度訪問請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問流量。調(diào)度器可以自動(dòng)問詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
         
        最少鏈接(Least Connections)
        調(diào)度器通過”最少連接”調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用”最小連接”調(diào)度算法可以較好地均衡負(fù)載。
         
        加權(quán)最少鏈接(Weighted Least Connections)
        在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用”加權(quán)最少鏈接”調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載。調(diào)度器可以自動(dòng)問詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
         
        基于局部性的最少鏈接(Locality-Based Least Connections)
        “基于局部性的最少鏈接” 調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器 是可用的且沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用”最少鏈接”的原則選出一個(gè)可用的服務(wù) 器,將請(qǐng)求發(fā)送到該服務(wù)器。
         
        帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)
        “帶復(fù)制的基于局部性最少鏈接”調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法的不同之處是它要維護(hù)從一個(gè) 目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù) 器組,按”最小連接”原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器,若服務(wù)器超載;則按”最小連接”原則從這個(gè)集群中選出一 臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器。同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的 程度。
         
        目標(biāo)地址散列(Destination Hashing)
        “目標(biāo)地址散列”調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
         
        源地址散列(Source Hashing)
        “源地址散列”調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
         
        本例中采用DR負(fù)載均衡和wrr負(fù)載調(diào)度算法
         
        3. 負(fù)載均衡及高可用測(cè)試
        3.1 啟動(dòng)Keepalived
        lvs01和lvs02分別執(zhí)行:
        [root@lvs01 ~]# service keepalived start
        執(zhí)行ip a,lvs01上有vip10.1.28.123,lvs02沒有
         
        3.2 頁面訪問
        通過不同瀏覽器訪問http://10.1.28.30:8080
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)
        3.3 Master上檢查連接情況
        lvs01上執(zhí)行ipvsadm -ln:
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)
        3.4 ipvsadm參數(shù)說明
        ipvsadm:
        -L|-l(–list):顯示內(nèi)核虛擬服務(wù)器表
        -n(–numeric):輸出IP 地址和端口的數(shù)字形式
        輸出參數(shù)說明:
        Forward 轉(zhuǎn)發(fā)方式,當(dāng)前是路由轉(zhuǎn)發(fā)
        Weight 權(quán)重
        ActiveConn 當(dāng)前活躍的連接數(shù)
        InActConn 當(dāng)前不活躍的連接數(shù)
         
        3.5 修改keepalived參數(shù)
        通過ipvsadm命令發(fā)現(xiàn)訪問請(qǐng)求都被分配到92(nginx02)這臺(tái)服務(wù)器,沒有實(shí)現(xiàn)負(fù)載均衡。這個(gè)和keepalived參數(shù)配置persistence_timeout有關(guān),這個(gè)參數(shù)的意義是保持客戶端的請(qǐng)求在這個(gè)時(shí)間段內(nèi)全部發(fā)到同一個(gè)真實(shí)服務(wù)器。
        分別注釋lvs01和lvs02的persistence_timeout:
        [root@lvs01 keepalived]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
        [root@lvs01 keepalived]# view /etc/keepalived/keepalived.conf #persistence_timeout 50
        重啟兩臺(tái)lvs服務(wù)器keepalived服務(wù):
        [root@lvs01 keepalived]# service keepalived restart
        再次測(cè)試:
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)
        發(fā)現(xiàn)連接均勻的分配到后臺(tái)兩臺(tái)nginx服務(wù)器。
         
        3.5.5 lvs高可用測(cè)試
        恢復(fù)keepalived配置并重啟服務(wù)。
        lvs01宕機(jī)前訪問頁面:
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)
        停止lvs01的keepalived服務(wù),模擬lvs01宕機(jī):
        systemctl stop keepalived 
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)
        查看lvs02情況:
        發(fā)現(xiàn)vip已飄至lvs02。
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn) 
        http://10.1.28.123:8080,訪問正常:
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)
        恢復(fù)lvs01的keepalived服務(wù):
        Linux下部署搭建Keepalived+LVS負(fù)載均衡實(shí)戰(zhàn)
        發(fā)現(xiàn)vip飄回至lvs01,vip頁面訪問正常
         
        總結(jié):
        當(dāng) MASTER 服務(wù)器無法提供服務(wù)時(shí),VIP 會(huì)在 MASTER 上自動(dòng)移除,BACKUP 服務(wù)器會(huì)提升為 MASTER 狀態(tài),綁定 VIP 、接管服務(wù)。
        當(dāng) MASTER 修復(fù)加入網(wǎng)絡(luò)后,會(huì)自動(dòng)搶回 VIP ,成為 MASTER 身份。
        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国产精品白丝AV嫩草影院| 国产成人精品在线观看| 久久96国产精品久久久| 亚洲国产精品自在拍在线播放| 国产精品久久久久天天影视| 亚洲Av无码精品色午夜 | 日韩精品一区二区午夜成人版| 精品国产一区二区三区久久| 亚洲国产精品无码久久久秋霞2| 国产一区二区三区精品视频| 亚洲国产成人久久精品动漫| 国内精品伊人久久久久av一坑| 亚洲精品无码精品mV在线观看| 国产精品美女网站| 亚洲精品福利视频| 久久se精品一区精品二区| 国产精品va无码一区二区| 日本内射精品一区二区视频| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 无码人妻精品一区二区三区东京热| 毛片a精品**国产| 国产精品片在线观看手机版| 中文字幕精品一区影音先锋 | 久久精品国产福利国产秒| 97久久超碰国产精品2021| 欧洲精品99毛片免费高清观看| 亚洲午夜精品久久久久久app| 欧美日韩国产中文精品字幕自在自线| 国产精品福利片免费看 | 真实国产精品vr专区| 亚洲精品国产成人影院| 合区精品中文字幕| 亚洲精品国产福利一二区| 影院无码人妻精品一区二区| 呦交小u女国产精品视频| 亚洲精品国产精品乱码在线观看 | 国产精品亚洲w码日韩中文| 国产69精品久久久久99| 国产精品综合久成人| 久久久久国产精品嫩草影院| 亚洲国产成人a精品不卡在线|