1. 程式人生 > >LVS實現負載均衡及keepalive實現高可用

LVS實現負載均衡及keepalive實現高可用

一.叢集(cluster)以及型別;

       當後端伺服器承受不住訪問的壓力,提高伺服器效能的解決方案會極大增加成本時,人們提出了橫向擴充套件的解決方案。增加一臺或幾臺伺服器,提供相同的服務,通過前段分發器將訪問量均勻的分配到後臺伺服器上。這種多臺伺服器組成的陣列集合就叫做叢集。

叢集型別:

LB(load balancing):負載均衡叢集,擴充套件容量,實現伸縮性;開源方案:lvs,haproxy,nginx,ats

HA(HighAvailability)高可用,服務可用性叢集;

開源方案:heartbeat,corosync+pacemaker,cman+pacemaker,cman+rgmanger,keepalived,u1tramonkey

HP(high  performace):高效能,併發處理叢集;開源方案:hadoop

二. 解決負載均衡叢集方案

1.硬體配置

1.軟體:lvs (linux virtual server)相當於元件,由兩部分組成,ipvs工作在核心當中,相當於netfilter,iptables而LVS正好工作在iptables的input鏈上,ipvs框架需要依賴規則完成轉發,ipvsadm外部命令編寫規則交予ipvs進行處理。

三.lvs簡單說明

lvs叢集使用三層架構:

第一層負載均衡層:由一臺或者多臺負載均衡器組成,將使用者請求分發給伺服器群組層的伺服器;

第二層伺服器群組層:由一組實際執行的應用服務組成

第三層共享儲存層:為服務提供共享儲存空間和內容一致性的儲存區域,一般由磁碟陣列組成。

四.lvs負載均衡的四種工作模型

NAT模式:

1.當用戶請求到達Director Server,此時請求的資料報文會先到核心空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

2. PREROUTING檢查發現數據包的目標IP是本機,將資料包送至INPUT鏈

3.IPVS比對資料包請求的服務是否為叢集服務,若是,修改資料包的目標IP地址為後端伺服器IP,然後將資料包POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP

4. POSTROUTING鏈通過選路,將資料包傳送給Real Server

5. Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP


6.Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目IP為CIP

特點:

1.RS的應該使用私有地址

2.RS的閘道器必須指向DIP

3.RIP和DIP必須在同一網段內

4.請求和響應的報文都得經過Director,在高負載場景中,Director很可能成為效能憑藉

5.支援埠對映

6.RS可以使用任意支援叢集服務的OS

DR模式:

1.首先,客戶端CIP的請求傳送給LVS排程器的VIP;

2.LVS排程器收到客戶端的請求包後,將資料包的MAC地址改成LVS排程器選擇的某一臺RSMAC地址,並通過交換機發送給RS伺服器;

3.RS收到傳送來的資料報文請求後,會從鏈路層往上傳給IP層,此時IP層需要驗證請求的目標IP地址。因為包的目標IP(即VIP)並不是RS的本地IP,而僅僅MAC地址是RS的。所以,在RS上需要配置一個VIPloopbackdevice,是因為loopback device是伺服器本地使用的網路介面,對外是不可見的,不會跟LVSip衝突。

4.RS處理資料包完成後,將應答直接返回給客戶端。回覆資料報不在經過排程器。因此,如果對外提供LVS負載均衡服務,則RS需要連上網際網路才能將應答包返回給客戶端。不過,RS最好為帶公網IP的伺服器,這樣可以不經過閘道器直接回應客戶,如果多個RS使用了同一網關出口,閘道器會成為LVS架構的瓶頸,會大大降低LVS的效能。

特點:

1.RS可以使用私有地址,還可以使用公網地址,此時可以直接通過網際網路連入RS,以實現配置、監控等

2.RS的閘道器一定不能指向DIP

3.RS跟Dirctory要在同一物理網路內(不能有路由器分隔)

4.請求報文經過Directory,但響應報文一定不經過Director

5.不支援埠對映

6.RS可以使用大多數的作業系統

TUN模式:

客戶端訪問伺服器,資料包的源地址cip,目標地址vip,傳送給排程器。排程器建立虛擬的網路通道,在資料包上面在封裝一層

