cluster:LVS

集羣簡介

什麼是集羣

  • 一組通過高速網絡互聯的計算機,並以單一系統的模式加以管理
  • 將很多服務器集中起來一起,提供同一種服務,在客戶端看來就像是隻有一個服務器
  • 可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益
  • 任務調度是集羣系統中的核心技術

集羣目的

  • 提高性能
    –如計算密集型應用,如:天氣預報、核試驗模擬
  • 降低成本
    –相對百萬美元級的超級計算機,價格便宜
  • 提高可擴展性
    –只要增加集羣節點即可
  • 增強可靠性
    –多個節點完成相同功能,避免單點失敗

集羣分類

  • 高性能計算集羣HPC
    –通過以集羣開發的並行應用程序,解決複雜的科學問題
  • 負載均衡(LB)集羣
    –客戶端負載在計算機集羣中儘可能平均分攤
  • 高可用(HA)集羣
    –避免單點故障,當一個系統發生故障時,可以快速遷移

LVS概述

LVS項目介紹

  • Linux虛擬服務器(LVS)是章文嵩在國防科技大學就讀博士期間創建的
  • LVS可以實現高可用、可伸縮的web、mail、cache和media等網絡服務
  • 最終目標是利用Linux操作系統和LVS集羣軟件實現一個高可用、高性能、低成本的服務器應用集羣

LVS集羣組成

  • 前端:負載均衡層
    –由一臺或多臺負載調度器構成
  • 中間:服務器羣組層
    –有一組實際運行應用服務的服務器組成
  • 低端:數據共享存儲層
    –提供共享存儲空間的存儲區域

LVS術語

  • Director Server:調度服務器
    –將負載分發到Real Server的服務器
  • Real Server:真實服務器
    –真實提供應用服務的服務器
  • VIP:虛擬IP地址
    –公佈給用戶訪問的虛擬IP地址
  • RIP:真實IP地址
    –集羣節點上使用的IP地址
  • DIP:調度器連接節點服務器的IP地址

LVS工作模式

在這裏插入圖片描述

  • VS/NAT
    –通過網絡地址轉換(NAT)實現的虛擬服務器
    –大併發訪問時,調度器的性能成爲瓶頸
  • VS/DR
    –直接使用路由技術實現虛擬服務器
    –節點服務器需要配置VIP,注意MAC地址廣播
  • VS/TUN
    –通過隧道方式實現虛擬服務器

負載均衡調度算法

  • LVS目前實現了10種調度算法
  • 常用調度算法有4種
    –輪詢(Round Robin)
    –加權輪詢(Weighted Round Robin)
    –最少連接(Least Connections)
    –加權最少連接(Weighted Least Connections)
    還有源地址散列(Source Hashing)、目標地址散列(Destination Hashing)、基於局部性的最少鏈接、帶複製的基於局部性最少鏈接、最短的期望的延遲、最少隊列調度等等,詳情請百度.

ipvsadm使用

  • 安裝ipvsadm
    yum -y install ipvsadm
    ipvsadm -v#看版本信息
  • ipvsadm命令
命令選項 含義
ipvsadm -A 添加虛擬服務器
ipvsadm -E 修改虛擬服務器
ipvsadm -D 刪除虛擬服務器
ipvsadm -C 清空所有
ipvsadm -a 添加真實服務器
ipvsadm -e 修改真實服務器
ipvsadm -d 刪除真實服務器
ipvsadm -L 查看集羣算法
-s [rr/wrr/lc/wlc/sh] 指定集羣算法
ipvsadm -A -t/u 192.168.4.5:80 -s[算法] 添加虛擬服務器,協議爲tcp(-t)或者udp(-u)
ipvsadm -E -t/u 192.168.4.5:80 -s[算法] 修改虛擬服務器,協議爲tcp或者udp
ipvsadm -D -t/u 192.168.4.5:80 刪除虛擬服務器,協議爲tcp或者udp
ipvsadm -C 清空所有
ipvsadm -a -t/u 192.168.4.5:80 -r 192.168.2.100 [-g/i/m] 添加真實服務器-g(DR模式)-i(隧道模式)-m(NAT模式)
ipvsadm -e -t/u 192.168.4.5:80 -r 192.168.2.100 [-g/i/m] 修改真實服務器
ipvsadm -d -t/u 192.168.4.5:80 -r 192.168.2.100 刪除真實服務器
ipvsadm -Ln 查看LVS規則表
  • 永久保存所有規則
    ipvsadm-save -n > /etc/sysconfig/ipvsadm

LVS-NAT集羣

在這裏插入圖片描述

操作流程

  • Real Server:
    –配置WEB服務器
  • Director Server:
    –在上安裝並啓用ipvsadm
    –創建虛擬服務器、向虛擬服務器中加入節點
  • client:
    –連接虛擬服務器測試

安裝前準備

  • LVS的IP負載均衡技術是通過IPVS模塊實現的
  • IPVS模塊已成爲Linux組成部分

配置基本環境

(web1和web2配置httpd參看如下)

yum -y install httpd
echo "192.168.2.100" > /var/www/html/index.html

systemctl restart httpd

常見問題:如果httpd服務啓動啓動的比較慢?
解決方法:可以修改/etc/httpd/conf/httpd.conf文件,
將ServerName www.example.com:80這行的#註釋符刪除即可。

部署LVS-NAT模式調度器

  • 確認調度器的路由轉發功能(如果已經開啓,可以忽略)
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
1
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf  #修改配置文件,設置永久規則
  • 創建集羣服務器
