Nginx與lvs詳解

詳細描述常見nginx常用模塊和模塊的使用示例

nginx常見的模塊分類:

核心模塊:core module
Nginx 核心功能模塊負責Nginx的全局應用,主要對應主配置文件的Main區塊和Events區塊

  • Main 區塊:常見的配置如下
user nginx;
    設置運行nginx的用戶名,每個指令都心“ ; ”結尾

worker_processes auto;
    配置工作進程的數量,應用小于等于當前主機的物理核心數
    auto表示自動檢查內核核心數,并啟動

error_log /var/log/nginx/error.log;
    錯誤日志文件路徑

pid /run/nginx.pid;
    指定存儲nginx主進程進程號碼的文件路徑

load_module file
    指明要裝載的動態模塊

include file | mask
    指明包含進來的其他配置文件

worker_cpu_affinity auto [cpumask]
    cpu綁定的配置,auto表示自動綁定cpu核心
    cpumask表示自定義核心數,表示如下:
        CPU MASK:
            00000000:8個0表示cpu編號
            00000001:0號cpu
            00000010:1號cpu
            00000100:2號cpu
                          ......
            10000000:8號cpu

worker_priority number
    指定worker進程的nice值
    設定worker進程優先級在[-20,20]之間

worker_rlimit_nofile number
    worker進程所能夠打開的文件數量上限

daemon on|off  是否以守護進程方式運行Nignx

master_process on|off
    是否以master/worker模型運行nginx;默認為on

  • Events 區塊:在配置文件中以events{}形式配置,常見的選項有:
worker_connections 1024;
#單進程所能夠打開的最大并發連接數數量

user select | poll
#指明并發連接請求的處理方法(select | poll)

accept_mutex on | oof
處理新的連接請求的方法;
on意味著由各worker輪流處理新請求
off意味著每個新請求的到達都會通知所有的worker進程

標準模塊:HTTP modules,Standard HTTP modules,Optional HTTP modules,Mail modules等。這些模塊非常豐富,列舉常見的模塊

ngx_http_auth_basic_module模塊:實現基于用戶的訪問控制,使用basic機制進行用戶認證

auth_basic string | off;認證的用戶字符
auth_basic_user_file file;認證的文件路徑
配置示例:
location /admin/ {
    alias /webapps/app1/data/;
    auth_basic "Admin Area";
    auth_basic_user_file /etc/nginx/.ngxpasswd;
                            }

ngx_http_stub_status_module模塊:用于輸出nginx的基本狀態信息

Active connections: 291 
server accepts handled requests
    16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106    
                    
Active connections: 活動狀態的連接數;
accepts:已經接受的客戶端請求的總數;
handled:已經處理完成的客戶端請求的總數;
requests:客戶端發來的總的請求數;
Reading:處于讀取客戶端請求報文首部的連接的連接數;
Writing:處于向客戶端發送響應報文過程中的連接數;
Waiting:處于等待客戶端發出請求的空閑連接數;

配置示例:
location  /basic_status {
    stub_status;
}

ngx_http_ssl_module模塊:ssl安全模塊功能

ssl on | off;
    是否開啟ssl安全功能
                        
ssl_certificate file;
    當前虛擬主機使用PEM格式的證書文件;
                        
ssl_certificate_key file;
    當前虛擬主機上與其證書匹配的私鑰文件;
                        
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
    支持ssl協議版本,默認為后三個;
                        
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
    builtin[:size]:使用OpenSSL內建的緩存,此緩存為每worker進程私有;                      
    [shared:name:size]:在各worker之間使用一個共享的緩存;
                        
ssl_session_timeout time;
    客戶端一側的連接可以復用ssl session cache中緩存 的ssl參數的有效時長;

配置示例:
server {
    listen 443 ssl;
    server_name www.magedu.com;
    root /vhosts/ssl/htdocs;
    ssl on;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    ssl_session_cache shared:sslcache:20m;
}

ngx_http_referer_module模塊:反盜鏈功能

valid_referers none | blocked | server_names | string ...;
    定義referer首部的合法可用值;
                    
        none:請求報文首部沒有referer首部;
        blocked:請求報文的referer首部沒有值;
        server_names:參數,其可以有值作為主機名或主機名模式;
            arbitrary_string:直接字符串,但可使用*作通配符;
            regular expression:被指定的正則表達式模式匹配到的字符串;要使用~打頭,例如 ~.*\.magedu\.com;

配置示例:
valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
                    
