目錄
一. 集群概述
1.1 集群的定義
1.2?集群的分類
1.??高可用集群 HA
2.?高性能運輸群集 HPC
3.負載均衡群集 LB
4.??分布式存儲集群
二. LVS概述
2.1 LVS的定義
2.2 LVS的工作原理
2.3 LVS 的三種工作模式
2.4 LVS 三種工作模式的對比
2.5?LVS 調度算法
1. 靜態方法
2. 動態方法
三.?LVS集群創建與管理
3.1 LVS集群類型中的術語
3.2?ipvsadm工具
3.2.1?ipvsadm工具選項
3.2.2 常見操作
1.?列出規則
2. 建立集群
3. 添加后端服務器?
4. 刪除后端服務器?
5. 刪除集群
四. DR模式部署
4.1 配置負載調度器
4.2 配置節點服務器
五. keepalive概述
5.1 vrrp技術
5.1.2 vrrp相關術語
5.2?keepalive的定義
5.3 keepalive的功能
5.4 keepalive架構
六. 安裝keepalive
6.1 centos7-yum安裝
6.2 Ubuntu-apt安裝
6.3 centos7-編譯安裝
6.4 Ubuntu-編譯安裝
七.?keepalived的相關文件
7.1?配置組成
7.1.1 全局配置
7.1.2?配置虛擬路由器
一. 集群概述
1.1 集群的定義
集群(Cluster)?是指將多臺計算機或服務器通過某種方式連接在一起,作為一個整體來提供服務或執行任務的技術架構。
1.2?集群的分類
1.?高可用集群 HA
目標:確保服務的高可用性,減少停機時間。
實現方式:通過冗余節點和故障轉移機制,當主節點故障時,備用節點立即接管服務。
例如:Keepalived、heartbeat
2.?高性能運輸群集 HPC
目標:通過并行計算解決復雜的科學計算或數據處理任務
實現方式:將任務分解為多個子任務,分配到多個節點并行執行。
3.負載均衡群集 LB
目標:將請求或任務均勻分配到多個節點,提高系統性能和資源利用率。
實現方式:通過負載均衡器(如LVS、Nginx、HAProxy)將請求分發到后端服務器。
例如:LVS、Nginx
4.??分布式存儲集群
目標:提供高可用、可擴展的存儲服務。
實現方式:將數據分布到多個節點存儲,并通過冗余機制確保數據安全。
二. LVS概述
2.1 LVS的定義
LVS(Linux Virtual Server)?是一種基于 Linux 內核的高性能、高可用的負載均衡技術,用于將客戶端請求分發到多個后端服務器節點,以提高系統的處理能力和可用性。
2.2 LVS的工作原理
-
客戶端發起請求:
- 客戶端通過訪問 LVS 的虛擬 IP(VIP)發起請求。
-
負載均衡器接收請求:
- 負載均衡器接收客戶端的請求,并根據預定義的調度算法選擇一個后端服務器節點。
-
請求分發:
- 負載均衡器將請求轉發到選定的后端服務器節點。
- 轉發方式取決于 LVS 的工作模式(NAT、DR 或 TUN)。
-
后端服務器處理請求:
- 后端服務器節點處理請求并生成響應。
-
響應返回客戶端:
- 后端服務器將響應返回給客戶端。
- 返回方式取決于 LVS 的工作模式(NAT、DR 或 TUN)。
2.3 LVS 的三種工作模式
1.?NAT 模式
-
工作原理:
-
客戶端發送請求到 LVS 的虛擬 IP(VIP)。
-
負載均衡器將請求的源 IP 地址修改為自身的 IP 地址,并將請求轉發到后端服務器。
-
后端服務器處理請求,并將響應返回給負載均衡器。
-
負載均衡器將響應的目標 IP 地址修改為客戶端的 IP 地址,并將響應返回給客戶端
-
2.?DR 模式
-
工作原理:
-
客戶端發送請求到 LVS 的虛擬 IP(VIP)。
-
負載均衡器將請求直接轉發到后端服務器,不修改 IP 地址。
-
后端服務器處理請求,并直接將響應返回給客戶端。
-
?3.?TUN 模式
- 工作原理:
- 客戶端發送請求到 LVS 的虛擬 IP(VIP)。
- 負載均衡器通過 IP 隧道將請求封裝并轉發到后端服務器。
- 后端服務器解封裝請求,處理請求,并直接將響應返回給客戶端。
2.4 LVS 三種工作模式的對比
NAT | TUN | DR | |
優點 | 端口轉換 | WAN | 性能最好 |
缺點 | 性能瓶頸 | 服務器支持隧道模式 | 不支持跨網段 |
真實服務器要求 | any | Tunneling | Non-arp device |
支持網絡 | private(私網) | LAN/WAN(私網/公網) | LAN(私網) |
真實服務器數量 | low (10~20) | High (100) | High (100) |
真實服務器網關 | lvs內網地址 | Own router(網工定義) | Own router(網工定義) |
2.5?LVS 調度算法
分為兩種:
靜態方法: 不管后端真實服務器的 狀態,根據自身 算法進行調度
動態方法: 會根據后端服務器的狀態來進行調度
1. 靜態方法
輪詢(RR):將請求依次分發到每個后端服務器節點。
加權輪詢(WRR):根據后端服務器的權重分發請求,權重越高,分配的請求越多
源地址哈希(SH):根據客戶端的源 IP 地址哈希值分發請求,確保同一客戶端的請求被分發到同一臺后端服務器。
目標地址哈希(DH):通過讓后端服務器直接響應客戶端請求來優化性能和簡化配置。
2. 動態方法
最小連接數(LC):將請求分發到當前連接數最少的后端服務器節點。
加權最小連接數(WLC):根據后端服務器的權重和連接數分發請求。
預期延遲最短(SED):選擇預期延遲最短的后端服務器來處理請求。
空閑(NQ):優先選擇?空閑?的后端服務器,如果沒有空閑服務器,則退化為 SED 算法。
基于地址的最小連接數(LBLC):基于?請求的源地址?和?后端服務器的活動連接數?進行分發,確保同一客戶端的請求被分發到同一臺后端服務器。
三.?LVS集群創建與管理
3.1 LVS集群類型中的術語
-
VS(代理服務器):Virtual Server,Director Server(DS), Dispatcher(調度器),Load Balancer(lvs服務器) 代理服務器
-
RS(真實服務器):Real Server(lvs), upstream server(nginx), backend server(haproxy)(真實服務器)
-
CIP:Client IP(客戶機IP) 客戶機的ip
-
VIP:Virtual serve IP VS外網的IP 代理服務器的 外網ip
-
DIP:Director IP VS內網的IP 代理服務器的 內網ip
-
RIP:Real server IP 真實服務器的 ip地址
3.2?ipvsadm工具
LVS集群通過ipvsadm工具創建管理
3.2.1?ipvsadm工具選項
-A: 添加虛擬服務器
-D: 刪除整個虛擬服務器
-s: 指定負載調度算法(輪詢: rr、加權輪詢: wrr、最少連接: lc、加權最少連接: wlc 默認的 )
-a: 添加真實服務器(節點服務器)
-d: 刪除某一個節點
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
-m: 表示使用NAT群集模式
-g: 表示使用DR模式
-i: 表示使用TUN模式
-w: 設置權重(權重為0時表示暫停節點)
-p 60: 表示保持長連接60秒
-l: 列表查看 LVS虛擬服務器(默認為查看所有)
-n: 以數字形式顯示地址、端口等信息,常與"-l“選項組合使用。ipvsadm -ln
3.2.2 常見操作
1.?列出規則
ipvsadm -L
2. 建立集群
格式:
ipvsadm -A -t <虛擬IP>:<端口> -s <調度算法>例子:
ipvsadm -A -t 192.168.91.188:80 -s rr
3. 添加后端服務器?
格式:
ipvsadm -a -t <虛擬IP>:<端口> -r <后端服務器IP>:<端口> -g -w <權重>例子:
ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.100:80 -g
4. 刪除后端服務器?
格式:
ipvsadm -d -t <虛擬IP>:<端口> -r <后端服務器IP>:<端口>例子:
ipvsadm -d -t 192.168.91.188:80 -r 192.168.91.100:80
5. 刪除集群
格式:
ipvsadm -D -t <虛擬IP>:<端口>例子:
ipvsadm -D -t 192.168.91.188:80
四. DR模式部署
4.1 配置負載調度器
ubuntu 調度器配置1.更新系統并安裝 ipvsadm
apt update
apt install ipvsadm -y2.添加虛擬IP(VIP)
ifconfig ens33:0 192.168.52.188/243.配置LVS規則
添加虛擬服務器(VIP)并設置調度算法為輪詢(rr):
ipvsadm -A -t 192.168.52.188:80 -s rr
添加真實服務器(RIP):
ipvsadm -a -t 192.168.52.188:80 -r 192.168.52.100:80 -g
ipvsadm -a -t 192.168.52.188:80 -r 192.168.52.101:80 -g4.修改內核參數:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0使配置生效:
sudo sysctl -p
4.2 配置節點服務器
centos7-13真實服務器1配置1.安裝Nginx:
sudo yum install epel-release -y
sudo yum install nginx -y
sudo systemctl start nginx2.設置測試頁面
echo "7-13" > /usr/share/nginx/html/index.html3.修改內核參數
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 24.添加虛擬IP(VIP)
ifconfig ens33:0 192.168.52.188/24
centos7-14 真實服務器2配置yum install epel-release -y
yum install nginx -y
systemctl start nginx"7-14" > /usr/share/nginx/html/index.htmlvim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2sysctl -pifconfig ens33:0 192.168.52.188/24
測試
在集群外的新機器上測試:
curl 192.168.52.188
多次執行 curl 命令,觀察返回的內容是否在 7-13 和 7-14 之間輪換。
五. keepalive概述
5.1 vrrp技術
VRRP?是一種用于實現?路由器高可用性的網絡協議。它通過將多個路由器組成一個虛擬路由器組,并分配一個虛擬 IP 地址(VIP),確保在主路由器故障時,備用路由器能夠接管流量,從而實現網絡服務的連續性。
5.1.2 vrrp相關術語
虛擬路由器(Virtual Router):由多個物理路由器組成的一個邏輯路由器。
虛擬 IP 地址(VIP):虛擬路由器對外提供的 IP 地址,客戶端通過該 IP 地址訪問網絡服務。
主路由器(Master Router):在虛擬路由器組中,負責轉發流量的路由器,持有虛擬 IP 地址。
備用路由器(Backup Router):在主路由器故障時,接管流量并成為新的主路由器,平時處于監聽狀態,不轉發流量。
優先級(Priority):用于選舉主路由器的參數,優先級越高,越有可能成為主路由器。
5.2?keepalive的定義
Keepalived?是一個用于實現?高可用性和負載均衡的開源軟件。它基于?VRRP(Virtual Router Redundancy Protocol)?協議,通過虛擬 IP(VIP)的切換來確保服務的連續性,同時可以與?LVS(Linux Virtual Server)?集成,提供負載均衡功能。
5.3 keepalive的功能
-
基于vrrp協議完成地址流動
-
為vip地址所在的節點生成ipvs規則(在配置文件中預先定義)
-
為ipvs集群的各RS做健康狀態檢測
-
基于腳本調用接口完成腳本中定義的功能,進而影響集群事務,以此支持nginx、haproxy等服務
5.4 keepalive架構
-
vrrp stack:VIP消息通告 虛擬ip
-
checkers:監測real server(簡單來說 就是監控后端真實服務器的服務)是否存活
-
system call:實現 vrrp 協議狀態轉換時調用腳本的功能
-
SMTP:郵件組件(報警郵件)
-
IPVS wrapper:生成IPVS規則(直接生成ipvsadm)
-
Netlink Reflector:監控網絡接口狀態變化
-
WatchDog:監控進程(整個架構是否有問題)
六. 安裝keepalive
6.1 centos7-yum安裝
yum install keepalived -yvim /etc/keepalived/keepalived.conf#修改 interface eth0 為
interface ens33 systemctl start keepalived.servicesystemctl status keepalived.service
6.2 Ubuntu-apt安裝
apt updateapt install keepalived -ycp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.confvim /etc/keepalived/keepalived.conf#修改interface eth0為
interface ens33systemctl start keepalivedsystemctl status keepalived
6.3 centos7-編譯安裝
yum install gcc curl openssl-devel libnl3-devel net-snmp-devel -y
# 安裝依賴包環境https://keepalived.org/download.html
# 官網下載安裝包mkdir -p /data/cd /data/wget https://keepalived.org/software/keepalived-2.2.2.tar.gztar xf keepalived-2.2.2.tar.gzcd keepalived-2.2.2/./configure --prefix=/usr/local/keepalivedmake && make install#編譯好后起不來沒有配置文件/etc/keepalived/keepalived.confmkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confsed -i 's/eth0/ens33/' /etc/keepalived/keepalived.confsystemctl start keepalivedsystemctl status keepalived
6.4 Ubuntu-編譯安裝
ubuntu盡可能安裝比較新的keepalive安裝包
cd /optapt update && apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-devhttps://keepalived.org/download.html
# 官網下載安裝包wget https://keepalived.org/software/keepalived-2.3.3.tar.gztar xf keepalived-2.3.3.tar.gzcd keepalived-2.3.3/./configure --prefix=/usr/local/keepalivedmake -j2 && make installmkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.confvim /etc/keepalived/keepalived.conf#interface ent0改為
interface ens33systemctl start keepalivedsystemctl status keepalived
七.?keepalived的相關文件
-
軟件包名:keepalived
-
主程序文件:/usr/sbin/keepalived
-
主配置文件:/etc/keepalived/keepalived.conf
7.1?配置組成
7.1.1 全局配置
global_defs {notification_email {root@localhost#keepalived 發生故障切換時郵件發送的目標郵箱,可以按行區分寫多個root@localhost360601212@qq.com
}notification_email_from keepalived@localhost ?#發郵件的地址smtp_server 127.0.0.1 ? ?
#郵件服務器地址smtp_connect_timeout 30 ?
#郵件服務器連接timeoutrouter_id LVS01
#每個keepalived主機唯一標識,建議使用當前主機名,但多節點重名不影響vrrp_skip_check_adv_addr ?
#對所有通告報文都檢查,會比較消耗性能,啟用此配置后,如果收到的通告報文和上一個報文是同一個路由器,則跳過檢查,默認值為全檢查vrrp_strict
#嚴格遵守VRRP協議,啟用此項后以下狀況將無法啟動服務:1.無VIP地址 2.配置了單播鄰居 3.在VRRP版本2中有IPv6地址,開啟動此項并且沒有配置vrrp_iptables時會自動開啟iptables防火墻規則,默認導致VIP無法訪問,建議不加此項配置。vrrp_garp_interval 0
#gratuitous ARP messages 免費ARP報文發送延遲,0表示不延遲vrrp_gna_interval 0
#unsolicited NA messages (不請自來)消息發送延遲vrrp_mcast_group4 225.0.0.18
#指定組播IP地址范圍:224.0.0.0到239.255.255.255,默認值:224.0.0.18 vrrp_iptables ? ? ? ?
#此項和vrrp_strict同時開啟時,則不會添加防火墻規則,如果無配置vrrp_strict項,則無需啟用此項配置
}
7.1.2?配置虛擬路由器
vrrp_instance <STRING> {
#<String>為vrrp的實例名,一般為業務名稱配置參數......}#配置參數:
state MASTER|BACKUP
#當前節點在此虛擬路由器上的初始狀態,狀態為MASTER或者BACKUPinterface IFACE_NAME
#綁定為當前虛擬路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一個網卡virtual_router_id VRID
#每個虛擬路由器惟一標識,范圍:0-255,每個虛擬路由器此值必須唯一,否則服務無法啟動,同屬一個虛擬路由器的多個keepalived節點必須相同,務必要確認在同一網絡中此值必須唯一priority 100
#當前物理節點在此虛擬路由器的優先級,范圍:1-254,值越大優先級越高,每個keepalived主機節點此值不同advert_int 1
#vrrp通告的時間間隔,默認1sauthentication {
#認證機制auth_type AH|PASS ?
#AH為IPSEC認證(不推薦),PASS為簡單密碼(建議使用)auth_pass <PASSWORD>
#預共享密鑰,僅前8位有效,同一個虛擬路由器的多個keepalived節點必須一樣
}include /etc/keealived/conf.d/*.conf
virtual_ipaddress {
#虛擬IP,生產環境可能指定上百個IP地址<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.100
#指定VIP,不指定網卡,默認為,注意:不指定/prefix,默認為/32192.168.200.101/24 dev eth1 ?
#指定VIP的網卡,建議和interface指令指定的崗卡不在一個網卡192.168.200.102/24 dev eth2 label eth2:1
#指定VIP的網卡label ifconfig eth2:1 192.168.200.102/24
}track_interface {
#配置監控網絡接口,一旦出現故障,則轉為FAULT狀態實現地址轉移
eth0
eth1…
}