什麼是LVS以及搭建LVS負載均衡羣集

一、什麼是LVS、羣集的概述

(1)羣集技術概述

  • 在互聯網中,站點對硬件性能、響應速度、服務器穩定性、數據可靠性的要求是很高的
  • 因爲單臺服務器難以承擔所有訪問的需求,所以就有了多種解決方案:
    (1)使用大型機——價格昂貴
    (2)專用負載分流設備——資源浪費
    (3)構建集羣服務器——通過整合多臺相對價格低廉的普通服務器,以同一個地址對外提供服務


——而LVS就是企業中常用的一種羣集(cluster)服務 (即Linux Virtual Server虛擬服務器)

擴展:
Linux Virtual Server是Linux內核的一部分,是針對Linux內核的負載均衡解決方案
Linux Virtual Server是在1998年5月由我國章文嵩博士創建,官方網站爲:http://www.linuxvirtualserver.org/ 有興趣可以去看一看

(2)羣集的含義

別名: Cluster、集羣、羣集
含義: 即由多臺節點服務器 (至少兩臺節點服務器) 構成,但是對外只表現爲一個整體,即只提供一個訪問接口 (這個訪問接口可以是域名或ip)

(3)羣集的類型

  • 負載均衡羣集(Load Balancer)
    主要是提高應用系統的響應能力,從而獲得高併發、高負載然後提高整體性能
    例: DNS輪詢、應用層交換、反向代理等

  • 高可用羣集(High Available)
    主要是提高應用系統的可靠性,使用兩臺或多臺節點服務器進行切換等
    例: 故障切換、雙擊熱備、多機熱備
    工作方式主要是:
    1.雙工:所有節點同時在線
    2.主從:主節點在線,從節點在主節點發生故障時自動切換爲主節點




  • 高性能運算羣集(High Performance Computer,這個用的比較少)
    主要是提高應用系統的CPU運算速度,擴展硬件資源和分析能力
    例: 雲計算、網格計算,依賴於分佈式計算和並行計算
    ————在特殊環境中可以合併使用這幾種羣集模式,我們這裏只說負載均衡羣集————


(4)負載均衡羣集的結構

負載均衡的結構

  • 第一層:負載調度器 (Load Balancer或Director,至少需要一個)
    即訪問這個羣集系統的唯一入口,對外爲VIP地址 (虛擬ip/羣集ip地址) ,通常配置爲主、從方式的雙擊熱備,確保羣集的高可用性
  • 第二層:服務器池 (Server Pool,這裏使用的是大量的真實服務器)
    首先每個節點都有獨立的rip (即真實ip) ,這裏的節點服務器只處理調度器分發的客戶機請求,當某個節點服務器暫時失效時,負責調度器的容錯機制會將其隔離,在錯誤排除後再重新納入服務器池
  • 第三層:共享存儲 (Share Storage)
    這裏是爲服務器池提供穩定的、一致的文件存儲服務,確保羣集的數據統一性,可以使用NAS設備或者搭建NFS共享服務的專用服務器

(5)負載均衡羣集的工作模式

工作模式有: 基於ip、端口、內容等,基於ip的工作模式效率是最高的
因爲在工作中一般使用最多的是基於ip的工作模式,所以這裏只說基於ip的模式

地址轉換模式(NAT模式)

NAT模式
原理: 調度器爲節點服務器的網關,是客戶機的訪問入口和各節點服務器的迴應出口。即調度器同時提供訪問入口和迴應出口
結構: 服務器和調度器使用私有ip,在同一物理網絡,安全性優於IP隧道模式和直接路由模式

IP隧道模式(TUN模式)

ip隧道模式
原理: 調度器爲客戶機的訪問入口,節點服務器通過專用ip隧道與調度器互相通信,然後節點服務器直接回應客戶機。即客戶機訪問調度器,調度器通過專用ip隧道和節點服務器進行通信,再通過節點服務器直接回應客戶機
結構: 是開放式的網絡結構,節點服務器都具有獨立的公網ip,分散在不同的地方,可以直接回應客戶機

直接路由模式(DR模式)

