LVS服務原理以及搭建(理論+乾貨)

来源:http://www.cnblogs.com/sxt-zkys/archive/2017/07/20/7211753.html
-Advertisement-
Play Games

LVS服務原理以及搭建(理論+乾貨) 版權聲明:本文為yunshuxueyuan原創文章 如需轉載請標明出處: https://my.oschina.net/yunshuxueyuan/blog QQ技術交流群:299142667 一、 LVS簡介 LVS是Linux Virtual Server的 ...


LVS服務原理以及搭建(理論+乾貨)

版權聲明:本文為yunshuxueyuan原創文章

如需轉載請標明出處: https://my.oschina.net/yunshuxueyuan/blog

QQ技術交流群:299142667

一、 LVS簡介

LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統,目的在於使用集群技術和Linux操作系統實現一個高性能、高可用的伺服器。它具有良好的可靠性,可拓展性和可操作性。從而以低廉的成本實現最優的性能。

二、 LVS的體系架構

使用LVS架設的伺服器集群系統有三個部分組成:最前端的負載均衡層(Loader Balancer),中間的伺服器群組層,用Server Array表示,最底層的數據共用存儲層,用Shared Storage表示。在用戶看來所有的應用都是透明的,用戶只是在使用一個虛擬伺服器提供的高性能服務。

 

LVS的各個層次的詳細介紹:

Load Balancer層:位於整個集群系統的最前端,有一臺或者多台負載調度器(Director Server)組成,LVS模塊就安裝在Director Server上,而Director的主要作用類似於一個路由器,它含有完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給Server Array層的應用伺服器(Real Server)上。同時,在Director Server上還要安裝對Real Server服務的監控模塊Ldirectord,此模塊用於監測各個Real Server服務的健康狀況。在Real Server不可用時把它從LVS路由表中剔除,恢復時重新加入。

Server Array層:由一組實際運行應用服務的機器組成,Real Server可以是WEB伺服器、MAIL伺服器、FTP伺服器、DNS伺服器、視頻伺服器中的一個或者多個,每個Real Server之間通過高速的LAN或分佈在各地的WAN相連接。在實際的應用中,Director Server也可以同時兼任Real Server的角色。

Shared Storage層:是為所有Real Server提供共用存儲空間和內容一致性的存儲區域,在物理上,一般有磁碟陣列設備組成,為了提供內容的一致性,一般可以通過NFS網路文件系統共用數 據,但是NFS在繁忙的業務系統中,性能並不是很好,此時可以採用集群文件系統,例如Red hat的GFS文件系統,oracle提供的OCFS2文件系統等。

從整個LVS結構可以看出,Director Server是整個LVS的核心,目前,用於Director Server的操作系統只能是Linux和FreeBSD,linux2.6內核不用任何設置就可以支持LVS功能,而FreeBSD作為 Director Server的應用還不是很多,性能也不是很好。對於Real Server,幾乎可以是所有的系統平臺,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

三、 LVS模式

IP負載均衡技術:

負載均衡技術有很多實現方案,有基於DNS功能變數名稱輪流解析的方法、有基於客戶端調度訪問的方法、有基於應用層系統負載的調度方法,還有基於IP地址的調度方法,在這些負載調度演算法中,執行效率最高的是IP負載均衡技術。

LVS 的IP負載均衡技術是通過IPVS模塊來實現的,IPVS是LVS集群系統的核心軟體,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須通過這個虛擬的IP地址訪問服務。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達負載調度器,然後由負載調度器從Real Server列表中選取一個服務節點響應用戶的請求。

當用戶的請求到達負載調度器後,調度器如何將請求發送到提供服務的Real Server節點,而Real Server節點如何返回數據給用戶,是IPVS實現的重點技術,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:

VS/NAT: 即(Virtual Server via Network Address Translation)

也就是網路地址翻譯技術實現虛擬伺服器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標埠也改成選定的Real Server的相應埠,最後將報文請求發送到選定的Real Server。在伺服器端得到數據後,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源埠改成虛擬IP地址和相應埠,然後把數據發送給用戶,完成整個負載調度過程。可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸。

VS/TUN :即(Virtual Server via IP Tunneling)

也就是IP隧道技術實現虛擬伺服器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網路。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的吞吐量大大提高。

VS/DR: 即(Virtual Server via Direct Routing)

也就是用直接路由技術實現虛擬伺服器。它的連接調度和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。