if($invalid_referer) {
    return http://www.magedu.com/invalid.jpg;
}

以上僅僅是nginx配置模塊的冰冊一角,詳細的配置文檔可以查看官方文檔:http://nginx.org/en/docs/

簡述Linux集群類型、系統擴展方式及調度方法

Linux集群類型分為:LB(負載均衡),HA(高可用),HP(高性能)幾種類型。
系統的擴展方式一般有向上擴展和向外擴展兩種,在linux服務中一般是向外擴展。
調度方法有靜態方法與動態方法兩天類型

靜態方法:是僅根據算法本身進行調度主要有以下幾種方法:

  • RR:roundrobin,輪詢
  • WRR:Weighted RR,加權輪詢
  • SH:Source Hashing,實現session sticky,對源IP地址進行hash;將來自于同一個IP地址的請求始終發往第一次挑中的RS,實現會話綁定
  • DH:DH:Destination Hashing;目標地址hash,將發往同一個目標IP的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡

動態方法:主要根據每RS當前的負載狀態及調度算法進行調度

  • LC:least connections,最少連接數算法,計算方式如下:
    Overhead=activeconns(活動鏈接)*256+inactiveconns(非活動鏈接)
  • WLC:Weighted LC,權重最少連接數算法,計算方式如下:
    Overhead=(activeconns*256+inactiveconns)/weight(權重)
  • SED:Shortest Expection Delay,最短期望延遲,計算方式如下:
    Overhead=(activeconns+1)*256/weight
    此之外還有NQ,LBLC,(動態的DH算法),LBLCR,(帶復制功能的LBLC)等幾個算法不進行一一列舉了。

簡述lvs四種集群優點及使用場景

四種集群方式分別為:lvs-nat,lvs-dr,lvs-tun,lvs-fullnat。在介紹這四種工作原理之前,了解一下lvs集群中的一些術語。

vs:Virtual Server,Director,Dispatcher,Balancer
rs:Real Server,upstream server,backend server
CIP:Client IP
VIP:Virtual server IP
RIP:Real server IP
DIP:Director IP

lvs-nat:
多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP地址和PORT端口來實現轉發。網絡拓撲圖如下:

lvs-nat網絡拓撲圖.png

工作原理:當client向服務器(RS集群)發送請求時,源地址為CIP地址,目標地址為VIP,調度器Diretory收到報文后發現是發給后端RS服務器的數據,通過調度發給其中的一臺RS(假設為RS1服務器),于是通過DIP向RS1的RIP1地址發送報文。
RS1服務器接收報文后,響應client的請求,于是RS1通過RIP1向Director的DIP地址發送響應報文,Director收到報文后將源地址IP從RIP改為VIP,目標IP不變發送給client。
這就完成了一次請求與響應的過程,期間client是與Director通信,并不知道RS服務器的存在。

該方式有以下幾點特點:

  • RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP
  • 請求報文和響應報文都必須經由Director轉發;所有的請求和發送都經過Director,Director易于造成系統擁塞
  • 支持端口映射,可修改請求報文的目標PORT
  • vs(Director)必須是Linux系統,rs可以是任意系統

lvs-nat是典型的反代服務器的一種應用,Director可以做靜態內容的緩存,減輕后端RS服務器的IP壓力,并且能隱藏后端的RS服務器

lvs-dr:(Direc Routing)
直接路由,通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變,由于lvs-dr是基于mac進行轉發的,所以Director和各RS都得配置使用VIP,但是Director和各RS都有VIP要保證請求只發給Director而不是直接發給RS則需要確保前端路由器將目標IP為VIP的請求報文發往Director

實現方法有以下幾種:

  • 在前端網關做靜態綁定,直接綁定mac,不進行ARP廣播,但是如果Director出現故障則會出現找不到mac地址或重新綁定的情況。
  • 在RS上使用aprtables
  • 在RS上修改內核參數以限制arp通告及應答級別將apr_announce和apr_ignore這兩個參數修改一下就可以了,一般推薦第三種方式。
    其網絡拓撲圖如下:


    lvs-dr網絡拓撲圖.png

工作原理:CIP向VIP請求報文,經過route時發現VIP在自己的網絡中,于是就通過ARP方式將報文發給VIP主機,這里的Director和RS都有VIP地址,所以要確保請求報文只能被Director接收,之后Director通過調度在報文上加上RS的MAC地址把報文扔給router,touter通過新的MAC地址找的RS主機,并發送請求報告。
RS接收到請求報文之后發送用自己的VIP地址(一般不與RIP同網卡,而在lo網卡上)直接通過router響應報文,響應報文不經過Director,從而減輕Director的負載壓力。

