1. 程式人生 > >虛擬機器搭建LVS-NAT叢集

虛擬機器搭建LVS-NAT叢集

一. 必備知識

     區域網基礎和計算機網路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虛擬網絡卡
                       虛擬機器右鍵   設定 - 網路介面卡  修改為NAT模式                                                   在虛擬機器上 可以 ifconfig 檢視 發現裝置名稱eno16777736  自動生成了ip  192.168.58.134               如果沒有獲取ip  可以通過修改  /etc/sysconfig/network-scripts/ifcfg-eno16777736檔案  ONBOOT=yes 表示啟動自動獲取ip                重啟網路服務 service network restart
[[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/ 正常訪問