四、 LVS調度演算法(演算法原理查看:http://www.linuxvirtualserver.org/zh/lvs4.html

Lvs的調度演算法決定瞭如何在集群節點之間分佈工作負荷。當director調度器收到來自客戶端訪問VIP的上的集群服務的入站請求時,director調度器必須決定哪個集群節點應該處理請求。Director調度器用的調度方法基本分為兩類:

固定調度演算法:rr,wrr,dh,sh

動態調度演算法:wlc,lc,lblc,lblcr

 

LVS調度演算法的生產環境選型:

1、一般的網路服務,如http,mail,mysql等常用的LVS調度演算法為:

a.基本輪詢調度rr

b.加權最小連接調度wlc

c.加權輪詢調度wrc

2、基於局部性的最小連接lblc和帶複製的給予局部性最小連接lblcr主要適用於web cache和DB cache

3、源地址散列調度SH和目標地址散列調度DH可以結合使用在防火牆集群中,可以保證整個系統的出入口唯一。

實際適用中這些演算法的適用範圍很多,工作中最好參考內核中的連接調度演算法的實現原理,然後根據具體的業務需求合理的選型。

五、 實際搭建

術語   VIP: 虛擬伺服器地址

DIP: 轉發的網路地址

– 1,和RIP通信:ARP協議,獲取Real Server的RIP:MAC地址

– 2,轉發Client的數據包到RIP上(隱藏的VIP)

RIP: 後端真實主機(後端伺服器)

CIP: 客戶端IP地址

VIP: 虛擬主機IP

 

LVS/DR(尚學堂周老師的ppt比較詳細,我吧細節再屢一下):

1、準備3台虛擬機,使eth0在同一個網段上,使DIP和RIP在統一網段

2、配置lvs的VIP

Ifconfig eth0:0 192.168.249.100/24 

(24 代表該 IP 的子網掩碼為 255.255.255.0)

3、調整RS的響應。通告級別(每一臺RS都配)

echo 1  > /proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 2  > /proc/sys/net/ipv4/conf/eth0/arp_announce

echo 1  > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2  > /proc/sys/net/ipv4/conf/all/arp_announce

 

4、配置RS的VIP(每一臺RS都配)

Ifconfig lo:8 192.168.249.100 netmask 255.255.255.255

 

5、啟動RS上的httpd

yum -y install httpd

 

在httpd服務的預設路徑 /var/www/html/ 下新建一個入口訪問頁

測試兩台RS 能否訪問

6、LVS——ipvsadm

yum -y install ipvsadm

ipvsadm -A -t 192.168.249.100:80 -s rr

ipvsadm -a -t 192.168.249.100:80 -r 192.168.249.120 -g -w 1 (-w 表示設置權重)

ipvsadm -a -t 192.168.249.100:80 -r 192.168.249.130 -g -w 1

ipvsadm –ln  顯示內核伺服器列表

瀏覽器刷新: 訪問vip

ipvsadm -lnc  顯示lvs的連接詳情

到這裡基本的服務已經配置完了

註意:這套配置中,VIP 、通告級別、以及httpd 在伺服器重啟後,都需要重新設置

當然也可以設置httpd為開機啟動:chkconfig httpd on

使VIP永久生效用,設置子網卡:

vi /etc/sysconfig/network-scripts/ifcfg-lo:8

DEVICE=lo:8

IPADDR=192.168.249.100

NETMASK=255.255.255.25

 

但是,重啟之後必須手動重新設置通告級別,所以還是比較麻煩

7、因此編寫如下啟動配置腳本(分為LVS server腳本 和 real server腳本):

7.1、配置lvs的dr模式LVS server腳本,如下:

#!/bin/bash

#配置lvs的

VIP=192.168.249.100 #(註意,lvs server那台機器2個ip,一個是vip,一個是本身ip例如192.168.249.110)

RIP1=192.168.249.120

RIP2=192.168.249.130

#RIPn=192.168.249.n

VPORT=80

RPORT=80



Usage (){  

echo "Usage:`basename $0` 請輸入:(start|stop|status) "  

    exit 1  

}  

  

if [ $# -ne 1 ];then  

Usage  

fi



case "${1}" in

start)

echo "start LVS of DirectorServer"

echo 1 > /proc/sys/net/ipv4/ip_forward  #表示允許數據包轉發

     # set the vip  配置lvs的VIP

     /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up  

     /sbin/route add -host $VIP dev eth0:0  

# clear ipvs table 清空ipvs規則  

     /sbin/ipvsadm -C

# add lvs vip and port  

     /sbin/ipvsadm -A -t $VIP:$VPORT -s rr

# add rip and port  

    /sbin/ipvsadm -a -t $VIP:$VPORT -r $RIP1:$RPORT -g -w 1  

     /sbin/ipvsadm -a -t $VIP:$VPORT -r $RIP2:$RPORT -g -w 1

/sbin/ipvsadm -L -n

echo "start success!!!"

;;

stop)

