1. 程式人生 > >Linux叢集儲存——day2——叢集LB負載均衡 LVS/NAT、LVS/DR 模式

Linux叢集儲存——day2——叢集LB負載均衡 LVS/NAT、LVS/DR 模式

叢集:

   叢集 目的: 提高效能、降低成本、提高可擴充套件性、增強可靠性

HPC 高效能運算叢集 反覆進行一個計算,一般用於科研等需要精算的領域
LB 負載均衡叢集

多臺機器提供一個服務,一個訪問可以給後面多個伺服器中任意一個,實現平衡負載

用 LVS、HAproxy、nginx 等軟體實現

HA 高可用叢集

做備份,主伺服器出問題後,備用伺服器將會頂替上

用 Keepalived 等軟體實現

ext4/xfs   本地檔案系統
   只檢視本機的對磁碟的寫操作,不會檢視其他裝置對磁碟的操作

gtf   全域性檔案系統
   需要額外操作,可以檢視其他裝置的磁碟操作


iscsi和nfs的區別
   iscsi 適合HA(高可用叢集),不適合LB(負載均衡叢集)
     而適合做LB的,是nfs共享

  主要原因是:iscsi共享的磁碟一般都是格式化為ext4或者xfs等本地檔案型別,致使多個客戶端掛載後,進行新增或者修改檔案,客戶端之間沒有關聯,如果要進行同步需要解除掛載
  而nfs可以實時同步各個客戶端建立修改的的所有內容,可以理解為每個客戶端都是以nfsnobody的身份遠端服務端,然後對共享的資料夾進行操作

   特例問題:(iscsi使用的是正常的本地檔案系統格式化的)
     1. 如果對同一個檔案進行操作,會出現什麼情況
         iscis: 每個伺服器修改的檔案互相不影響,也是說,C1客戶端修改了w檔案,C2客戶端的w檔案並不會有改動,那麼也就說C1和C2同時修改w檔案,兩者沒有任何衝突,可以理解為修改的是兩個不同的檔案
         NFS: 如果同時修改,先進入文件的沒有問題,後進入文件的客戶端會vim出現一個提示介面,告訴你該檔案正在被改動
     2. 對於iscsi使用相同的iqn和不同的iqn都可以實現不會有影響
     3. 對於iscsi,如果想實現檔案同步,只需要 解除掛載、登出iscsi,再重新登陸掛載 即可,其資料是覆蓋的,不過可能出現bug,建議登出後過一點時間再登陸,建議不要這麼操作。


nfs共享目錄

    具體檢視我寫的關於nfs服務的blog
    不過還是要強調一個點,如果想製作支援客戶端讀寫操作的nfs共享,不單單需要在配置檔案中寫上rw
    而且必須給目錄賦權,客戶端通過nfs對共享目錄操作的時候,使用服務端的使用者是nfsnobody
    所以我們可以用: setfacl  -m  -u:nfsnobody:rwx  共享的目錄

Linux伺服器的不同網段通訊
   1. 開啟伺服器的路由轉發功能
     sysctl -a 檢視所有核心設定的資訊

      修改核心配置檔案/etc/sysctl.conf 

net.ipv4.ip_forward = 1

      然後用命令 sysctl -p ,讓核心讀取配置檔案並且顯示出來

   2. 閘道器設定
      檢視裝置的預設閘道器 route -n

      臨時配置閘道器:  route add default gw 閘道器裝置IP
          刪除閘道器:  route del default gw 閘道器裝置IP

      永久修改閘道器資訊,修改配置檔案

   網路間通訊,同網段在網路中可以直接通訊,不同網段要經過閘道器才可以連通,如果要相互通訊需要兩個裝置都設定好閘道器,具體網路知識參考我關於網路的總結


負載均衡 LB 的常用術語
Director Server 排程伺服器,分發伺服器 連線客戶端和真實伺服器,按照配置將請求分發給多個伺服器
Real Server 真實伺服器 提供相應服務
VIP 虛擬IP地址 配置子排程伺服器的一個網絡卡上的一個IP,用於和公網的客戶端裝置連線的網絡卡,客戶端訪問的IP
RIP 真實IP地址 真實伺服器的內網IP地址
DIP 排程器IP 配置子排程伺服器的一個網絡卡上的一個IP,用於和內網的真實伺服器,真實伺服器連線的IP
LB的排程演算法:
rr 輪詢(Round Robin) 將請求平均分發到每個真實伺服器中
wrr 加權輪詢(Weighted Round Robin) 將請求按照權值的多少進行分發,即一個權值為3,一個權值為1,分發的時候4個請求,就會一個分發到3個,一個分發到1個
lc 最少連線(Least Connections)
wlc 加權最少連線(Weighted Least Connections)