yum -y install ipvsadm
ipvsadm -A -t 192.168.4.5:80 -s wrr
  • 添加真實服務器
ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m
ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 1 -m
  • 查看規則列表,並保存規則
ipvsadm -Ln
ipvsadm-save -n > /etc/sysconfig/ipvsadm
  • 客戶端測試
    客戶端使用curl命令反覆連接http://192.168.4.5,查看訪問的頁面是否會輪詢到不同的後端真實服務器。

LVS-DR集羣

在這裏插入圖片描述

操作流程

  • Real Server:
    –配置WEB服務器
    –配置輔助IP地址、調整內核參數
  • Director Server:
    –在上安裝並啓用ipvsadm
    –配置輔助IP地址
    –創建虛擬服務器、向虛擬服務器中加入節點
  • client:
    –連接虛擬服務器測試

設置Proxy服務器的VIP和DIP

注意:爲了防止衝突,VIP必須要配置在網卡的虛擬接口!!!

cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0{,:0}
vim ifcfg-eth0:0
TYPE=Ethernet  #網卡類型爲:以太網卡
BOOTPROTO=none #none手動配置IP,或者dhcp自動配置IP
NAME=eth0:0    #網卡名稱
DEVICE=eth0:0  #設備名稱
ONBOOT=yes     #開機時是否自動激活該網卡
IPADDR=192.168.4.15#IP地址
PREFIX=24      #子網掩碼
---------------------------------
systemctl restart network
ifconfig

常見問題:RHEL7和Centos7系統中有兩個管理網絡的服務,有可能衝突?
解決方法:關閉NetworkManager服務後重啓network即可。

設置Web1服務器網絡參數

nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
nmcli connection up eth0

接下來給web1配置VIP地址。
注意:這裏的子網掩碼必須是32(也就是全255),網絡地址與IP地址一樣,廣播地址與IP地址也一樣。

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo{,:0}
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
NETWORK=192.168.4.15
BROADCAST=192.168.4.15
ONBOOT=yes
NAME=lo:0

防止地址衝突的問題:
這裏因爲web1也配置與調度器一樣的VIP地址,默認肯定會出現地址衝突;
sysctl.conf文件寫入這下面四行的主要目的就是訪問192.168.4.15的數據包,只有調度器會響應,其他主機都不做任何響應,這樣防止地址衝突的問題。

vim /etc/sysctl.conf
#手動寫入如下4行內容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
#當有arp廣播問誰是192.168.4.15時,本機忽略該ARP廣播,不做任何迴應
#本機不要向外宣告自己的lo迴環地址是192.168.4.15
sysctl -p 
#用戶只需要編輯/etc/sysctl.conf文件,即可手工或自動執行由sysctl控制的功能,-p從指定的文件加載系統參數,如不指定即從/etc/sysctl.conf中加載

內核參數說明

  • arp_ignore(定義回覆ARP廣播的方式)
    –0(默認)代表迴應所有本地地址廣播,本地地址可以配置在任意網絡藉口
    –1代表只回應配置入站網卡接口上的任意IP地址的ARP廣播
  • rp_announce(定義回覆ARP廣播的方式)
    –0(默認):使用配置在任意網卡接口上的本地IP地址
    –2:對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.首要是選擇所有的網絡接口的子網中外出訪問子網中包括該目標IP地址的本地地址.如果沒有適合的地址被發現,將選擇當前的發送網絡接口或其他的有可能接受到該ARP迴應的網絡接口來進行發送

(

ARP防火牆

  • 使用ARP防火牆也可以禁止對VIP的ARP請求
yum -y install arptables_jf
arptables -A IN -d <virtual_ip> -j DROP
arptables -A OUT -s <virtual_ip> -j mangle\
--mangle-ip-s <real_ip>

)
重啓網絡服務,設置防火牆與SELinux

systemctl restart network
ifconfig

常見錯誤:如果重啓網絡後未正確配置lo:0,有可能是NetworkManager和network服務有衝突,關閉NetworkManager後重啓network即可。(非必須的操作)

systemctl stop NetworkManager
systemctl restart network
  • Web2服務器設置同上web1

proxy調度器安裝軟件並部署LVS-DR模式調度器

  • 安裝軟件及創建新的集羣服務器規則
yum -y install ipvsadm
ipvsadm -C   #清空所有規則
ipvsadm -A -t 192.168.4.15:80 -s wrr
  • 添加真實服務器(-g參數設置LVS工作模式爲DR模式,-w設置權重)
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
 ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1
  • 查看規則列表,並保存規則
ipvsadm -Ln
TCP  192.168.4.15:80 wrr
  -> 192.168.4.100:80             Route   1      0          0         
  -> 192.168.4.200:80             Route   2      0          0
ipvsadm-save -n > /etc/sysconfig/ipvsadm 

客戶端測試

客戶端使用curl命令反覆連接http://192.168.4.15,查看訪問的頁面是否會輪詢到不同的後端真實服務器。

擴展:LVS動態檢測腳本

默認LVS不帶健康檢查功能,需要自己手動編寫動態檢測腳本,實現該功能:(參考腳本如下,僅供參考)

vim check.sh
#!/bin/bash
VIP=192.168.4.15:80
RIP1=192.168.4.100
RIP2=192.168.4.200
while :
do
   for IP in $RIP1 $RIP2
   do
           curl -s http://$IP &>/dev/vnull
if [ $? -eq 0 ];then
            ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IP
        else
             ipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IP
        fi
   done
sleep 1
done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章