而稱為新的資料包,不改動之前地址,封裝過後資料包源地址dip,目標地址rip,直接傳送到後端伺服器。後端伺服器接受資料

包,目標地址符合,開始構建響應報文將響應資料通過虛擬通道直接返回給客戶端;

特點:

(1)RIP,DIP可以使用私有地址;

(2)RIP和DIP可以不再同一個網路中,且RIP的閘道器未必需要指向DIP;

(3)支援埠對映;

(4)RS的OS可以使用任意型別;

(5)請求報文經由Director,響應報文也經由Director;

fullant模型:

        客戶端到叢集的響應報文源地址cip,目標地址vip,經過排程器將請求報文地址轉變,源地址dip,目標地址rip,請求報文送達後

端伺服器構建響應報文,響應報文送達排程器前源地址rrip,目標地址dip,排程器接受報文後將地址轉化源地址vip,目標地址cip,將

送達資料到達客戶端。在期間資料包地址經過兩次轉化。

特點:

1.RIP,DIP,VIP都得是公網地址

2.RS的閘道器不會指向也不可能指向DIP

3.請求報文經過Directory,但響應報文一定不經過Director

4.不支援埠對映

5.RS的OS必須得支援隧道功能模式:

四. lvs的叢集服務:

ipvsadm  使用者介面的工作命令

-A  #新增一個叢集服務

      -t : tcp協議

     -u : udp

     -f: firewall make 通常應用於將兩個或以上的服務繫結為一個服務進行處理時使用

      service-address    #伺服器新增地址

           -t     ip:port

           -u   ip:port

   -s  排程演算法,預設為w1c

LVS的排程方法:10種

 靜態方法:僅根據演算法本身進行排程

   rr:Round Robin 輪詢

     wrr:Weighted RR 權重輪詢

     sh:source hashing源地址hash

     dh:destination hashing 目標地址hash

  動態方法:根據演算法及RS當前的複製狀態

  lc:Least Connection 最少連線

  計算當前的負載Overhead=Active*256+Inactive來實現

  wlc:Weighted LC

  Overhead=(Active*256+Inactive)/weigh

  sed:Shortest Expect Delay  最短期望延遲

Overhead=(Active+1)*256/weight 

    aq:Nerver Queus: 永不排隊

    lblc:Locality-based least connection 基於本地的最少連線相當於dh+lc

    Lblcr:基於複製的基於本地的最少連線 Replicated and Locality-based least connection

 -p : timeout persistent connection  持久連結

-E   修改定義過的叢集服務

-D -t|u|f   service-address   刪除指定的叢集服務

RS相關:

-a:向指定的CS中新增RS

-t|-u|-f service-address:指明將RS新增至那個Cluster Service 中

   -r:指定RS,可以包含{IP[:port]},只有支援埠對映的LVS型別才允許此處使用跟叢集服務中不同的埠

   lvs型別:

   -g:Gateway,DR

   -i:ipip,TUN

   -m:masquerade(地址偽裝),NAT

   預設為DR

  指定RS許可權 -w

  上限下限: -x:下限     -y:上限

-e:修改指定的RS屬性

-d  -t|u|f  service-address  -r  server-address:在指定的叢集服務中刪除一個指定的RS

情況所有的叢集服務:-C

儲存規則(使用輸出重定向):

ipvsadm-save

ipvaadm -S

載入指定的規則:(使用輸入重定向)

ipvsadmin-restore

ipvasdm -R

檢視ipvs規則等

 -L [options]

 -n 使用數字格式顯示IP地址,不反解

 -c:檢視連線數相關資訊

 --stats:顯示統計資料

 --rate:資料傳輸速率

 --timeout:顯示tcp會話時長

 --daemon:守護程序的資訊

 --sort:對虛擬服務進行排序,預設為升序

 --exact:精確顯示,不做單位換算

-Z:計數器清零

五.LVS的DR模式實現負載均衡

實驗環境;redhat6.5系統,排程器ip192.168.88.152  後端伺服器192.168.88.153和192.168.88.154

排程器配置:

1.配置6.5系統yum源需要配置,否則ipvsadm不能進行安裝


2.安裝ipvsamd 


3.排程器新增虛擬ip192.168.88.200/24


4.定義叢集,給叢集設定輪詢節點;