LB的工作模式:
  NAT:通過網路的地址轉換技術來實現,LVS伺服器同時完成路由功能,所有資料的傳遞都是經過LVS
    主要用於: 伺服器的ip都是私網地址,LVS伺服器有外網IP和私網IP
    弊端: LVS伺服器壓力太大,其效能直接決定了整個服務的效能,一旦LVS伺服器出現故障全部服務全部崩潰
    優點: 只需要一個公網IP,適用於小規模叢集
      客戶端發出請求
          客戶端 ---外網---> LVS分發伺服器(具有路由功能) ---內網---> 伺服器 ---內網---> 後端儲存裝置
      服務端響應
          客戶端 <---外網--- LVS分發伺服器(具有路由功能) <---內網--- 伺服器 <---內網--- 後端儲存裝置      

  DR:通過路由技術實現釋出,返回資料的時候不經過LVS伺服器,在請求後客戶端和服務端建立1對1連線,進行資料傳遞(常用)
    主要用於: 伺服器的ip都有一個公網地址 ,LVS也有公網IP,這時候所有裝置都能直接連線外網
    優點: 綜合性能高,可拓展性強,LVS伺服器的壓力也不會太大
    不足: 每個伺服器都需要一個公網IP,費用較高
      客戶端發出請求
          客戶端 ---外網---> 路由 ---內網---> LVS分發伺服器(不需要路由功能) ---內網---> 伺服器 ---內網---> 後端儲存裝置
      服務端響應
          客戶端 <---外網--- 路由 <---內網--- 伺服器 <---內網--- 後端儲存裝置   

  TUN:通過隧道實現(較少),
    主要用於:分發伺服器和真實伺服器不在同一個網段
      客戶端發出請求
          客戶端 ---外網---> 路由 ---外網---> LVS分發伺服器(不需要路由功能) ---外網---> 路由 ---內網---> 伺服器 ---內網---> 後端儲存裝置
      服務端響應
          客戶端 <---外網--- 路由 <---內網--- 伺服器 <---內網--- 後端儲存裝置

建立配置LB叢集ipvsad命令:

    裝包 yum install -y ipvsadm
    配置檔案:/etc/sysconfig/ipvsadm-config
    儲存檔案:/etc/sysconfig/ipvsadm
    具體LVS配置使用命令ipvsadm

直接加在命令後面即可實現具體功能
-Ln 檢視ipvs的配置資訊
-Ln --stats 檢視年ipvs伺服器的資料包分發情況
-Sn 儲存所有配置
-C 清除所有配置
-Z 清除資料包分發資料的記錄資訊
用於指定該命令要實現什麼功能
-A 新增LVS服務
-D 刪除LVS服務
-E 修改LVS服務的設定資訊
-a 新增真實伺服器
-d 刪除虛擬伺服器
用於指定各個模組的具體作用
-t 設定VIP 後面跟著lvs服務中連線客戶端的虛擬ip和埠號
-s 指定負載排程演算法 後面跟著各個演算法簡稱
-r 指定真實伺服器的地址 後面跟著一個具體的伺服器的IP和埠號
-w 設定許可權 後面跟著具體許可權值,不寫預設為1
-m 使用NAT模式
-g 使用DR模式 不寫預設為DR模式
-i 使用TUN模式

常用功能:

   檢視當前配置資訊

ipvsadm  -Ln

   建立一個LVS服務(其中埠號是根據要實現的服務來填寫的,如80是http服務)

ipvsadm  -A  -t  連線客戶端的VIP:埠號  -s  演算法
ipvsadm  -A  -t  201.11.55.10:80  -s  wrr

   刪除一個LVS服務

ipvsadm  -D  -t  連線客戶端的VIP:埠號  -s  演算法
ipvsadm  -D  -t  201.11.55.10:80  -s  wrr

    修改一個LVS服務

ipvsadm  -E  -t  連線客戶端的VIP:埠號  -s  演算法
ipvsadm  -E  -t  201.11.55.10:80  -s  lc

   給LVS服務,新增真實提供服務的伺服器

ipvsadm  -a  -t  連線客戶端的VIP:埠號  -r  真實伺服器的RIP -具體工作模組 -w  權重
ipvsadm  -a  -t  201.11.55.10:80  -r  172.25.0.10:80  -m
ipvsadm  -a  -t  201.11.55.10:80  -r  172.25.0.11:80  -m  -w  2

   修改某個LVS服務下的某個真實提供服務的伺服器的配置

ipvsadm  -e  -t  連線客戶端的VIP:埠號  -r  真實伺服器的RIP -具體工作模組 -w  權重
ipvsadm  -e  -t  201.11.55.10:80  -r  172.25.0.10:80  -m  -w  3

   刪除某個LVS服務下的某個真實提供服務的伺服器的配置

ipvsadm  -d  -t  連線客戶端的VIP:埠號  -r  真實伺服器的RIP
ipvsadm  -d  -t  201.11.55.10:80  -r  172.25.0.11:80

   儲存配置資訊(把資料儲存到儲存檔案中),重新啟動儲存配置

ipvsadm  -Sn > /etc/sysconfig/ipvsadm

    或者修改配置檔案/etc/sysconfig/ipvsadm-config,讓關閉ipvs的時候儲存

