您好,登錄后才能下訂單哦!
下文給大家帶來LVS-NAT負載均衡群集部署的原理、模式分析及工作模式介紹,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網上有很多書籍,今天我們就用億速云在行業內累計的經驗來做一個解答。
LVS(Linux Virtual Server)即Linux虛擬云服務器,是由章文嵩博士主導的開源負載均衡項目,目前LVS已經被集成到Linux內核模塊中。該項目在Linux內核中實現了基于IP的數據請求負載均衡調度方案,其體系結構如圖1所示,終端互聯網用戶從外部訪問公司的外部負載均衡服務器,終端用戶的Web請求會發送給LVS調度器,調度器根據自己預設的算法決定將該請求發送給后端的某臺Web服務器,比如,輪詢算法可以將外部的請求平均分發給后端的所有服務器,終端用戶訪問LVS調度器雖然會被轉發到后端真實的服務器,但如果真實服務器連接的是相同的存儲,提供的服務也是相同的服務,最終用戶不管是訪問哪臺真實服務器,得到的服務內容都是一樣的,整個集群對用戶而言都是透明的。最后根據LVS工作模式的不同,真實服務器會選擇不同的方式將用戶需要的數據發送到終端用戶,LVS工作模式分為NAT模式、TUN模式、以及DR模式。
**Cluster,集群,群集**
由多臺主機構成,但對外只表現為一個整體
在互聯網應用中,隨著站點對硬件性能,響應速度,服務穩定性,數據可靠性等要求越來越高,單臺服務器力不從心
** 解決方法**
使用價格昂貴的小型機,大型機
使用普通服務器構建服務群集
根據群集所針對的目標差異,可分為三種類型
負載均衡群集
高性能運算群集
**負載均衡群集(Load,Balance Cluster)**
以提高應用系統的響應能力,盡可能處理更多的訪問請求,減少延遲為目標,獲得高并發,高負載LB的整體性能
LB的負載分配依賴主節點的分流算法
**高可用群集**
以提高應用系統的可靠性,盡可能地減少中斷時間為目標,確保服務的連續性達到高可用
HA的容錯效果
HA的工作方式包括雙工和主從模式
**高性能運算群集**
以提高應用系統的CPU運算速度,擴展硬件資源和分析能力為目標,獲得相當于大型,超級計算機的高性能運算HPC能力
高性能運算群集的高性能依賴于分布式運算,并行計算,通過專用硬件和軟件將多個服務器的CPU,內存等資源整合在一起,實現只有,大型,超級計算機才具備的計算能力
負載均衡群集是目前企業用的最多的群集類型
群集的負載調度技術有三種工作模式
**地址轉換**
**IP隧道**
**直接路由**
**簡稱NAT模式**,類似于防火墻的私有網絡結構,負載調度器作為所有服務器節點的網關,即作為客戶機的訪問入口,也是各節點回應客戶機的訪問出口
服務器節點使用私有IP地址,與負載調度器位于銅一個物理網絡,安全性要優于其他兩種方式
**簡稱TUM模式**,采用開放式的網絡結構,負載調度器僅作為客戶機的訪問入口,各節點通過各自的網絡連接直接回應客戶機,而不再經過負載調度器
服務器節點分散在互聯網中的不同位置,具有獨立的公網IP地址,通過專用IP隧道與負載調度器相互通信。所有環境都是公網環境
直接路由
**簡稱DR模式**,采用半開放式的網絡結構,與TUN模式的結構類似,但各節點并不是分散在各地,而是與調度器位于同一個物理網絡
負載調度器與各節點服務器通過本地網絡連接,不需要建立專用的IP隧道
在局域網中
**輪詢 (Round Robin)**
將收到的訪問請求安裝順序輪流分配給群集中的個節點(真實服務器),均等地對待每一臺服務器,而不管服務器實際的連接數和系統負載
**加權輪詢 (Weighted Round Robin**)
根據真實服務器的處理能力輪流分配收到的訪問請求,調度器可以自動查詢各節點的負載情況,并動態調整其權重
保證處理能力強的服務器承擔更多的訪問流量
**最少連接 (Least Connections)**
根據真實服務器已建立的連接輸進行分配,將收到的訪問請求優先分配給連接數最少的節點
**加權最少連接 (Weighted Least Connections)**
在服務器節點的性能差異較大情況下,可以為真實服務器自動調整
權重
權重較高的節點將承擔更大比例活動連接負載
我們需要五臺虛擬機
1 作為負載均衡調度器 外網地址:12.0.0.1 內網:192.168.200.1
4 網站服務器apache 節點:192.168.200.110
5 網站服務器 節點: 192.168.200.120
6 nfs共享存儲 節點:192.168.200.130
7 客戶端 12.0.0.12
[root@localhost ~]# yum install nfs-utils rpcbind -y
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# yum install ipvsadm -y
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 #配置ens33網卡
BOOTPROTO=static #靜態
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=66a1e3d6-5c57-42ab-9996-b942b049ef85
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.130 #IP地址
NETMASK=255.255.255.0 #子網掩碼
GATEWAY=192.168.200.1 #網關
[root@localhost ~]# systemctl stop firewalld.service
s[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# systemctl status nfs.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since 二 2019-11-26 1
[root@localhost ~]# systemctl start rpcbind.service
[root@localhost ~]# systemctl status rpcbind.service
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service
[root@localhost ~]# vim /etc/exports
/usr/share *(ro,sync) #只讀,同步 所有服務器都可以去訪問
/opt/accp 192.168.200.0/24(rw,sync) #共享給200段可以訪問,可讀,可寫,同步
/opt/benet 192.168.200.0/24(rw,sync)
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir benet accp
[root@localhost opt]# chmod 777 accp/ benet/ #給可讀可寫可執行
[root@localhost opt]# ls -l
總用量 0
drwxrwxrwx. 2 root root 6 11月 26 17:13 accp
drwxrwxrwx. 2 root root 6 11月 26 17:13 benet
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
[root@localhost opt]# exportfs -rv
exporting 192.168.200.0/24:/opt/benet
exporting 192.168.200.0/24:/opt/accp
exporting *:/usr/share
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c3f0a196-6819-4702-9b54-7cad18402591
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.110
NETMASK=255.255.255.0
GATEWAY=192.168.200.1
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# netstat -ntap | grep 80
tcp6 0 0 :::80 :::* LISTEN 100863/httpd
[root@localhost ~]# ping 192.168.200.130
PING 192.168.200.130 (192.168.200.130) 56(84) bytes of data.
64 bytes from 192.168.200.130: icmp_seq=1 ttl=64 time=0.724 ms
64 bytes from 192.168.200.130: icmp_seq=2 ttl=64 time=0.356 ms
[root@localhost ~]# showmount -e 192.168.200.130 #測試6服務器的共享目錄
Export list for 192.168.200.130:
/usr/share *
/opt/benet 192.168.200.0/24
/opt/accp 192.168.200.0/24
[root@localhost ~]# mount.nfs 192.168.200.130:/opt/accp /var/www/html/ #掛載
[root@localhost ~]# df -h
問件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 20G 3.4G 17G 17% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.6M 903M 2% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 6.0G 179M 5.9G 3% /boot
/dev/mapper/centos-home 10G 37M 10G 1% /home
tmpfs 183M 40K 183M 1% /run/user/0
tmpfs 183M 4.0K 183M 1% /run/user/42
192.168.200.130:/opt/accp 20G 3.8G 17G 19% /var/www/html
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "THII IS ACCP WEB" > index.html
#6服務器去測試
[root@localhost opt]# cd accp/
[root@localhost accp]# ls
index.html
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a6cf69fe-eb42-4a99-9239-0da4cdeae0c7
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.120
NATMASK=255.255.255.0
GATEWAT=192.168.200.1
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# mount.nfs 192.168.200.130:/opt/benet /var/www/html/
[root@localhost ~]# df -h
問件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 20G 4.3G 16G 22% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.5M 903M 2% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 6.0G 179M 5.9G 3% /boot
/dev/mapper/centos-home 10G 36M 10G 1% /home
tmpfs 183M 44K 183M 1% /run/user/0
192.168.200.130:/opt/benet 20G 3.8G 17G 19% /var/www/html
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "this is benet web" > index.html
[root@localhost html]# systemctl start httpd.service
#6去測試
[root@localhost accp]# cd ../
[root@localhost opt]# cd benet/
[root@localhost benet]# ls
index.html
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=849aa04e-1874-490f-8cb0-b2fde4b9a6f8
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.1
NETMASK=255.255.255.0
[root@localhost ~]# systemctl restart network #重啟網絡服務
vim /etc/sysctl.conf #修改配置文件
net.ipv4.ip_forward=1 #加一條
[root@localhost ~]# sysctl -p #生效路由轉發
net.ipv4.ip_forward = 1
[root@localhost ~]# iptables -t nat -F #清除NAT表
[root@localhost ~]# iptables -F #清除轉發表
[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1
#在nat表中-A在POSTROUTING列中-o指定出口-s指定源地址 -j做nat 轉換成12.0.0.1
[root@localhost html]# ping 12.0.0.12
PING 12.0.0.12 (12.0.0.12) 56(84) bytes of data.
64 bytes from 12.0.0.12: icmp_seq=1 ttl=127 time=0.815 ms
64 bytes from 12.0.0.12: icmp_seq=2 ttl=127 time=0.752 ms
64 bytes from 12.0.0.12: icmp_seq=3 ttl=127 time=0.727 ms
64 bytes from 12.0.0.12: icmp_seq=4 ttl=127 time=0.712 ms
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# cat /proc/net/ip_vs #查看LVS內核版本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm.service
[root@localhost ~]# systemctl status ipvsadm.service
● ipvsadm.service - Initialise the Linux Virtual Server
Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
Active: active (exited) since 二 2019-11-26 17:59:41 CST; 9s ago
[root@localhost ~]# cd /opt/
[root@localhost opt]# vim nat.sh
#!/bin/bash
ipvsadm -C #清除緩存
ipvsadm -A -t 12.0.0.1:80 -s rr #添加虛擬服務器,-A -t指定端口 -s指定算法輪詢
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.110:80 -m #-a -t指定端口 -r指定真實節點服務器 -m指定NAT
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.120:80 -m
ipvsadm
[root@localhost opt]# source nat.sh #啟動腳本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:http rr
-> 192.168.200.110:http Masq 1 0 0
-> 192.168.200.120:http Masq 1 0 0
[root@localhost opt]# iptables -F #清除轉發表
[root@localhost opt]# iptables -t nat -F #清除轉發表
[root@localhost opt]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1
#在nat表中-A在POSTROUTING列中-o指定出口-s指定源地址 -j做nat 轉換成12.0.0.1
看了以上關于LVS-NAT負載均衡群集部署的原理、模式分析及工作模式介紹,如果大家還有什么地方需要了解的可以在億速云行業資訊里查找自己感興趣的或者找我們的專業技術工程師解答的,億速云技術工程師在行業內擁有十幾年的經驗了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。