echo "close LVS DirectorServer"  

        /sbin/ipvsadm -C  

        /sbin/ifconfig eth0:0 down

echo "closed !!!"

;;

status)

/sbin/ipvsadm -L -n

;;

*)

Usage

esac

 

7.2、real server 腳本如下:(每台real server 都單獨有自己的一個啟動腳本,腳本內容一樣)

#!/bin/bash

#real_server配置腳本  lvs的dr模式RIP server腳本

VIP=192.168.249.100  

#vip's broadcast  虛擬伺服器的廣播地址

BROADCAST=192.168.249.255

Usage () {  

    echo "Usage:`basename $0` 請輸入:(start|stop)"  

    exit 1  

}    

if [ $# -ne 1 ];then  

    Usage  

fi

case $1 in  

    start)  

        echo "reparing for Real Server"  

        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  

        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  

        echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore  

        echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce  

        /sbin/ifconfig lo:8 $VIP netmask 255.255.255.255 broadcast $BROADCAST up  

        /sbin/route add -host $VIP dev lo:8

echo "start success!!!"  

        ;;           

    stop)  

        /sbin/ifconfig lo:8 down  

        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  

        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  

        echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore  

        echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_announce  

        echo "stop Real Server"  

        ;;        

    *)  

        Usage  

esac

 

7.3開機自啟動

如果覺得每次開機後還得執行腳本來啟動服務配置,那麼就可這直接將腳本設為開機啟動,具體如下圖

 

將要開機執行的腳本全路徑寫在/etc/rc.local 文件末尾,下次開機啟動的時候將會自動執行你添加的腳本。

 

***常用ipvsadm命令:

-A –add-service 在內核的虛擬伺服器表中添加一條新的虛擬伺服器記錄。也

就是增加一臺新的虛擬伺服器。

-E –edit-service 編輯內核虛擬伺服器表中的一條虛擬伺服器記錄。

-D –delete-service 刪除內核虛擬伺服器表中的一條虛擬伺服器記錄。

-C –clear 清除內核虛擬伺服器表中的所有記錄。

-R –restore 恢復虛擬伺服器規則

-S –save 保存虛擬伺服器規則,輸出為-R 選項可讀的格式

-a –add-server 在內核虛擬伺服器表的一條記錄里添加一條新的真實伺服器

記錄。也就是在一個虛擬伺服器中增加一臺新的真實伺服器

-e –edit-server 編輯一條虛擬伺服器記錄中的某條真實伺服器記錄

-d –delete-server 刪除一條虛擬伺服器記錄中的某條真實伺服器記錄

-L|-l –list 顯示內核虛擬伺服器表

-Z –zero 虛擬服務表計數器清零(清空當前的連接數量等)

–set tcp tcpfin udp 設置連接超時值

–start-daemon 啟動同步守護進程。他後面可以是master 或backup,用來說

明LVS Router 是master 或是backup。在這個功能上也可以採用keepalived 的

VRRP 功能。

–stop-daemon 停止同步守護進程

-h –help 顯示幫助信息

其他的選項:

-t –tcp-service service-address 說明虛擬伺服器提供的是tcp 的服務

[vip:port] or [real-server-ip:port]

-u –udp-service service-address 說明虛擬伺服器提供的是udp 的服務

[vip:port] or [real-server-ip:port]

-f –fwmark-service fwmark 說明是經過iptables 標記過的服務類型。

-s –scheduler scheduler 使用的調度演算法,有這樣幾個選項

rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,

預設的調度演算法是: wlc.

-p –persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客

戶的多次請求,將被同一臺真實的伺服器處理。timeout 的預設值為300 秒。

-M –netmask netmask persistent granularity mask

-r –real-server server-address 真實的伺服器[Real-Server:port]

-g –gatewaying 指定LVS 的工作模式為直接路由模式(也是LVS 預設的模式)

-i –ipip 指定LVS 的工作模式為隧道模式

-m –masquerading 指定LVS 的工作模式為NAT 模式

-w –weight weight 真實伺服器的權值

–mcast-interface interface 指定組播的同步介面

-c –connection 顯示LVS 目前的連接 如:ipvsadm -L -c

–timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L –timeout

–daemon 顯示同步守護進程狀態

–stats 顯示統計信息

–rate 顯示速率信息

–sort 對虛擬伺服器和真實伺服器排序輸出

–numeric -n 輸出IP 地址和埠的數字形式

六、 上面提到開機啟動腳本,下麵順便聊一下定時執行shell腳本