5.儲存策略,重新啟動ipvsadm 服務


後端伺服器配置;

1. 192.168.88.153配置如下:

新增虛擬ip192.168.88.200/24


安裝http服務,編輯預設網頁


2.後端伺服器192.168.88.154配置如下;



客戶端測試結果:起初一直出現server3伺服器,然後一致重新整理等過了一段時間變成server2伺服器,然後再長時間不變化;



問題原因是arp -an |  grep 100   繫結的虛擬ip和server不在一起

後端伺服器新增arptables策略

排程器配置不變化;

1.後端伺服器server2新增arptables策略,安裝arptables,新增排程器識別規則



2.後端伺服器配置如上,安裝arptables,新增排程器識別規則



以上排程器只能進行輪詢,不能檢測後端伺服器的狀況,需要安裝Idirectord,自動建立叢集新增節點,目的檢查後端伺服器健康

排程伺服器配置:

1.安裝ldirectord-3.95-3.1.x86_64.rpm軟體


2.修改配置檔案



3.清空ipvsadm 策略,啟動ldirectord服務


4.後端伺服器關閉http服務,排程器配置


物理主機訪問:


六.LVS的NAT模式實現負載均衡

1.server1排程器主機配置

匯入modprobe iptble-nat 模組

排程器新增虛擬ip和物理機ip在同一vlan

新增策略

開啟排程器的路由轉化功能,設定排程器的閘道器為新增的虛擬ip;

2, 後端伺服器server2和server3配置

將排程器的虛擬ip設定為閘道器

3.test虛擬機器測試,test虛擬機器的ip和排程器虛擬ip在同一vlan,啟動http服務;

七.LVS的TUN模型實現負載均衡

排程器setver1配置:

1.排程器server1匯入modprobe ipip 模組,新增tunl0的隧道


2.新增虛擬ip,啟用tunl0隧道,設定ipvsadm 規則



3.路由新增虛擬ip


後端伺服器server2和server3配置:

1.匯入模組,新增vip到tunl0隧道,啟用tunl0隧道,


2.路由新增vip.關閉tunl0.rp_filter

  #tunl0關閉rp_filter功能


3.設定arptables策略;


test虛擬機器測試:curl 192.168.88.200


八. 使用keepalive實現高可用叢集

1.server1主機停止ldirectord服務


2.server1 排程器安裝keepalived 


在解壓目錄下·進行編譯


出現如下報錯是缺少libnl和libnl-devel,安裝這兩個軟體包,再次進行編譯;


出現如下報錯缺少libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm,http://rpm.pbone.net/index.php3下載安裝包,再次進行編譯安裝ok;



製作啟動軟連線


配置目錄增加執行許可權


安裝mailx.程式動態以郵件的方式顯示,在/var/log/messages

yum  install  -y  mailx

3.配置keepalived服務

! Configuration File for keepalived

