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阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容