1. 程式人生 > >LVS-DR模式實現調度負載

LVS-DR模式實現調度負載

per 完成 interval 工作 手動添加 local 比較 dr模式 stats

本篇文章主要梳理一下LVS前端調度過程及用戶請求過程

實驗架構

技術分享圖片

準備工作

添加各主機路由聯通主機通信

Client IP

route add default gw 172.20.17.19

Route

路由主機開啟地址轉發功能

  • 將/etc/sysctl.conf文件中的net.ipv4.ip_forward 值改為 1,後執行sysctl -p

後端主機
後端主機包括LVS,web server 主機,在其主機添加響應路由

route  add -net  172.20.17.0 netmask 255.255.255.0 gw 192.168.214.133

部署HTTPserver

RS1與RS2安裝web環境

[root@www ~]# yum install httpd php-fpm php-mysql -y

在RS1和RS2主機的httpd.conf中添加如下內容

<IfModule dir_module>
    DirectoryIndex index.html
    DirectoryIndex index.php       #添加這一行
</IfModule>
#
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

配置完成後重啟服務單點測試web服務

RS1和RS2服務設置arp抑制規則

ARP抑制要在添加VIP之前,否正會產生不輪詢的現象

RS1和RS2都執行

[root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_announce 

[root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 

LVS,RS1,RS2添加VIP

三臺主機執行:

ip addr add  192.168.214.140 dev lo

配置LVS集群規則

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

添加LVS集群,定義調度模式為RR輪詢

[root@LVS ~]# ipvsadm -A -t 192.168.214.140:80 -s rr

將後端兩臺RS 主機加入集群,設置工作模式為DR模型

[root@LVS ~]# ipvsadm -a -t 192.168.214.140:80 -r 192.168.214.145 -g
[root@LVS ~]# ipvsadm -a -t 192.168.214.140:80 -r 192.168.214.143 -g

工作模式

  • -g: gateway, dr模式,默認

  • -i: ipip, tun模式

  • -m: masquerade, nat模式

  • -w weight:權重

查看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  192.168.214.140:80 rr
  -> 192.168.214.143:80           Route   1      0          0         
  -> 192.168.214.145:80           Route   1      0          0   

Client查看測試

[root@yufu ~]# for i in {1..10};do curl 192.168.214.140;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER

部署DNS

這裏用DNS是讓客戶端使用域名解析的方式訪問web服務,這樣比較完整地模擬出正常環境下用戶的請求響應過程

安裝DNS

[root@DNS ~]# yum install bind -y

啟動服務

[root@DNS ~]# systemctl start named

編輯named.conf文件內容如下

options {
//      listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
//      allow-query     { localhost; };
        allow-query     { any; };

編輯named.rfc1912.zones文件添加如下配置段

zone "yufu123.com" IN {
        type master;
        file "yufu123.com.zone";

};

在/var/named/目錄下創建yufu123.com.zone

vim /var/named/yufu123.com.zone

$TTL 1D
@       IN      SOA     ns1.yufu123.com. admin.yufu.com (

                        20180703
                        1H
                        5M
                        7D
                        1D )

        IN      NS      ns1.yufu123.com.
ns1     IN      A       172.20.17.20
www.yufu123.com.   IN   A       192.168.214.140
yufu123.com.       IN   A       192.168.214.140

給DNS主機添加一條路由指向路由器的網口

[root@DNS ~]# route add -net 192.168.214.0 netmask 255.255.255.0 gw 172.20.17.19

Client使用域名測試

使用域名解析時,需要將路由表中的地址改為DNS服務的主機地址,如下

echo "nameserver 172.20.17.20" > /etc/resolv.conf

使用域名測試訪問

[root@yufu ~]# for i in {1..10};do curl http://www.yufu123.com;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER

不帶www測試

[root@yufu ~]# for i in {1..10};do curl http://yufu123.com;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER

一些問題

至此LVS前端負載調度的過程已經實現了,但是還存在很多的問題:比如LVS的角度節點存在單點問題,因為我只部署了一臺,在圖中畫出了備用的節點,可以使用Keepalived實現LVS的高可用,但是這裏並不打算實現高可用的架構。此外,還存在另一個問題,就是LVS無法對後端的RS進行健康狀態監測,LVS只有調度功能,沒有健康狀態監測的功能,如果後端服務down機,lvs還是會一如既往地往故障主機上調度請求的,要實現健康狀態監測,可以自己編寫檢測腳本實現,或者使用第三方工具輔助。後面的內容,就來實現基於第三方工具實現LVS的自動檢測後端主機並自動添加刪除RS節點的功能。

ldirectord監控和控制LVS

ldirectord 可以監控和控制LVS守護進程,還可以管理LVS規則

安裝ldirectord

[root@LVS ~]# yum install ldirectord-3.9.6-0rc1.1.1.x86_64.rpm  -y

復制配置文件

[root@LVS ~]# cp  /usr/share/doc/ldirectord-3.9.6/ldirectord.cf  /etc/ha.d/ldirectord.cf

編輯內容

# Global Directives
checktimeout=3
checkinterval=1
#fallback=127.0.0.1:80
#fallback6=[::1]:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
#emailalert="[email protected]"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no

# Sample for an http virtual service
virtual=192.168.214.140:80
        real=192.168.214.143:80 gate
        real=192.168.214.145:80 gate
#       real=192.168.6.6:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
        receive="RS"

通過上面的配置,無需再使用ipvsadm工具手動添加規則,在ldirectord配置文件中定義好集群規則即可。當後端主機故障無法連通時,ldirectord會自動剔除故障節點,節點恢復時自動添加

LVS-DR模式實現調度負載