十五週五次課

十五週五次課

18.6 負載均衡集羣介紹
18.7 LVS介紹
18.8 LVS調度算法
18.9/18.10 LVS NAT模式搭建html

18.6 負載均衡集羣介紹linux

 

負載均衡集羣介紹

  • 主流開源軟件LVS、keepalived、haproxy、nginx等nginx

    • 其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既能夠認爲是4層,也能夠當作7層使用web

    • keepalived的負載均衡功能其實就是lvs,lvs是keepalived內置的算法

    • lvs這種4層的負載均衡是能夠分發TCP協議,web服務是80端口,除了分發80端口,還有其餘的端口通訊的,好比MySQL的負載均衡,就能夠用LVS實現,而nginx僅僅支持http,https,mail,haproxy;haproxy也支持MySQL這種TCP負載均衡的apache

    • 7層有限制,不過有些更高級的功能,nginx能夠經過站點目錄,去區分網站服務器以前,LVS4層的就不支持vim

  • 相比較來講,LVS這種4層的更穩定,能承受更多的請求,承載的併發量更高,而nginx這種7層的更加靈活,能實現更多的個性化需求後端

18.7 LVS介紹瀏覽器

 

LVS介紹

  • LVS是由國人章文嵩開發bash

  • 流行度不亞於apache的httpd,基於TCP/IP作的路由和轉發,穩定性和效率很高

  • LVS最新版本基於Linux內核2.6,有好多年不更新了

  • LVS有三種常見的模式:NAT、DR、IP Tunnel

  • LVS架構中有一個核心角色叫作分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)

LVS NAT模式

  • LVS NAT模式,藉助iptables的nat表來實現

  • 用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去

  • rs須要設定網關爲分發器的內網ip

  • 用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸

  • 在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源

輸入圖片說明

  • 原理圖解釋:

    • Load Balancer,就是一個分發器;把用戶的請求,分發給後端的Real Server ,Real Server這些服務器接收到請求之後,處理好用戶請求之後,就從新丟回給Load Balancer;最後Load Balancer再返回給用戶;

    • 這個模式的弊端,當訪問量、請求量、反饋量大的時候,Load Balancer的壓力很大

    • LVS規模,通常規模最多支持10來臺服務器,超過10臺的話就會有力不從心;

    • nat模式這個結構,只須要有一個公網IP,其餘real server服務器所有在內網就能夠實現。優勢,節省不少的資源

LVS IP Tunnel模式

  • LVS IP Tunnel模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip

  • 客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上

  • rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身

輸入圖片說明

  • 原理圖解釋:

    • 在load balancer與real server之間創建了虛擬通道,叫作 ip tunnel ;其實是更改了數據包目的IP;請求過來經過load balancer,經過在real server上配置的VIP;用戶請求的時候,數據包裏面包好的目的IP,當數據包到達load balancer的時候,load balancer會進行一個數據包目的IP的更改,而後發送到具體的real server上,經過lvs的本身的算法,進行實現到底傳輸到哪一個real server上;而後real server再解包處理,再經過一個VIP直接返回到用戶,這就省略數據回到load balancer分發器的過程,這樣就load balancer就沒有瓶頸

LVS DR模式

  • LVS DR模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip

    • 和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址

    • rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身

輸入圖片說明


 

 

 

18.8 LVS調度算法

 

LVS調度算法

  • 輪詢 Round-Robin 簡稱:rr 最簡單的也是最容易理解

    • 用戶請求過來,均衡的分發到rs上

  • 加權輪詢 Weight Round-Robin 簡稱:wrr

    • 帶權重的輪詢,能夠對機器單獨設置權重,對高權重的機器發送的請求會多一些

  • 最小鏈接 Least-Connection 簡稱: lc

    • 把請求發送到請求數量小的rs上

  • 加權最小鏈接 Weight Least-Connection 簡稱: wlc

    • 對請求數量小的rs,加上一個權重,使他優先

  • 基於局部性的最小鏈接 Locality-Based Least Connections 簡稱: lblc

  • 帶複製的基於局部性最小鏈接 Locality-Based Least Connections with Replication 簡稱: lblcr

  • 目標地址散列調度 Destination Hashing 簡稱:dh

  • 源地址散列調度 Source Hashing 簡稱: sh

18.9/18.10 LVS NAT模式搭建

LVS NAT模式搭建

  • NAT模式搭建 – 準備工做

    • 內網:133.133,設置網關爲133.130

    • 內網:133.132,設置網關爲133.130

    • 內網:133.130,外網:147.144(vmware僅主機模式)

    • 三臺機器

    • 分發器,也叫調度器(簡寫爲dir)

    • rs1

    • rs2

    • 三臺機器上都執行執行

    • systemctl stop firewalld; systemc disable firewalld

    • systemctl start iptables-services; iptables -F; service iptables save

  • NAT模式搭建

    • 在dir上安裝ipvsadm

    • yum install -y ipvsdam

    • 在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh//內容以下

 