除了上面提到的mac問題以外該方式還有以下幾點特點:

  • RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director
  • RS跟Director要在同一個物理網絡(經過mac地址轉發的)
  • 請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client
  • 不支持端口映射

lvs-dr是為減輕Director負載壓力的一種實現方式

lvs-tun:
轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往調度挑選出的目標RS;
RS直接響應給客戶端(源IP是VIP,目標IP是CIP)
其網絡拓撲圖如下:

lvs-tun網絡拓撲圖.png

工作原理:CIP向VIP發送請求報文,通過router到達Director,Director接受報文發現是集群服務后端報文直接在報文首部再添加RS服務的RIP地址首部(假設為RS1),并通過Internet發送到RS1服務器,RS接受報文后拆封報文時第一層的RIP是本機地址,但是還有一層VIP地址首部,因此RS要支持隧道功能,能理解VIP地址并接受處理請求。
RS向CIP響應報文時,直接使用VIP做源地址,CIP做目標地址通過Internet向Client響應報文。

其特點如下:

  • DIP,VIP,RIP都應該是公網地址
  • RS的網關不能,也不可能指向DIP(響應不應該Director)
  • 請求報文要經由Director,但響應不能經由Director
  • 不支持端口映射
  • RS的OS得支持隧道功能:如果請求報文數據超過MTU(最大報文數)時,在添加首部會超過MTU而被拆分報文(要理解內層的CIP和VIP的首部)

lvs-tun一般應用在Director與RS不在同一網段,并且相隔甚遠的情況下使用。

lvs-fullnat:
通過同時修改請求報文的源IP地址和目標IP地址進行轉發。
CIP <--> DIP 請求報文時源IP從左往右,響應時目標IP從右往左
VIP <--> RIP 請求報文時目標IP從左往右,響應時源IP從右往左

lvs-fullnat網絡拓撲圖.png

工作原理:CIP向VIP發送請求,Director接收報文后知道是后端服務報文,于是修改源地址IP為DIP,目標地址IP為RIP,經過路由發送的RS服務器上。
RS服務器響應報文時,先通過RIP地址將報文發給Director的DIP,Director接收到報文后發現是Client的報文于是修改源IP為VIP,目標IP為CIP通過Internet發送給client。

lvs-fullnat的特點如下:

  • VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP
  • RS收到的請求報文源地址是DIP,因此,只能響應給DIP;但Director還要將其發往Client
  • 請求和響應報文都經由Director
  • 支持端口映射,此類型默認不支持(需要修改編譯內核)

lvs-fullnat框架一般用于Director與RS不在同一機房但可以通過內網連接的一種方式,內核默認是不支持的,需要重新編譯內核才能實現。

描述LVS-NAT、LVS-DR的工作原理并實現配置

lvs-nat和lvs-dr的工作原理上述已經說明了,這個主要將如何實現配置,在配置之前先說明一下ipvsadm工具的一般用法,先yum安裝ipvsadm之后執行一下ipvsadm -h命令查看幫助信息,具體如下:

[root@zhu ~]# ipvsadm -h
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
  ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
  ipvsadm -D -t|u|f service-address
  ipvsadm -C
  ipvsadm -R
  ipvsadm -S [-n]
  ipvsadm -a|e -t|u|f service-address -r server-address [options]
  ipvsadm -d -t|u|f service-address -r server-address
  ipvsadm -L|l [options]
  ipvsadm -Z [-t|u|f service-address]
  ipvsadm --set tcp tcpfin udp
  ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
  ipvsadm --stop-daemon state
  ipvsadm -h

Commands:
Either long or short options are allowed.
  --add-service     -A        add virtual service with options
  --edit-service    -E        edit virtual service with options
  --delete-service  -D        delete virtual service
  --clear           -C        clear the whole table
  --restore         -R        restore rules from stdin
  --save            -S        save rules to stdout
  --add-server      -a        add real server with options
  --edit-server     -e        edit real server with options
  --delete-server   -d        delete real server
  --list            -L|-l     list the table
  --zero            -Z        zero counters in a service or all services
  --set tcp tcpfin udp        set connection timeout values
  --start-daemon              start connection sync daemon
  --stop-daemon               stop connection sync daemon
  --help            -h        display this help message

