文章目錄
集羣簡介
什麼是集羣
- 一組通過高速網絡互聯的計算機,並以單一系統的模式加以管理
- 將很多服務器集中起來一起,提供同一種服務,在客戶端看來就像是隻有一個服務器
- 可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益
- 任務調度是集羣系統中的核心技術
集羣目的
- 提高性能
–如計算密集型應用,如:天氣預報、核試驗模擬 - 降低成本
–相對百萬美元級的超級計算機,價格便宜 - 提高可擴展性
–只要增加集羣節點即可 - 增強可靠性
–多個節點完成相同功能,避免單點失敗
集羣分類
- 高性能計算集羣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