直接路由模式
原理: 調度器只爲客戶機提供訪問入口,然後傳給節點服務器,再通過節點服務器直接回應客戶機。即客戶機訪問調度器,調度器通過本地網絡和節點服務器進行通信,然後節點服務器直接回應客戶機
結構: 是半開放式的網絡結構,節點服務器集中在一起,和調度器在同一物理網絡,通過本地連接
——————————————————總結——————————————————
NAT模式只需要一個公網ip,最易於使用,而且安全性高,許多硬件負載均衡器會採用。DR模式和TUN模式的負載能力更強大,使用的範圍更廣,但是節點的安全性稍微低一點。
——————————————————————————————————————




(6)LVS的負載調度算法一般分爲:

  • 輪詢(Round Robin): 按照順序輪流分配,不管實際連接數和系統負載
  • 加權輪詢(Weighted Round Robin): 自動查詢各節點的負載情況,動態調整其權重
  • 最少連接(Least Connections): 優先分配給連接數最少的節點
  • 加權最少連接(Weighted Least Connections): 服務器節點性能差異大時,自動調整權重,權重高的承擔更大比例的活動連接負載

二、搭建LVS負載均衡羣集(NAT模式)

本次實驗的操作系統均爲Centos7

(1)實驗環境

名稱 ip地址 扮演角色 網卡
LVS 192.168.100.1 200.0.0.1 LVS負載調度器 ens33(VM1網卡) ens37(VM2網卡)
Web1 192.168.100.2 web服務器 ens33(VM1網卡)
Web2 192.168.100.3 web服務器 ens33(VM1網卡)
NFS 192.168.100.4 nfs共享存儲 ens33(VM1網卡)
win7 200.0.0.2 客戶機 VM2網卡

內網的Web1、Web2的網關要指向調度器

(2)實驗步驟

首先先把各個服務器的ip配置好,並且ping通,關閉防火牆、Selinux等(略)

LVS調度器配置

******1)進行基礎配置
[root@lvs ~]# ip a  (查看另一塊網卡的名稱)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:44:ad:db brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::7762:f351:dbfc:cb0e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:44:ad:e5 brd ff:ff:ff:ff:ff:ff
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp ifcfg-ens33 ifcfg-ens37 (複製原來的網卡ens33到新的網卡)
[root@lvs network-scripts]# vim ifcfg-ens37 (編輯新的網卡)
修改爲:
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=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=200.0.0.1
PREFIX=24
IPV6_PRIVACY=no
保存退出
[root@lvs network-scripts]# systemctl restart network (重啓網卡)
[root@lvs network-scripts]# ip a   (查看是否成功配置)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:44:ad:db brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::7762:f351:dbfc:cb0e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:44:ad:e5 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.1/24 brd 200.0.0.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::18f:b43e:375e:defb/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@lvs network-scripts]# cd
******2)加載LVS模塊,查看內核是否支持LVS
[root@lvs ~]# modprobe ip_vs  (加載模塊)
[root@lvs ~]# 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
******3)因爲調度器充當網關的角色,所以要開啓路由功能
[root@lvs ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
******4)使用yum安裝ipvsadm
[root@lvs ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@lvs ~]# yum -y install ipvsadm
。。。。。。
完畢!
[root@lvs ~]# ipvsadm -v (查看版本)
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
******5)使用ipvsadm
————————————————————————————————華麗分割線——————————————————————————————————
ipvsadm的相關命令
格式: ipvsadm  選項  
-A 後面跟-t的虛擬ip地址以及端口號加-s選擇負載調度算法 (添加虛擬服務器)
如:ipvsadm -A -t 200.0.0.180 -s rr
-t 後面跟vip地址以及tcp端口號   (vip就是虛擬ip,必須是本機的真實ip地址)
-s 選擇負載調度算法(輪詢爲rr、加權輪詢爲wrr、最少鏈接爲lc、加權最少連接爲wlc)
-a 後面跟-t的虛擬ip以及端口號加-r的真實ip以及端口號加選擇什麼模式如-m選擇net模式最後加-w設置權重 (添加節點服務器)
如:ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.2:80 -m -w 1
-r 後面跟rip地址以及tcp端口     (rip就是真實ip)
-m 使用nat羣集模式
-g 使用DR模式
-i 使用TUN模式
-w 設置權重(0時暫停節點)
-d 後面跟-r的真實ip以及端口加-t的虛擬ip地址以及端口(刪除單個節點)
如:ipvsadm -d -r 192.168.100.2:80 -t 200.0.0.1:80
-D 後面跟-t的虛擬ip以及端口 (刪除整個虛擬服務器)
如:ipvsadm -D -t 200.0.0.1:80
-C 清空策略
———————————————————————————————————————————————————————————————————————————
[root@lvs ~]# ipvsadm -A -t 200.0.0.1:80 -s rr  (創建虛擬服務器)
[root@lvs ~]# ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.2:80 -m -w 1 (創建節點服務器)
[root@lvs ~]# ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.3:80 -m -w 1 (創建節點服務器)
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm (保存配置)
[root@lvs ~]# cat /etc/sysconfig/ipvsadm  (查看配置)
-A -t lvs:http -s rr
-a -t lvs:http -r 192.168.100.2:http -m -w 1
-a -t lvs:http -r 192.168.100.3:http -m -w 1
[root@lvs ~]# ipvsadm -ln  (查看各節點狀態)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.0.0.1:80 rr
  -> 192.168.100.2:80             Masq    1      0          0         
  -> 192.168.100.3:80             Masq    1      0          0         