Options:
  --tcp-service  -t service-address   service-address is host[:port]
  --udp-service  -u service-address   service-address is host[:port]
  --fwmark-service  -f fwmark         fwmark is an integer greater than zero
  --ipv6         -6                   fwmark entry uses IPv6
  --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
                                      the default scheduler is wlc.
  --pe            engine              alternate persistence engine may be sip,
                                      not set by default.
  --persistent   -p [timeout]         persistent service
  --netmask      -M netmask           persistent granularity mask
  --real-server  -r server-address    server-address is host (and port)
  --gatewaying   -g                   gatewaying (direct routing) (default)
  --ipip         -i                   ipip encapsulation (tunneling)
  --masquerading -m                   masquerading (NAT)
  --weight       -w weight            capacity of real server
  --u-threshold  -x uthreshold        upper threshold of connections
  --l-threshold  -y lthreshold        lower threshold of connections
  --mcast-interface interface         multicast interface for connection sync
  --syncid sid                        syncid for connection sync (default=255)
  --connection   -c                   output of current IPVS connections
  --timeout                           output of timeout (tcp tcpfin udp)
  --daemon                            output of daemon information
  --stats                             output of statistics information
  --rate                              output of rate information
  --exact                             expand numbers (display exact values)
  --thresholds                        output of thresholds information
  --persistent-conn                   output of persistent connection info
  --nosort                            disable sorting output of service/server entries
  --sort                              does nothing, for backwards compatibility
  --ops          -o                   one-packet scheduling
  --numeric      -n                   numeric output of addresses and ports
  --sched-flags  -b flags             scheduler flags (comma-separated)

ipvsadm常用的命令如下:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
vs服務相關的命令
    -A:新增VS
    -E:修改VS
    -D:刪除VS
    -R:重載規則
    -S:保存規則(相當于ipvsadm-save)
    -C:清空所有
    -L:查看
    -t:tcp協議
    -u:udp協議
    -f:firewall MARK,是一個數字
    -s:調度方法,默認是wlc
    -p:會話保持連接的

---------------------------分割線----------------------------------------

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
RS相關的命令
-a,-e,-d,-l,-t|u|f這些命令與VS服務命令一致,只是大小寫轉換而已
-r:指明服務器的IP
-w:權重

lvs-nat配置:

前期準備:
各節點時間必須同步

Director:

VIP:192.168.80.4(公網地址)
DIP:192.168.10.8(私網地址)
開啟核心轉發功能