#! /bin/bash
# director 服務器上開啓路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
​# 關閉icmp的重定向
​echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectsecho 0 > /proc/sys/net/ipv4/conf/default/send_redirects
​# 注意區分網卡名字,阿銘的兩個網卡分別爲ens33和ens37
​echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
​echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
​# director 設置nat防火牆
​iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE
# director設置ipvsadm
​IPVSADM='/usr/sbin/ipvsadm'
​$IPVSADM -C$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3
​$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
​$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
  • NAT模式效果測試

    • 兩臺rs上都安裝nginx

    • 設置兩臺rs的主頁,作一個區分,也就是說直接curl兩臺rs的ip時,獲得不一樣的結果

    • 瀏覽器裏訪問192.168.142.147,多訪問幾回看結果差別

LVS NAT模式搭建

NAT模式搭建-準備工做

  • NAT模式是經過iptables實現的,因此必須配置一些iptables規則

1.在配置前準備三臺機器,一臺做爲分發器,也叫作調度器,簡稱 dir,另外兩臺就是real server,用來處理用戶請求的服務器,rs一、rs2(克隆虛擬機步驟

安裝ifconfig命令
yum install -y net-tools
  • A機器IP爲192.168.74.12九、B機器IP爲192.168.74.130,C機器IP爲192.168.74.133

    • A機器增長一塊網卡,並啓動查看網段爲192.168.204(根據本身機器來設置),設置新的網卡IP爲192.168.204.1,並在物理機訪問這個IP地址,看是否正常通訊

    輸入圖片說明

  • PS:網關最後設置,不然包沒法下載

  • B機器和C機器的網關必須設置成分發器(即A機器)的內網IP,若不設置成它的網關,是無法通訊的

    • 這時B、C機器就沒法上網了
網卡配置文件中更改(即本機器)
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

更改完以後重啓網絡服務
systemctl restart network

[root@hf-02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.74.129  0.0.0.0         UG    1024   0        0 eno16777736
192.168.74.0    0.0.0.0         255.255.255.0   U     0      0        0 eno16777736
[root@hf-02 ~]#
  1. 三臺機器設置完成後,關閉三臺機器的防火牆
關閉firewalld服務
systemctl stop firewalld

使firewalld服務再也不開機啓動
systemctl disable firewalld
  1. 機器B、機器C 下載安裝iptables-services 包
yum install -y iptables-services
  • 有時下載包的時候特別慢,就是epel.repo源的緣由致使的,這裏能夠臨時關閉,就是直接更更名字便可(由於epel.repo源是國外的資源,因此很慢)
[root@hf-01 ~]# cd /etc/yum.repos.d/
[root@hf-01 yum.repos.d]# ls
CentOS7-Base-163.repo  CentOS-Sources.repo  epel.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo    epel-testing.repo
[root@hf-01 yum.repos.d]# mv epel.repo epel.repo.1
[root@hf-01 yum.repos.d]#
  1. 機器B、機器C 啓動iptables服務
  • systemctl start iptables
機器B
[root@hf-02 ~]# systemctl start iptables
[root@hf-02 ~]# 

機器C
[root@hf-03 ~]# systemctl start iptables
[root@hf-03 ~]#
  1. 機器B、機器C 設置開機啓動
  • systemctl enable iptables
  • systemctl enable iptables
  • iptables -F
  • service iptables save
機器B
[root@hf-02 ~]# systemctl start iptables
[root@hf-02 ~]# systemctl enable iptables
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
[root@hf-02 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   71  5076 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    1   124 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 48 packets, 4680 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@hf-02 ~]# iptables -F       //清空表的規則,以便後續實驗
[root@hf-02 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  肯定  ]
[root@hf-02 ~]# 

機器C同上
  1. 清空並查看機器A的規則
[root@hf-01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 19 packets, 1296 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 11 packets, 1108 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@hf-01 ~]#
  1. 關閉機器機器A,機器B,機器C,三臺機器的selinux
setenforce 0    //臨時關閉selinux

getenforce    //查看selinux是否關閉


爲了保險起見,在配置文件中永久關閉selinux
vi /etc/selinux/config
SELINUX=enforcing更改成SELINUX=disabled

準備工做結束

NAT模式搭建

  1. 首先在分發器dir上(即A機器),安裝ipvsadm ,這個是實現 lvs 的一個重要的工具,缺乏這個工具,將沒有辦法實現 lvs 的功能
[root@hf-01 ~]# yum install -y ipvsadm
  1. 在分發器(A機器)上編寫一個腳本(LVS全都是以腳本的方式去執行的,這樣比較方便進行維護不用一條命令一條命令的進行操做)
[root@hf-01 ~]# vim /usr/local/sbin/lvs_nat.sh

#! /bin/bash
# director 服務器上開啓路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward   //對內核參數修改,打開路由轉發
# 關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects  //假裝操做,否則不能轉發rs的數據
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects //假裝操做,否則不能轉發rs的數據
# 注意區分網卡名字,dir機器的兩塊網卡分別爲ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects  
echo 0 > /proc/sys/net/ipv4/conf/ens36/send_redirects
# director 設置nat防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE  //MASQUERADE實現同網段的機器去上網,路由器使用的就是這個功能
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm' //設置一個變量,方便下面命令引用
$IPVSADM -C //清空規則
$IPVSADM -A -t 192.168.204.1:80 -s lc -p 3   //用來定義lvs 的模式;wlc,爲算法,能夠按需求選擇 lvs 裏面適合的算法
$IPVSADM -a -t 192.168.204.1:80 -r 192.168.74.131:80 -m -w 1     //小規則,-r 指定dir機器IP,-m 指定nat模式,-w指定rs權重 
$IPVSADM -a -t 192.168.204.1:80 -r 192.168.74.133:80 -m -w 1    //小規則,-r 指定dir機器IP,-m 指定nat模式,-w指定rs權重
  • IPVSADM -A -t 192.168.142.144:80 -s lc -p 3 : -A增長一個規則,-t 制定lvs 模式,以後IP 就是dir的IP,-s 指定算法;-p 指定超時時間,(數據包轉發超時時間)
  • 超時時間解釋:
    • 用戶1訪問的是a機器,-p 的意思就是在同一個時間,一直在同一臺機器上進行請求
  1. 執行腳本,如果沒輸出,表示腳本沒有錯誤
[root@hf-01 ~]# sh /usr/local/sbin/lvs_nat.sh
[root@hf-01 ~]#

NAT模式效果測試

  • NAT模式效果測試
    • 兩臺rs上都安裝nginx
    • 設置兩臺rs的主頁,作一個區分,也就是說直接curl兩臺rs的ip時,獲得不一樣的結果
    • 瀏覽器裏訪問192.168.142.147,多訪問幾回看結果差別
  1. 首先查看B機器和C機器上的nginx服務是否開啓
B機器
[root@hf-02 ~]# ps aux |grep nginx
root      1102  0.0  0.0  20996   624 ?        Ss   05:29   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    1107  0.0  0.3  23440  3208 ?        S    05:29   0:00 nginx: worker process
nobody    1108  0.0  0.3  23440  3208 ?        S    05:29   0:00 nginx: worker process
root      3580  0.0  0.0 112676   984 pts/1    R+   08:30   0:00 grep --color=auto nginx
[root@hf-02 ~]# 

C機器
[root@hf-03 ~]# ps aux |grep nginx
root       821  0.0  0.0  20996   628 ?        Ss   08:00   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     825  0.0  0.3  23440  3212 ?        S    08:00   0:00 nginx: worker process
nobody     826  0.0  0.3  23440  3212 ?        S    08:00   0:00 nginx: worker process
root      1851  0.0  0.0 112676   984 pts/0    R+   08:30   0:00 grep --color=auto nginx
[root@hf-03 ~]#
  1. 設置兩臺rs的主頁,作一個區分,也就是說直接curl兩臺rs的ip時,獲得不一樣的結果
  • 編輯B機器的索引頁
[root@hf-02 ~]# vim /usr/share/nginx/html/index.html
[root@hf-02 ~]# curl localhost
hanfeng-02
  • 編輯B機器的索引頁
[root@hf-03 ~]# vim /usr/share/nginx/html/index.html
[root@hf-03 ~]# curl localhost
hanfeng-03
  1. 這時瀏覽器訪問模擬的公網IP,即192.168.204.1,如果瀏覽器訪問不成功,可用curl測試
[root@hf-01 ~]# curl 192.168.204.1
hanfeng-02
[root@hf-01 ~]# curl 192.168.204.1
hanfeng-03
  1. 查看A機器上的nat規則
[root@hf-01 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 108 packets, 5472 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 108 packets, 5472 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       192.168.74.0/24      0.0.0.0/0           
[root@hf-01 ~]#
  1. 查看 ipvsadm 規則
[root@hf-01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.204.1:80 wlc persistent 3
  -> 192.168.74.131:80            Masq    1      0          0         
  -> 192.168.74.133:80            Masq    1      0          0         
[root@hf-01 ~]#

 

友情連接:http://www.apelearn.com阿銘linux

相關文章
相關標籤/搜索