[root@lvs ~]# systemctl enable ipvsadm (設置開機自啓)
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@lvs ~]# systemctl start ipvsadm (開啓服務)

NFS共享存儲配置

—————————————————————————————————————華麗分割線————————————————————————————————————
NFS簡介:
NFS即Network File System,網絡文件系統
安裝使用前提:(1)依賴於RPC(遠程過程調用)
             2)需要安裝nfs-utils(NFS共享發佈和訪問)、rpcbind(rpc支持)軟件包
             3)系統服務:nfs、rpcbind
             4)共享配置文件:/etc/exports
——————————————————————————————————————————————————————————————————————————————————
******1)使用yum安裝nfs-utils、rpcbind軟件包
[root@nfs ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@nfs ~]# yum -y install nfs-utils rpcbind
。。。。。。
完畢!
******2)設置爲開機自啓
[root@nfs ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs ~]# systemctl enable rpcbind
******3)設置共享目錄(配置文件爲/etc/exports)
[root@nfs ~]# mkdir -p /opt/web1 /opt/web2(創建共享目錄)
[root@nfs ~]# vim /etc/exports (編寫配置文件)
————————————————————————————————————————
語法結構爲:目錄位置 客戶機地址(權限操作)
權限操作有:(1)rw 讀寫
           2)sync 同步寫入
           3)no_用戶名_squash 客戶機以指定用戶訪問時賦予本地root權限
————————————————————————————————————————
寫入:
/opt/web1 192.168.100.2(rw,sync,no_root_squash)
/opt/web2 192.168.100.3(rw,sync,no_root_squash)
保存退出
******4)啓動nfs和rpcbind服務(要注意要先啓動rpcbind在啓動nfs)
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# netstat -anpt | grep rpcbind (查看端口)
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      16313/rpcbind       
tcp6       0      0 :::111                  :::*                    LISTEN      16313/rpcbind       
******5)查看本機發布的NFS共享目錄
[root@nfs ~]# showmount -e  (查看本機發布的共享目錄)
Export list for nfs:
/opt/web2 192.168.100.3
/opt/web1 192.168.100.2
————————————————————————————————————————
showmount -e 服務器ip地址    (從客戶機上查看NFS服務器的共享情況,是從客戶機上打的)
————————————————————————————————————————

Web1配置