[root@director ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.80.4  netmask 255.255.255.0  broadcast 192.168.80.255
        inet6 fe80::3f13:7555:73e5:6f08  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:01:ba:2c  txqueuelen 1000  (Ethernet)
        RX packets 122777  bytes 133041537 (126.8 MiB)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 16760  bytes 1547576 (1.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.8  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::a857:646a:90c8:ab64  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:01:ba:36  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 5983 (5.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 61  bytes 5346 (5.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

---------------------------------分割線----------------------------------

#開啟核心轉發功能
[root@director ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

RS1:

RIP:192.168.10.9(私網地址并且和Director的私網地址在同一網段)
GW:192.168.10.8(網關必須指向Director的私網地址)
RS1可以ping通Director的私網地址,安裝nginx或httpd服務,并配置主頁內容

[root@rs1 ~]# ping 192.168.10.8
PING 192.168.10.8 (192.168.10.8) 56(84) bytes of data.
64 bytes from 192.168.10.8: icmp_seq=1 ttl=64 time=0.339 ms
64 bytes from 192.168.10.8: icmp_seq=2 ttl=64 time=2.13 ms
64 bytes from 192.168.10.8: icmp_seq=3 ttl=64 time=0.320 ms
64 bytes from 192.168.10.8: icmp_seq=4 ttl=64 time=0.368 ms
64 bytes from 192.168.10.8: icmp_seq=5 ttl=64 time=0.808 ms
^C
--- 192.168.10.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.320/0.794/2.137/0.695 ms

RS2:
RIP:192.168.10.10(私網地址并且和Director的私網地址在同一網段)
GW:192.168.10.8(網關必須指向Director的私網地址)
RS2可以ping通Director的私網地址,安裝nginx或httpd服務,并配置主頁內容

[root@rs2 ~]# ping 192.168.10.8
PING 192.168.10.8 (192.168.10.8) 56(84) bytes of data.
64 bytes from 192.168.10.8: icmp_seq=1 ttl=64 time=0.392 ms
64 bytes from 192.168.10.8: icmp_seq=2 ttl=64 time=0.558 ms
64 bytes from 192.168.10.8: icmp_seq=3 ttl=64 time=0.367 ms
64 bytes from 192.168.10.8: icmp_seq=4 ttl=64 time=0.367 ms
64 bytes from 192.168.10.8: icmp_seq=5 ttl=64 time=0.462 ms
^C
--- 192.168.10.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.367/0.429/0.558/0.074 ms

驗證服務是否配置成功

[root@director ~]# curl http://192.168.10.9/test1.html    #連接RS1的nginx服務
<h1>RS1:192.168.10.9</h1>
[root@director ~]# curl http://192.168.10.10/test1.html    #連接RS2的nginx服務
<h1>RS2:192.168.10.10</h1>

安裝ipvsadm:

[root@director ~]# yum install ipvsadm -y
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
正在解決依賴關系
--> 正在檢查事務
......
Running transaction
  正在安裝    : ipvsadm-1.27-7.el7.x86_64                                                                 1/1 
  驗證中      : ipvsadm-1.27-7.el7.x86_64                                                                 1/1 

已安裝:
  ipvsadm.x86_64 0:1.27-7.el7

完畢!

配置lvs-nat
配置Director

[root@director ~]# ipvsadm -A -t 192.168.80.4:80 -s rr

# -s 指明調度方式為rr,Director服務要ip:80

添加RS服務器

[root@director ~]# ipvsadm -a -t 192.168.80.4:80 -r 192.168.10.9 -m
[root@director ~]# ipvsadm -a -t 192.168.80.4:80 -r 192.168.10.10 -m

# -r:添加RS服務器;-m:指明是nat模式

檢查配置結果:

[root@director ~]# 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.80.4:80 rr
  -> 192.168.10.9:80              Masq    1      0          0         
  -> 192.168.10.10:80             Masq    1      0          0 

驗證結果:

[root@node1 ~]# for i in {1..10}; do curl http://192.168.80.4/test1.html; done
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>

lvs-dr配置:

前期準備:
各節點時間必須同步

Director:

VIP:192.168.10.8
DIP:192.168.80.4

在ens33:0網卡上配置如下:

[root@director ~]# ifconfig ens33:0 192.168.10.8 netmask 255.255.255.255 broadcast 192.168.10.8 up
[root@director ~]# route add -host 192.168.10.8 dev ens33:0

RS1:

VIP:192.168.10.8
RIP1:192.168.80.20
在lo:0上配置VIP

[root@rs1 ~]# ifconfig lo:0 192.168.10.8 netmask 255.255.255.255 broadcast 192.168.10.8 up

RS2:

VIP:192.168.10.8
RIP2:192.168.80.22
在lo:0上配置VIP

[root@rs2 ~]# ifconfig lo:0 192.168.10.8 netmask 255.255.255.255 broadcast 192.168.10.8 up

兩臺RS配置腳本寫入內核,對arp_ignore&&arp_announce做調整

[root@rs1 ~]# vim announce.sh 
#!/bin/bash
#
case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce    
    ;;
stop)
    ifconfig lo:0 down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce    
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

--------------------------------------分割線------------------------------

[root@rs1 ~]# route add -host 192.168.10.8 dev lo:0

# route add 命令指定192.168.10.8的IP只能經過lo:0這個網卡發送出去,確保是VIP響應而不是RIP響應

在Director上安裝并配置ipvsadm:

[root@director ~]# yum install ipvsadm -y
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.sjtu.edu.cn
 * extras: ftp.sjtu.edu.cn
 * updates: mirrors.shu.edu.cn
......
Running transaction
  正在安裝    : ipvsadm-1.27-7.el7.x86_64                                                                 1/1 
  驗證中      : ipvsadm-1.27-7.el7.x86_64                                                                 1/1 

已安裝:
  ipvsadm.x86_64 0:1.27-7.el7                                                                                 

完畢!
[root@director ~]# ipvsadm -A -t 192.168.10.8:80 -s rr
[root@director ~]# ipvsadm -a -t 192.168.10.8:80 -r 192.168.80.20 -g
[root@director ~]# ipvsadm -a -t 192.168.10.8:80 -r 192.168.80.22 -g
[root@director ~]# 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.10.8:80 rr
  -> 192.168.80.20:80             Route   1      0          0         
  -> 192.168.80.22:80             Route   1      0          0 

# -g:表示dr類型,默認是dr

驗證結果:

[root@node1 ~]# for i in {1..10}; do curl http://192.168.10.8/test1.html; done
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容