例如每分鐘要執行一次test.sh腳本

crontab -l    每個用戶都有各自不同的計劃任務列表,用各自的帳戶登錄後運行

crontab -e   查看到各任務的計劃任務情況,可以修改自己的計劃任務

(*/1 * * * * 為cron表達式,這個表示每分鐘執行一次,具體的可以百度一下哦)

其中*/1 * * * * /user/script/test.sh(一定要絕對路徑)

保存後,必須重新啟動crond服務,不然不會生效

service crond restart

我的腳本是:

echo "測試開機調用,現在時間:`date '+%Y/%m/%d %H:%M:%S'`" >> /user/script/log.txt

查看定時執行效果:

這樣一個簡單的定時任務就ok了

*** crontab常用命令簡紹

crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數。

crontab -l //列出某個用戶cron服務的詳細內容

crontab -r //刪除沒個用戶的cron服務

crontab -e //編輯某個用戶的cron服務

需要將crond設置為系統啟動後自動啟動的服務,可以在/etc/rc.d/rc.local 中,在末尾加上 service crond start

基本用法:

crontab  -l    列出當前的crontab任務

crontab  -d   刪除當前的crontab任務

crontab  -e   (solaris5.8上面是 crontab -r)編輯一個crontab任務,ctrl_D結束

crontab filename    以filename做為crontab的任務列表文件並載入

crontab file的格式:
crontab 文件中的行由 6 個欄位組成,不同欄位間用空格或 tab 鍵分隔。前 5 個欄位指定命令要運行的時間
分鐘 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期幾(0-6,其中 0 代表星期日)

 

補充:在使用crontab的時候,要特別註意的是運行腳本中能夠訪問到的環境變數和當前測試環境中的環境變數未必一致,一個比較保險的做法是在運行的腳本程式中自行設置環境變數(export)。

版權聲明:本文為yunshuxueyuan原創文章

如需轉載請標明出處: https://my.oschina.net/yunshuxueyuan/blog

QQ技術交流群:299142667


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文章由尚學堂旗下雲數學院周老師做內容指導,薛同學編輯,如需轉載,請標明出處。 QQ技術交流群:299142667 前言 使用man grep查看grep的幫助文檔,有如下內容: 可以看出,正則表達式由三類,分別是 基本的正則表達式(Basic Regular Expression 又叫 Basic ...
  • 生成AWR報告需要dbms_workload_repository包的許可權。一、以oracle用戶登錄到資料庫伺服器二、進入SQLPLUS三、執行腳本@?/rdbms/admin/awrrpt.sql四、設定生成報告的格式說明:不用輸入,預設即可,直接按Enter五、設定報告時間段的天數說明:只導當... ...
  • 因本人較懶,有些圖片缺失和東西寫的比較簡單,請多包涵 編碼規範: 命名的規範(入鄉隨俗) 編碼習慣: 團隊合作: 團隊配置管理軟體: (TFS SVN) 第一章 更改身份驗證模式:伺服器 屬性 安全性 Master: 記錄所有系統信息 Model: 模板 Msdb: 自動備份 Tempdb: 臨時資 ...
  • 昨晚添加完索引之後, 查詢整表的時候拋出Lock wait timeout exceeded; try restarting transaction, 嚇死小白的我, 為什麼條件查詢可以, 整表查不了, 老大說是不是我添加錯了..., 後來找到解決辦法, 原來是死鎖了查看資料庫的隔離級別select... ...
  • 關於時間序列的計算是一個很(也)常(很)用(大)的topic,而且應用範圍很廣,譬如計算同比,環比,根據時間序列預測某個值。必不可少的就是在模型裡面有一個日期的維度。 ...
  • 一、redis配置 1、啟動redis 這裡使用的是windows版本的redis,直接解壓使用就可以了。 註意1: 當運行redis-server時需要註意的是不同的電腦因為配置問題可能無法雙擊啟動。所以需要通過命令提示符的方式進行啟動 這個界面表示redis已經啟動,預設配置 redis.hos ...
  • 本位出處:http://www.cnblogs.com/wy123/p/7211742.html (保留出處並非什麼原創作品權利,本人拙作還遠遠達不到,僅僅是為了鏈接到原文,因為後續對可能存在的一些錯誤進行修正或補充,無他) MySQL中的InnoDB引擎表索引類型有一下幾種(以下所說的索引,沒有特 ...
  • 基本知識方便操作 //創建資料庫 create database databasename; //進入資料庫 use databasename; //顯示表名(可以通過這個語句查看表數量,從而判斷是否導入錯誤) show tables; //在進入資料庫之前顯示所有表 show tables fro ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...