虛擬機器搭建LVS-NAT叢集
阿新 • • 發佈:2019-01-07
一. 必備知識
區域網基礎和計算機網路7層模型 http://blog.csdn.net/liaomin416100569/article/details/72976270
必須掌握NAT 路由器 閘道器這些概念
tcp協議相關知識 http://blog.csdn.net/liaomin416100569/article/details/73088297
虛擬機器配置三種虛擬網路的知識 自行百度
LVS快速搭建可以使用centos的piranha軟體 具體安裝自行百度 這裡不研究
二概念解析
lvs官網 http://www.linuxvirtualserver.org/
lvs(linux virtual server)提供了三種叢集方式
分別是:
NAT模式簡介 類似於nginx叢集 DServer 表示轉發伺服器 用於控制負載均衡 複雜均衡的存在幾種轉發演算法 dserver必須擁有兩個網絡卡 一個用於公網使用者訪問Dserver 一個網絡卡用於連線區域網中其他的Rserver (Real Server) 客戶端瀏覽器訪問的公網ip 192.168.88.20 資料包 可能就是 源ip 客戶端ip 目標ip Vip 88.20 轉發伺服器需要定義個路由規則 將傳送的資料包 轉換為 源ip 客戶端ip 目標ip是 後端的Rserver的Rip 才能正常的被後端機器收 後端Rserver返回結果後 DServer需要將源ip修改為公網ip vip 客戶端才能接受響應三 配置過程 1.dserver配置 1.1》配置雙網絡卡 雙ip 1.1.1》安裝vmware虛擬機器 虛擬機器安裝cenos7 明白三種虛擬網路的方式 。橋接:和window機器的物理網絡卡進行橋接 橋接後 由物理網絡卡將當前ip和虛擬機器設定的ip 的arp資料分發出去 可以達到讓區域網其他主機 訪問虛擬機器ip的能力 。 NAT 利用WMnet8虛擬網絡卡作為虛擬路由 虛擬機器自動獲取ip 會設定閘道器地址為wmnet8的ip 當虛擬機器網路網路時 資料包傳送到閘道器 閘道器wmnet8 修改資料包的源ip地址 利用window機器上網後返回資料 給虛擬機器 。僅主機模式 和NAT一樣 虛擬機器只能訪問主機資源不能聯網 1.1.2》安裝nat虛擬網絡卡
[[email protected] proc]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.58.134 netmask 255.255.255.0 broadcast 192.168.58.255
inet6 fe80::20c:29ff:fe49:296c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:49:29:6c txqueuelen 1000 (Ethernet)
RX packets 1890 bytes 703660 (687.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1479 bytes 276286 (269.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1.1.3》安裝橋接虛擬網絡卡
虛擬機器右鍵設定 彈出視窗後 新增 選擇網路介面卡 建立網路介面卡2 設定為橋接模式
將橋接虛擬網絡卡繫結到window機器物理網絡卡上
虛擬機器 選單 編輯 -虛擬網路編輯器
window物理網絡卡的ip配置是如下的
當新增好網絡卡後 在linux上 通過ifconfig 可以看到多了一個網絡卡
[[email protected] proc]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.58.134 netmask 255.255.255.0 broadcast 192.168.58.255
inet6 fe80::20c:29ff:fe49:296c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:49:29:6c txqueuelen 1000 (Ethernet)
RX packets 1977 bytes 712212 (695.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1536 bytes 286518 (279.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno33554984: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.16.21 netmask 255.255.255.0 broadcast 192.168.16.255
inet6 fe80::20c:29ff:fe49:2976 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:49:29:76 txqueuelen 1000 (Ethernet)
RX packets 2157795 bytes 229287748 (218.6 MiB)
RX errors 0 dropped 5331 overruns 0 frame 0
TX packets 537 bytes 1032636 (1008.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 33 bytes 3074 (3.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33 bytes 3074 (3.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到新生成了一個裝置eno33554984 ip不是我們想要的 因為上圖中 window的ip是192.168.88.20 我這裡如果需要這臺機器被外部訪問 必須
設定為 88段的ip需要為該網絡卡配置 靜態地址 拷貝一個其他網絡卡的檔案 修改為當前網絡卡名稱
cd /etc/sysconfig/network-scripts cp ifcfg-eno16777736 ifcfg-eno33554984 修改ifcfg-eno33554984 將BOOTPROTO從dbcp修改為static表示靜態ip NAME=eno33554984 改成當前網絡卡名
UUID=1c2310e2-e82e-4ce7-a1aa-60d05aa47f2e 隨便修改一個字母 唯一的實體地址
DEVICE=eno33554984 改為當前網絡卡名
IPADDR=192.168.88.21 設定靜態ip
NETMASK=255.255.255.0 設定子網掩碼
GATEWAY=192.168.88.1 設定閘道器
DNS1=8.8.8.8 設定dns
其中子網掩碼和閘道器和dns都和window機器一樣 以下是正確的配置
TYPE=Ethernet
BOOTPROTO=static
NAME=eno33554984
UUID=1c2310e2-e82e-4ce7-a1aa-60d05aa47f2e
DEVICE=eno33554984
ONBOOT=yes
IPADDR=192.168.88.21
NETMASK=255.255.255.0
GATEWAY=192.168.88.1
DNS1=8.8.8.8
重啟網路 service network restart
[[email protected] network-scripts]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.58.134 netmask 255.255.255.0 broadcast 192.168.58.255
inet6 fe80::20c:29ff:fe49:296c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:49:29:6c txqueuelen 1000 (Ethernet)
RX packets 2233 bytes 737958 (720.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1743 bytes 320982 (313.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno33554984: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.88.21 netmask 255.255.255.0 broadcast 192.168.88.255
inet6 fe80::20c:29ff:fe49:2976 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:49:29:76 txqueuelen 1000 (Ethernet)
RX packets 2316913 bytes 247471207 (236.0 MiB)
RX errors 0 dropped 5815 overruns 0 frame 0
TX packets 537 bytes 1032636 (1008.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 33 bytes 3074 (3.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33 bytes 3074 (3.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此時 88.21ip配置成功 隨便找一臺window機器 ping以下 88.21 成功
1.1.4配置路由規則 檢視 more /etc/sysctl.conf net.ipv4.ip_forward = 1 該引數表示開啟路由轉發功能 訪問88.21資料後 將資料轉換後轉發給區域網網絡卡58.134 sysctl -p 引數生效 如果不存在或者為0 修改為1 表示可以在不同網絡卡間進行路由轉發 ipvs和引數foward功能圖解 ipvsadm實際上就是對資料包的過濾 當客戶端傳送資料請求到 88.20網絡卡時 ipvs攔截 通過負載均衡排程演算法獲取到一臺Rserver後 將資料包 修改為 目標ip為 計算後的RServerip 因為開啟了 net.ipv4.ip_forward = 1 所以知道目標地址為58 段 自動將資料包forward到 58.134的網絡卡 因為Rserver的ip和該網絡卡處於同一網段所以 通過Dip傳送資料包到Rip 在同時使用ip 192.168.88.21和192.168.58.134的Dserver上 配置lvs 安裝ipvs軟體 yum -y install ipvsadm #清空所有的路由規則 ipvsadm -C #新增一個叢集 192.168.88.21:80 必須是外網ip 也就是vip 因為別人才可以訪問 rr表示輪詢
ipvsadm -A -t 192.168.88.21:80 -s rr #給叢集新增一個主機 Rserver 192.168.58.135:80和192.168.58.136:80 這兩臺機各自部署一個tomcat
ipvsadm -a -t 192.168.88.21:80 -r 192.168.58.135:80 -m
ipvsadm -a -t 192.168.88.21:80 -r 192.168.58.136:80 -m 常用的ipvsadm命令
叢集命令
新增 ipvsadm -A -t 192.168.88.21:80 -s rr
修改 ipvsadm -E -t 192.168.88.21:80 -s wrr
刪除 ipvsadm -D -t 192.168.88.21:80
後臺主機管理命令
新增 ipvsadm -a -t 192.168.88.21:80 -r 192.168.58.135:80 -m (-m表示是nat叢集 -g是dr -w int 設定權重)
修改 ipvsadm -e -t 192.168.88.21:80 -r 192.168.58.135:80 –m -w 3
刪除 ipvsadm -d -t 192.168.88.21:80 -r 192.168.58.135:80
檢視叢集
ipvadm -L -n
將路由規則儲存到檔案中
service ipvsadm save
8種排程演算法
1. 輪叫排程 rr
這種演算法是最簡單的,就是按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是簡單。輪詢演算法假設所有的伺服器處理請求的能力都是一樣的,排程器會將所有的請求平均分配給每個真實伺服器,不管後端 RS 配置和處理能力,非常均衡地分發下去。
2. 加權輪叫 wrr
這種演算法比 rr 的演算法多了一個權重的概念,可以給 RS 設定權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr演算法的一種優化和補充, LVS 會考慮每臺伺服器的效能,並給每臺伺服器新增要給權值,如果伺服器A的權值為1,伺服器B的權值為2,則排程到伺服器B的請求會是伺服器A的2倍。權值越高的伺服器,處理的請求越多。
3. 最少連結 lc
這個演算法會根據後端 RS 的連線數來決定把請求分發給誰,比如 RS1 連線數比 RS2 連線數少,那麼請求就優先發給 RS1
4. 加權最少連結 wlc
這個演算法比 lc 多了一個權重的概念。
5. 基於區域性性的最少連線排程演算法 lblc
這個演算法是請求資料包的目標 IP 地址的一種排程演算法,該演算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的伺服器,如果這臺伺服器依然可用,並且有能力處理該請求,排程器會盡量選擇相同的伺服器,否則會繼續選擇其它可行的伺服器
6. 複雜的基於區域性性最少的連線演算法 lblcr
記錄的不是要給目標 IP 與一臺伺服器之間的連線記錄,它會維護一個目標 IP 到一組伺服器之間的對映關係,防止單點伺服器負載過高。
7. 目標地址雜湊排程演算法 dh
該演算法是根據目標 IP 地址通過雜湊函式將目標 IP 與伺服器建立對映關係,出現伺服器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該伺服器。
8. 源地址雜湊排程演算法 sh
與目標地址雜湊排程演算法類似,但它是根據源地址雜湊演算法進行靜態分配固定的伺服器資源
2.rserver配置 》配置tomcat 兩臺ip為 192.168.58.135和 192.168.58.136安裝tomcat配置埠為80 啟動 》配置ip 設定閘道器為DIP 將135和136的ip都設定為靜態ip 並且將閘道器設定為 轉發伺服器的dip 也就是 58.134 58.135和58,.136設定為 對應的ip
TYPE=Ethernet
BOOTPROTO=static
NAME=eno16777736
UUID=1c2310e2-e82e-4ce7-a1aa-60d05aa47f1e
DEVICE=eno16777736
ONBOOT=yes
IPADDR=192.168.58.135
NETMASK=255.255.255.0
GATEWAY=192.168.58.134
~
~
在任意88段網路任意網路 http://192.168.88.21/ 正常訪問