小阿軒yx-LVS負載均衡群集
- 構建群集服務器—通過整合多臺服務器
- 使用 LVS 達到服務器的高可用和負載均衡
- 并以同一個 IP 地址對外提供相同的服務
LVS 群集應用基礎
- 群集稱呼來自英文單詞“Cluster”
- 在服務器領域則表示大量服務器的集合體,區分單個服務器
Cluster
- 表示一群、一串的意思
LVS 群集技術概述
- 根據企業環境不同
- 群集提供的功能也不同
- 采用的技術細節也不同
群集的三種類型
每種群集都至少包含兩臺服務器,對外表現為一個整體,只提供一個訪問入口
負載均衡群集(Load Balance Cluster)
- 提高應用系統的響應能力
- 盡可能處理更多的訪問請求
- 減少延遲為目標
- 獲得高并發、高負載的整體性能
高可用群集(High Availability Cluster)
- 提高應用系統的可靠性
- 盡可能地減少中斷時間為目標
- 確保服務的連續性
- 達到高可用(HA)的容錯效果
高性能運算群集(High Performance Computer Cluster)
- 提高應用系統的 CPU運算速度、擴展硬件資源和分析能力為目標
- 獲得相當于大型、超級計算機的高性能運算(HPC)能力
不同類型的群集在必要時可以合并,如高可用的負載均衡群集
負載均衡的分層結構
典型的負載均衡群集中包括三個層次的組件
- 前端至少有一個負載調度器(Load Balancer,或稱為 Director)負責響應并分發來自客戶機的訪問請求
- 后端由大量真實服務器(Real Server)構成服務器池(Server Poo1),提供實際的應用服務,整個群集的伸縮性通過增加、刪除服務器節點來完成
第一層,負載調度器
- 這是訪問整個群集系統的唯一入口
- 對外使用所有服務器共有的 VIP(Virtual IP,虛擬 IP)地址,也稱為群集 IP 地址
第二層,服務器池
- 群集所提供的應用服務(如HTTP、FTP)由服務器池承擔,每個節點具有獨立的RIP(Real IP,真實 IP)地址,只處理調度器分發過來的客戶機請求
- 當某個節點暫時失效時,負載調度器的容錯機制會將其隔離,等待錯誤排除以后再重新納入服務器池
第三層,共享存儲
- 為服務器池中的所有節點提供穩定、一致的文件存取服務,確保整個群集的統一性。
- Linux/UNIX 環境中,共享存儲可以使用 NAS 設備,或者提供 NFS(Network File System,網絡文件系統)共享服務的專用服務器
負載均衡的工作模式
- 群集的負載調度技術,可以基于 IP、端口、內容等進行分發
- 其中基于 IP 的負載調度是效率最高的
基于IP的負載均衡模式中,常見的三種工作模式有
- 地址轉換
- IP 隧道
- 直接路由
地址轉換(Network Address Translation)
- 簡稱 NAT 模式
- 類似于防火墻的私有網絡結構,負載調度器作為所有服務器節點的網關,即作為客戶機的訪問入口,也是各節點回應客戶機的訪問出口。
- 服務器節點使用私有IP地址,與負載調度器位于同一個物理網絡,安全性要優于其他兩種方式。
IP 隧道(IP Tunnel)
- 簡稱 TUN 模式
- 采用開放式的網絡結構,
- 負載調度器僅作為客戶機的訪問入口,各節點通過各自的 Internet 連接直接回應客戶機,而不再經過負載調度器。
- 服務器節點分散在互聯網中的不同位置,具有獨立的公網IP地址,通過專用 IP隧道與負載調度器相互通信。
直接路由(Direct Routing)
- 簡稱 DR 模式
- 采用半開放式的網絡結構,與 TUN模式的結構類似,但各節點并不是分散在各地,而是與調度器位于同一個物理網絡。
- 負載調度器與各節點服務器通過本地網絡連接,不需要建立專用的IP隧道。
NAT方式只需要一個公網 IP地址,從而成為最易用的一種負載均衡模式,許多硬件負載均衡設備就采用這種方式
優勢
- 安全性也比較好
相比較而言DR 模式和 TUN 模式
優勢
- 負載能力更加強大
- 適用范圍更廣
缺點
- 節點的安全性稍差一些
LVS 虛擬服務器
Linux Virtual Server
- 是針對Linux 內核開發的一個負載均衡項目
- 由我國的章文嵩博士在 1998年5月創建
- 官方站點位于 http://www.linuxvirtualserver.org/
- LVS 實際上相當于基于 IP地址的虛擬化應用
- 為基于 IP地址和內容請求分發的負載均衡提出了一種高效的解決方法
- LVS 現在已成為 Linux 內核的一部分
- 默認編譯為 ip_vs 模塊
- 必要時能夠自動調用
LVS 的負載調度算法
- 針對不同網絡服務和配置,LVS 調度器提供多種不同的負載調度算法
最常用的四種算法
- 輪詢
- 加權輪詢
- 最少連接
- 加權最少連接
輪詢(RoundRobin)
- 將收到的訪問請求按照順序輪流分配給群集中的各節點,均等地對待每臺服務器,而不管服務器實際的連接數和系統負載。
加權輪詢(Weighted Round Robin)
- 根據調度器設置的權重值來分發請求,權重值高的節點優先獲得任務并且分配的請求越多,這樣可以保證性能高的節點承擔更多請求。
最少連接(Least Connections)
- 根據真實服務器已建立的連接數進行分配,將收到的訪問請求優先分配給連接數最少的節點。如果所有的服務器節點性能相近,采用這種方式可以更好地均衡負載。
加權最少連接(Weighted Least Connections)
- 在服務器節點的性能差異較大的情況下,調度器可以根據節點服務器負載自動調整權重,權重較高的節點將承擔更大比例的活動連接負載。
使用 ipvsadm 管理工具
ipvsadm 是在負載調度器上使用的 LVS 群集管理工具,通過調用 ip_vs 模塊來添加、刪除服務器節點,以及查看群集的運行狀態。
構建 LVS 負載均衡群集
地址轉換模式(LVS-NAT)
實驗環境
各web節點需要設置網關,NFS不需要
CentOS 系統,手動加載 ip_vs 模塊并查看信息
//加載 ip_vs模塊
[root@localhost ~]# modprobe ip_vs
//查看 ip_vs 版本信息
[root@localhost ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:Port Scheduler Flags->RemoteAddress:Port Forward Weight ActiveConn InActConn
配置負載調度器
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
安裝 ipvsadm
[root@localhost ~]# yum -y install ipvsadm
查看?ipvsadm 版本
[root@localhost ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
添加配置文件
[root@localhost ~]# vim /etc/sysctl.conf
## 添加下面代碼
net.ipv4.ip_forward = 1
語句生效
[root@localhost ~]# sysctl -p
配置新策略
[root@localhost ~]# ipvsadm -C
創建虛擬服務器
[root@localhost ~]# ipvsadm -A -t 172.16.16.172:80 -s rr
添加服務器節點
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.102:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.103:80 -m -w 1
查看當前策略信息
[root@localhost ~]# ipvsadm-save
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.10.102:http -m -w 1
-a -t localhost.localdomain:http -r 192.168.10.103:http -m -w 1
-s:指定調度算法
-
rr:輪詢
-
wrr:加權輪詢
-
lc:最小鏈接數
-
wlc:加權最小連接數
(
-
-A????添加一個新的集群服務;
-
-E????修改一個己有的集群服務;
-
-D????刪除指定的集群服務;
-
-a????向指定的集群服務中添加RS及屬性;
-
-e????修改RS屬性;
-
-t????指定為tcp協議;
-
-u????指定為udp協議;
-
-s????調度方法,默認為wlc;
-
-w????指定權重,默認為1;
-
-g????Gateway,?DR模型;
-
-i????ipip,?TUN模型;
-
-m????masquerade,?NAT模型;
-
-S????保存ipvsadm設定的規則策略,默認保存在/etc/sysconfig/ipvsadm中;
-
-R????載入己保存的規則策略,默認加載/etc/sysconfig/ipvsadm;
-
-C????清除所有集群服務;
-
-Z????清除所有記數器;
-
-L????顯示當前己有集群服務,能通過相應的options查看不同狀態信息;
-
-r ?????????指定真實服務器的地址)
啟動 ipvsadm
[root@localhost ~]# systemctl enable ipvsadm
配置 web 節點服務器
在兩個 web 節點上安裝 httpd
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install nfs-utils
?創建測試頁
[root@localhost ~]# vim /var/www/html/index.html
LVS test1
啟動 httpd 服務
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
客戶端測試 LVS 群集
[root@localhost ~]# curl 172.16.16.172
在 LVS 上產看調度信息
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.16.172:80 rr-> 192.168.10.102:80 Masq 1 0 0 -> 192.168.10.103:80 Masq 1 0 0
-
ActiveConn是活動連接數,也就是tcp連接狀態的ESTABLISHED
-
InActConn是指除了ESTABLISHED以外的,所有的其它狀態的tcp連接
linux 做客戶端時可以用以下代碼進行測試
[root@localhost ~]# for i in $(seq 10);do curl 172.16.16.172;done
?NFS 共享存儲服務
NFS
- 是一種基于 TCP/IP 傳輸的網絡文件系統協議
- 最初由 Sun 公司開發
- 通過使用 NFS協議,客戶機可以訪問遠程服務器中的共享資源
- 對于大多數負載均衡群集來說,使用 NFS協議來共享數據存儲是比較常見的做法
- NFS也是NAS存儲設備必然支持的一種協議
使用 NFS 發布共享資源
- NFS 服務的實現依賴于 RPC(Remote Process Call,遠端過程調用)機制
- 以完成遠程到本地的映射過程
CentOS7系統中,需要安裝軟件包提供 NFS共享服務
- nfs-utils
- rpcbind
前者用于 NFS 共享發布和訪問
后者用于RPC支持
安裝 nfs-utils、rpcbind 軟件包
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install nfs-utils rpcbind
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
設置共享目錄
[root@localhost ~]# mkdir -p /opt/wwwroot
[root@localhost ~]# vi /etc/exports
/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)
可以同時發布多個目錄,并且可以為不同的客戶端設置不同的訪問權限
- rw 可讀寫的權限?
- ro 只讀的權限?
- no_root_squash?登入NFS主機,使用該共享目錄時相當于該目錄的擁有者,如果是root的話,那么對于這個共享的目錄來說,他就具有root的權限,這個參數極不安全,不建議使用
- root_squash 登入NFS主機,使用該共享目錄時相當于該目錄的擁有者。但是如果是以root身份使用這個共享目錄的時候,那么這個使用者(root)的權限將被壓縮成為匿名使用者,即通常他的UID與GID都會變成nobody那個身份
- all_squash 不論登入NFS的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody
- sync?資料同步寫入到內存與硬盤當中?
- async 資料會先暫存于內存當中,而非直接寫入硬盤?
- insecure 允許從這臺機器過來的非授權訪問
啟動 NFS 服務程序
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# netstat -anpt | grep rpc
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 44153/rpc.mountd
tcp 0 0 0.0.0.0:50661 0.0.0.0:* LISTEN 7511/rpc.statd
tcp6 0 0 :::20048 :::* LISTEN 44153/rpc.mountd
tcp6 0 0 :::54742 :::* LISTEN 7511/rpc.statd
查看本機發布的 NFS 共享目錄
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/wwwroot 192.168.7.0/24
/var/ftp/pub 192.168.10.173,192.168.7.172
在客戶機中訪問 NFS 共享資源
- NFS 協議的目標是提供一種網絡文件系統
- 對 NFS 共享的訪問使用 mount 命令來進行掛載,對應的文件系統類型為nfs
- 既可以手動掛載,也可以加入/etc/fstab 配置文件來實現開機自動掛載
- 考慮到群集系統中的網絡穩定性,NFS服務器與客戶機之間最好使用專有網絡進行連接
安裝 rpcbind 軟件包,并啟動 rpcbind 服務
[root@localhost ~]# yum -y install rpcbind nfs-utils
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start rpcbind
手動在 web 節點掛載 nfs
[root@localhost ~]# mount -t nfs 192.168.10.105:/opt/wwwroot /var/www/html
在 nfs 上創建測試網頁
[root@localhost ~]# vim /var/www/html/index.html
LVS test
linux做客戶端時可以用一下代碼進行測試
[root@localhost ~]# for i in $(seq 10);do curl 172.16.16.172;done
小阿軒yx-LVS負載均衡群集