IPVS_SAVE_ON_STOP="yes"

       實時檢視ipvs的請求分發的資料包的資訊( -n 後面的數值是每隔多少秒重新整理資料)

watch -n 1 ipvsadm -Ln --stats

    不能啟動ipvsadm服務,檢視的時候這服務也是停止的,不過可以設定開機自啟,如果想開機自動開啟服務需要設定儲存後設置這命令 systemctl  enable  ipvsadm


LVS/NAT

   1. 配置分發伺服器,建立叢集
        建立一個LVS服務:ipvsadm -A -t VIP:80 -s rr
        給LVS服務,新增真實提供服務的伺服器:ipvsadm -a  -t VIP:80 -r RIP:80 -m
   2. 在真實的web伺服器上配置web網頁的http服務


LVS/DR叢集構建

   1. 配置分發伺服器,在其網絡卡上設定VIP
ifconfig  eth0:1  預備設定的VIP

   2. 建立叢集
        使用 ipvsadm 命令建立 具體和NAT一樣,不過新增真實伺服器的時候要把 -m 改稱 -g

   3. 修改真實伺服器的核心引數(只能用覆蓋的方法寫入,vim不可以修改,即使是root身份)

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 

     放入/etc/rc.local可以開機自動執行(需要賦予執行許可權,這檔案是一連結,原始檔是/etc/rc.d/rc.local,用ll檢視連結的時候許可權一定是777,不過這是假的,我們要檢視原始檔的許可權,不過賦權可以賦予給連結,實際賦予許可權給的是原始檔)
     也可以修改核心配置檔案/etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

   4. 在真實伺服器的lo網路迴路介面中繫結vip地址

ifconfig  lo:1  預備設定的VIP/32

   5. 執行web網頁的HTTP服務


DR的具體理論

   DR模型最大的特點:一個是VIP是配在DIP網絡卡上的一個虛擬網絡卡,同樣VIP也會配在真實伺服器的lo環路網絡卡上的一個虛擬網絡卡上,另一個是客戶端、排程器、伺服器都是在同一個網段上的。就這兩個特點進行分析

  第一個特點存在分析:
    為什麼這麼設計呢,因為整個原理存在一個最大的問題:客戶端傳送請求的資料包頭是 CIP ----> VIP ,他接受資料包的時候其包頭必須是 VIP ----> CIP ,所以如果資料包發給排程器VIP就要配在排程器上,可是如果想返回資料的時候不經過排程器,伺服器也就要擁有VIP,一個網段裡面怎麼能有多個IP地址,這是最大的難題,這就需要修改核心引數來實現。
    為了讓一個網段存在多個VIP,我們勢必要將幾個VIP設定在沒有網絡卡介面的lo網絡卡上,可是怎麼讓VIP在沒有介面的情況下通訊,這又是一個問題,而DR模型就是解決這兩個問題實現了LB負載均衡

    其理論思路是:客戶端訪問VIP,然後排程器把資料包按照自身策略分發給某個伺服器,然後該伺服器的lo迴環網絡卡上的VIP的虛擬網絡卡,通過RIP所在網絡卡以VIP身份傳送資料包。
    請求: CIP ----> VIP == DIP ---> RIP 
    返回資料: RIP代替VIP ----> CIP

    那麼第一個問題出現了,怎麼才能讓RIP所在網絡卡幫助lo以VIP身份傳送,這就要修改核心引數arp_announce
    第二個問題,怎麼讓一個網路中存在多個VIP,這就要修改核心引數arp_ignore

  第二個特點存在分析:
    為什麼必須全部都在一個網段裡面呢?在這裡有個網路方面的知識:兄弟網絡卡必須是同網段才算,而只有兄弟網絡卡才能相互幫助,進行代理收發等操作。所以上面的一個操作讓RIP所在網絡卡以VIP身份傳送資料包,必須要讓RIP和VIP是兄弟網。
    在公司中,做LVS/DR有兩種情況,第一個大公司有錢,每個伺服器給每個IP都配置一個公網IP,這樣服務釋出出去就可以有用;第二個正常公司,在公網和內網連結的路由器上配置一個NAT(這是路由功能,不是LVS/NAT),讓VIP對映成一個公網再傳遞出去,這樣價效比高,不過比第一種還是效能差點。


核心引數

    可以用命令檢視核心引數:sysctl -a
    核心配置檔案 /etc/sysctl.conf  把檢視到的核心引數中想修改的部分修改完寫進去
    用命令 sysctl -p 檢視在配置檔案中再加做的修改
    
    網路方面的核心引數的名字一般是  net.ipv4.conf.………………  
    也可以修改/proc/sys/net/ipv4/的具體檔案的內容不過只能用echo,而且只是臨時的配置

 arp_ignore    代表是否恢復ARP廣播    0    迴應雖有ARP廣播
        1    只回應入站網咖的IP的廣播
 arp_announce    0    網絡卡介面只以自己介面的IP傳送和接收包
        2    網絡卡可以幫兄弟網絡卡收發資料包,也就是讓一個網絡卡介面可以以別的同網段的網絡卡的IP進行收發資料包