global_defs {

   notification_email {

      [email protected]    #keepalive發生切換時將傳送郵箱通知 

   }

   notification_email_from [email protected]   #指定發件人

   smtp_server 127.0.0.1   #smtp服務地址

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

#   vrrp_strict       #登出

   vrrp_garp_interval 0

   vrrp_gna_interval 0

vrrp_instance VI_1 {

    state MASTER    #指定伺服器為主裝置,backup為輔助裝置

    interface eth1   

    virtual_router_id 51

    priority 100   #指定優先順序,1-254數字越大優先順序越高;

    advert_int 1

    authentication {

 auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.88.200   #設定vip

    }

virtual_server 192.168.88.200 80 {   

    delay_loop 3   #健康檢查時間間隔

    lb_algo rr     #lvs的排程演算法

    lb_kind DR    #lvs的DR模式

#    persistence_timeout 50   #保持會話時間

    protocol TCP     #使用tcp協議

    real_server 192.168.88.153 80 {   #設定後端服務裝置

        weight 1     #權重預設為1,0為失效

        TCP_CHECK  {

            connect_timeout 3   #連結時間

            retry 3    #重連次數

            delay_before_retry 3  #重新連結間隔時間

        }

}

   real_server 192.168.88.154 80 {   

        weight 1     

        TCP_CHECK  {

            connect_timeout 3

            retry 3

            delay_before_retry 3

        }

   }

}

將server1主機安裝好的檔案傳送給server4主機



修改server4主機的配置檔案

! Configuration File for keepalived

global_defs {

   notification_email {

      [email protected]    #keepalive發生切換時將傳送郵箱通知 

   }

   notification_email_from [email protected]   #指定發件人

   smtp_server 127.0.0.1   #smtp服務地址

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

#   vrrp_strict       #登出

   vrrp_garp_interval 0

   vrrp_gna_interval 0

vrrp_instance VI_1 {

    state MASTER    #指定伺服器為主裝置,backup為輔助裝置

    interface eth1   

    virtual_router_id 51

    priority 50   #指定優先順序,1-254數字越大優先順序越高;

    advert_int 1

    authentication {

 auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.88.200   #設定vip

    }

virtual_server 192.168.88.200 80 {   

    delay_loop 3   #健康檢查時間間隔

    lb_algo rr     #lvs的排程演算法

    lb_kind DR    #lvs的DR模式

#    persistence_timeout 50   #保持會話時間

    protocol TCP     #使用tcp協議

    real_server 192.168.88.153 80 {   #設定後端服務裝置

        weight 1     #權重預設為1,0為失效

        TCP_CHECK  {

            connect_timeout 3   #連結時間

            retry 3    #重連次數

            delay_before_retry 3  #重新連結間隔時間

        }

}

   real_server 192.168.88.154 80 {   

        weight 1     

        TCP_CHECK  {

            connect_timeout 3

            retry 3

            delay_before_retry 3

        }

   }

}

4.server2和server3後端伺服器配置相同

設定虛擬ip


新增arptables規則;


設定http預設網頁


客戶端測試:


server1做主機顯示server1的網絡卡mac地址

5.實現高可用和健康體檢;

配置還有點小問題我在檢查檢查

相關推薦

LVS實現負載均衡keepalive實現可用

一.叢集(cluster)以及型別;       當後端伺服器承受不住訪問的壓力,提高伺服器效能的解決方案會極大增加成本時,人們提出了橫向擴充套件的解決方案。增加一臺或幾臺伺服器,提供相同的服務,通過前段分發器將訪問量均勻的分配到後臺伺服器上。這種多臺伺服器組成的陣列集合就叫

haproxy+keepalived實現負載均衡可用

keepalived+haproxy HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高性能性、負載均衡,以及基於TCP和HTTP的應用程序代理。相較與 Nginx,HAProxy 更專註與反向代理,因此它可以支持更多的選項,更精細的控制,更多的健康狀態檢測機制和負載均衡算法。 H

解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡可用

解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用 IP 伺服器 服務 192.168.1.10 lb-node1 Nginx、kee

lvs負載均衡的四種模式原理,LVS之DR模型,LVS+keeaplived實現負載均衡,keepalived實現可用

一,LVS的簡介: Linux virtual system,是由目前阿里著名工程師章文嵩開發的一寬開源的軟體。LVS工作在一臺server上提供Directory(負載均衡器)的功能,它本身並不提供任何服務,只是把特定的請求轉發給對應的realserver(

MySQL 可用:mysql+Lvs+Keepalived 負載均衡故障轉移

ica 目錄 details software fwm 多個 優先級 sql 服務器 規則 轉自 MySQL 高可用:mysql+Lvs+Keepalived 負載均衡及故障轉移 - KK ——專註數據 - 博客頻道 - CSDN.NETh

Nginx+Tomcat實現負載均衡動靜分離

動靜 webapps ado art index.jsp mod connector mct 圖片 內部模擬兩臺服務器taoba1和taobao2 當訪問 www.taobao.com 時候會依據負載均衡策略來進行訪問 拷貝兩份tomcat文件,分別命名為taobao

Nginx+tomcat+memcached實現負載均衡session共享

Nginx+tomcat+memcached 使用nginx作為前端伺服器來實現tomcat負載均衡及高可用,同時基於jsp的動態特徵,我們將引入memcache來保持網頁在連線過程中的session保持,利用memcached把多個tomcat的session集中管理 圖解: 說明:

若依專案利用nginx實現負載均衡保持會話

記錄一下若依專案利用nginx實現負載均衡及保持會話的步驟。 此次作為試驗性的測試,為了方便在本地window的環境上實現。 具體步驟: 1、安裝兩個tomcat8,可以下載一個後,另一個複製即可,下載地址:      https://tomcat.apache.org/

LVS-DR負載均衡keepalived可用的部署

LVS-DR負載均衡 server1:作為LinuxDirector 1.安裝ipvsadm(rh6.5需要配置yum源) [[email protected] ~]# cat /etc/yum.repos.d/rhel-source

LVS DR模式負載均衡搭建、keepalived可用+LVS負載均衡配合

lvs lvs dr模式 lvs負載均衡 keepalived+LVS LVS DR模式搭建 準備:dir(調度器):192.168.188.2rs1:192.168.188.3rs2:192.168.188.6vip:192.168.188.200 安裝ipvsadm yum insta

springboot專案Nginx+Tomcat實現負載均衡結合Redis實現session共享問題

對於分散式使用Nginx+Tomcat實現負載均衡,當同一個使用者登入後,再次訪問可能分發到不同的服務,這樣我們就取不到之前登入session,出現未登入現象。所以我們必須解決共享session問題。  方式一:儲存在資料庫中 , 使用者登入時,把session資訊儲存在資

LVS+KEEPALIVED+MYSQL單點寫入讀負載均衡主主同步可用方案

LVS+KEEPALIVED+MYSQL 單點寫入讀負載均衡主主同步高可用方案安裝教程 一、         安裝環境 Ø  軟體版本 CENTOS 6.5 KEEPALIVED 1.2.12 | 下載 LVS 1.2.6 | 下載 MYSQL 5.6.17(社群版) |

雙網絡卡實現負載均衡技術的實現與原理

網絡卡出錯冗餘      : AFT(Adapter Fault Tolerance)技術是一種在伺服器和交換機之間建立冗餘連線的技術,亦即在伺服器上安裝兩塊網絡卡,一塊為主網絡卡,另一塊作為備用網絡卡,然後用兩根網線將兩塊網絡卡都連到交換機上。 : AFT技術的基本工作

Centos 5.7 上LVS+piranha負載均衡雙機熱備配置方式

安裝包下載: LVS: 在kernel裡已經包含了這個安裝包,我們可以驗證: Red Hat Enterprise Linux 3 (or CentOS 3) kernel has already included the IPVS patch, so that

負載均衡,分散式,可用,容錯的區別

叢集(Cluster) 叢集的概念是和單臺伺服器相對應的,簡單來說叢集就是部署多臺伺服器協同完成一項工作。 1,負載均衡(Load Balance)叢集: 負責均衡伺服器根據負載均衡演算法(輪詢,隨機,雜湊,權重等)來分發請求到不同的主伺服器。  每個主伺服器都是等價的

Keepalive+Amoeba+Mysql 實現可用負載均衡讀寫分離

一:實驗環境   寫:寫入的介面是keepalive配置的虛擬IP(192.168.1.60),而這個VIP指向雙主複製中的兩個節點。 讀:slave1(該slave1指向的是master1)。 二:實驗目的 Master1與master2實現高可用,master1

LVS+Keepalived】 LVS+Keepalived實現tcp、udp負載均衡HA可用

LVS 安裝下載編譯安裝 yum install -y kernel-devel gcc gcc-c++ yum install libnl* libpopt* popt-static -y解壓完之後進入解壓目錄執行make && make install編譯

使用LVS實現負載均衡原理安裝配置詳解

配置 png 負載均衡 iptables .cn 詳解 文章 配置詳解 logs LVS是一個開源軟件,由章文嵩博士於1998年5月創立,可以實現Linux平臺下的簡單負載均衡。LVS是Linux Virtual Server的簡寫,是一個虛擬的服務器集群系統。LVS是基於

Keepalived結合LVS-DR實現負載均衡可用集群

table 開啟 strong 部署 toc ifconf cal 指向 protocol 簡介 Keepalived期初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能—判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換新的服務器,當故障

Lvs-nat模式實現負載均衡的配置命令執行過程

一、實驗環境 三臺伺服器,一臺作為 director,兩臺作為 real server,director 有一個外網網絡卡(10.0.172.190) 和一個內網ip(192.168.0.10),兩個 real server 上只有內網 ip (192.168.0.11) 和 (192.168.