LVS-NAT負載均衡羣集部署

LVS簡介

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模式 (Network Address Translation)

**簡稱NAT模式**,類似於防火牆的私有網絡結構,負載調度器作爲所有服務器節點的網關,即作爲客戶機的訪問入口,也是各節點回應客戶機的訪問出口
服務器節點使用私有IP地址,與負載調度器位於銅一個物理網絡,安全性要優於其他兩種方式

TUN模式(IP Tunnel)

**簡稱TUM模式**,採用開放式的網絡結構,負載調度器僅作爲客戶機的訪問入口,各節點通過各自的網絡連接直接回應客戶機,而不再經過負載調度器
服務器節點分散在互聯網中的不同位置,具有獨立的公網IP地址,通過專用IP隧道與負載調度器相互通信。所有環境都是公網環境

DR模式 (Direct Routing)

直接路由

**簡稱DR模式**,採用半開放式的網絡結構,與TUN模式的結構類似,但各節點並不是分散在各地,而是與調度器位於同一個物理網絡
負載調度器與各節點服務器通過本地網絡連接,不需要建立專用的IP隧道
在局域網中

LVS的負載調度算法

**輪詢 (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

先到6安裝ngs和遠程調用包

[root@localhost ~]# yum install nfs-utils rpcbind -y

4,5安裝web服務

[root@localhost ~]# yum install httpd -y

1安裝LVS負載均衡調度器

[root@localhost ~]# yum install ipvsadm -y

配置6nfs服務器

僅主機模式我們服務器都要在一個局域網

LVS-NAT負載均衡羣集部署

配置固定IP

[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

配置共享目錄,給777權限

[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

4,web服務器僅主機模式,配置固定IP

LVS-NAT負載均衡羣集部署

[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

開啓服務,去測試能不能與6nfs服務器聯通

[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

掛載,寫一個文件在web4,測試6nfs服務器有沒有存儲這個文件

[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

5web服務器也是同樣的操作,僅主機模式,綁定固定IP

LVS-NAT負載均衡羣集部署

[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

掛載,寫一個文件在web4,測試6nfs服務器有沒有存儲這個文件

[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

1負載均衡調度器僅主機模式,綁定兩塊網卡,配置網卡

LVS-NAT負載均衡羣集部署

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 #重啓網絡服務

開啓路由轉發,NAT轉換

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

去7客戶端綁定IP

LVS-NAT負載均衡羣集部署

去4web服務器去測試能不能與客戶端聯通

[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

加載LVS內核模塊

[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

開啓LVS內核

先保存

[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

寫LVS虛擬服務器腳本,啓動腳本

[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        

NAT地址轉換

[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

再去客戶端測試一下能不能通過外網地址訪問到web服務器的內容

LVS-NAT負載均衡羣集部署

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章