******1)安裝httpd、nfs、rpcbind
[root@web1 ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@web1 ~]# yum -y install httpd nfs-utils rpcbind
。。。。。。
完畢!
******2)查看nfs服務器的共享情況
[root@web1 ~]# systemctl enable rpcbind (設置爲開機自啓)
[root@web1 ~]# systemctl start rpcbind  (開啓rpcbind服務)
[root@web1 ~]# showmount -e 192.168.100.4  (查看nfs共享服務器的共享情況)
Export list for 192.168.100.4:
/opt/web2 192.168.100.3
/opt/web1 192.168.100.2
******3)掛載nfs服務器的共享目錄到本地的網頁目錄
[root@web1 ~]# mount 192.168.100.4:/opt/web1 /var/www/html/
[root@web1 ~]# df -hT  (查看掛載情況)
文件系統                類型      容量  已用  可用 已用% 掛載點
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.7G   16G   10% /
/dev/sda1               xfs      1014M  137M  878M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /media/cdrom
192.168.100.4:/opt/web1 nfs4       17G  1.7G   16G   10% /var/www/html
******4)編寫網頁、配置自動掛載
[root@web1 ~]# echo "11111111111111111111" > /var/www/html/index.html (編寫網頁)
[root@web1 ~]# echo "192.168.100.4:/opt/web1 /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab  (配置自動掛載)
******5)配置httpd開機自啓並啓動
[root@web1 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# curl 127.0.0.1 (本地測試)
11111111111111111111

Web2配置

與Web1相同,網頁編寫不同即可,這裏就不寫步驟了
[root@web2 ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@web2 ~]# yum -y install httpd nfs-utils rpcbind
。。。。。。
完畢!
[root@web2 ~]# systemctl enable rpcbind
[root@web2 ~]# systemctl start rpcbind
[root@web2 ~]# showmount -e 192.168.100.4
Export list for 192.168.100.4:
/opt/web2 192.168.100.3
/opt/web1 192.168.100.2
[root@web2 ~]# mount 192.168.100.4:/opt/web2 /var/www/html/
[root@web2 ~]# df -hT
文件系統                類型      容量  已用  可用 已用% 掛載點
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.7G   16G   10% /
/dev/sda1               xfs      1014M  137M  878M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /media/cdrom
192.168.100.4:/opt/web2 nfs4       17G  1.7G   16G   10% /var/www/html
[root@web2 ~]# echo "2222222222222222" > /var/www/html/index.html
[root@web2 ~]# echo "192.168.100.4:/opt/web2 /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab 
[root@web2 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# curl 127.0.0.1
2222222222222222

測試

這個時候可以先看一下nfs共享存儲中是否共享成功
[root@nfs ~]# cat /opt/web1/index.html 
11111111111111111111
[root@nfs ~]# cat /opt/web2/index.html 
2222222222222222
發現已經共享成功

打開客戶機win7,訪問200.0.0.1調度器的外網網址
測試
測試
如果做到最後,win7測試無法訪問,那麼要看一下調度器的配置是不是錯了,使用ipvsadm -ln 查看TCP的那一行是否是外網地址,我的外網地址是200.0.0.1:80
ipvsadm -ln



三、搭建LVS負載均衡羣集(DR模式)

因爲net模式是把調度器當作網關,所以當數據量大的時候容易造成網絡瓶頸,而TUN模式浪費了太多的公網ip資源,工作中很少使用TUN模式的,所以在工作中最常用的是DR模式
這裏的基礎配置和NAT模式是相同的,所以就不做解釋了

(1)環境修改

名稱 ip地址 扮演角色 網卡
LVS 192.168.100.1 200.0.0.1 LVS負載調度器 ens33(VM1網卡) ens37(VM2網卡)
Web1 192.168.100.2 200.0.0.10 web服務器 ens33(VM1網卡)ens37(VM2網卡)
Web2 192.168.100.3 200.0.0.20 web服務器 ens33(VM1網卡)ens37(VM2網卡)
NFS 192.168.100.4 nfs共享存儲 ens33(VM1網卡)
win7 200.0.0.2 客戶機 VM2網卡

Web羣集ip爲200.0.0.100,可以多加幾臺節點服務器,但是都必須是雙網卡

(2)實驗步驟(NAT模式的基礎上)

LVS調度器配置

做完NAT模式的配置即可,然後配置羣集接口(即安裝ipvsadm等軟件)
******1)配置羣集接口(虛擬接口)
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp ifcfg-ens37 ifcfg-ens37:0 (複製外網網卡配置到羣集接口)
[root@lvs network-scripts]# vim ifcfg-ens37:0
修改爲:
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=ens37:0
DEVICE=ens37:0
ONBOOT=yes
IPADDR=200.0.0.100
PREFIX=24
IPV6_PRIVACY=no
保存退出
[root@lvs network-scripts]# ifup ens37:0   (開啓新編寫的羣集接口)
[root@lvs network-scripts]# ifconfig ens37:0  (查看是否配置成功)
ens37:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 200.0.0.100  netmask 255.255.255.0  broadcast 200.0.0.255
        ether 00:0c:29:44:ad:e5  txqueuelen 1000  (Ethernet)
[root@lvs network-scripts]# cd
******2)調整/proc內核參數,關閉重定向響應
[root@lvs ~]# vim /etc/sysctl.conf 
修改爲:
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens37.send_redirects = 0
保存退出
[root@lvs ~]# sysctl -p (立即應用策略)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens37.send_redirects = 0
******3)配置LVS-DR的配置策略
[root@lvs ~]# ipvsadm -C  (清空策略)
[root@lvs ~]# ipvsadm -ln (查看策略,確認已經成功清空)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs ~]# ipvsadm -A -t 200.0.0.100:80 -s rr    (編寫策略)
[root@lvs ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.10:80 -g -w 1[root@lvs ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.20:80 -g -w 1 
[root@lvs ~]# ipvsadm-save >/etc/sysconfig/ipvsadm  (保存策略)
[root@lvs ~]# cat /etc/sysconfig/ipvsadm     (確認無誤)
-A -t lvs:http -s rr
-a -t lvs:http -r 200.0.0.10:http -g -w 1
-a -t lvs:http -r 200.0.0.20:http -g -w 1
[root@lvs ~]# systemctl enable ipvsadm
[root@lvs ~]# ipvsadm -ln    (再次查看策略)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.0.0.100:80 rr
  -> 200.0.0.10:80                Route   1      0          0         
  -> 200.0.0.20:80                Route   1      0          0    

Web1配置

******1)配置新添加的網卡
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@web1 network-scripts]# vim ifcfg-ens37
[root@web1 network-scripts]# systemctl restart network
[root@web1 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bc:67:07 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.2/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::2ff4:55fa:6c3d:65e0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bc:67:11 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.10/24 brd 200.0.0.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::b4fc:9eac:9686:e7e9/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
******2)配置羣集接口
[root@web1 network-scripts]# vim ifcfg-lo:0 (配置羣集接口)
寫入:
DEVICE=lo:0
ONBOOT=yes
IPADDR=200.0.0.100       (地址填羣集地址,即調度器ens37:0的地址)
NETMASK=255.255.255.255  (這裏的掩碼必須全爲255
保存退出
[root@web1 network-scripts]# ifup ifcfg-lo:0  (啓用網卡)
[root@web1 network-scripts]# ifconfig lo:0  (查看是否配置成功)
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@web1 network-scripts]# cd
******3)調整/proc內核參數,關閉ARP響應
[root@web1 ~]# vim /etc/sysctl.conf 
修改:
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
保存退出
[root@web1 ~]# sysctl -p  (立即生效)
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
******4)添加到羣集ip地址的本地路由記錄
[root@web1 ~]# vim /etc/rc.local 
修改:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
/sbin/route add -host 200.0.0.100 dev lo:0
保存退出
[root@web1 ~]# route add -host 200.0.0.100 dev lo:0

Web2配置(與Web1相同)

[root@web2 ~]# cd /etc/sysconfig/network-scripts/
[root@web2 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@web2 network-scripts]# vim ifcfg-ens37
修改爲:
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=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=200.0.0.20
PREFIX=24
IPV6_PRIVACY=no
保存退出
[root@web2 network-scripts]# systemctl restart network
[root@web2 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ab:11:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.3/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::32ab:5b77:3fc:bf01/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ab:11:65 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.20/24 brd 200.0.0.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::ccb4:e801:7f4d:af22/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever            
[root@web2 network-scripts]# cat <<aa> ifcfg-lo:0
> DEVICE=lo:0
> ONBOOT=yes
> IPADDR=200.0.0.100
> NETMASK=255.255.255.255
> aa
[root@web2 network-scripts]# ifup ifcfg-lo:0
[root@web2 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@web2 network-scripts]# cat <<aa>> /etc/sysctl.conf 
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.default.arp_ignore = 1
> net.ipv4.conf.default.arp_announce = 2
> net.ipv4.conf.lo.arp_ignore = 1
> net.ipv4.conf.lo.arp_announce = 2
> aa
[root@web2 network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@web2 network-scripts]# echo "/sbin/route add -host 200.0.0.100 dev lo:0" >> /etc/rc.local 
[root@web2 network-scripts]# route add -host 200.0.0.100 dev lo:0

NFS共享存儲無需修改

測試

使用客戶機Win7測試,查看是否來回切換
第一次訪問
第一次
第二次訪問
第二次
至此LVS負載均衡羣集的DR模式搭建完成!!!!




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