Nginx以及LVS集群

第一、详细描述常见nginx常用模块和模块的使用示例

1)、main配置段常见的配置指令

正常运行必备的配置
(1)user:
    Syntax: user user [group]
    Default: user nobody nobody
    Context: main
(2)pid /PATH/TO/PID_FILE
    指定存储nginx主进程进程号码的文件路径
(3)include file|mask
    指明包含进来的其他配置文件片断
(4)load_module file
    指明要装载的动态模块
性能优化相关的配置:
1.worker_processes number|auto
    worker进程的数量;通常应该等于小于当前主机的cpu的物理核心数
    auto: 当前主机物理cpu核心数
2.worker_cpu_affinity cpumask....;
    worker_cpu_affinity auto [cpumask];
cpu mask:
    000000001: 0号cpu
    000000010: 1号cpu
    ....
3.worker_priority number
    指定worker进程的nice值,设定worker进程优先级;[-20,20]
4.worker_rlimit_nofile number
    worker进程所能够打开的文件数量上限

2)、调试、定位问题

- 1.daemon on|off
    - 是否以守护进程方式运行Nginx
- 2.master_process on|off
    - 是否以master/worker模型运行nginx;默认为on
- 3.error_log file [level]:

3)、 事件驱动相关的配置:

    events {
        ...
    }
- 1.worker_connections number
    - 每个worker进程所能够打开的最大并发连接数数量
    - worker_process * worker_connections
- 2.use method
    - 指明并发连接请求的处理方法
        - use epoll
- 3.accept_mutex on|off
    - 处理新的连接请求的方法;on意味着由各worker轮流处理新请求,off意味着每个新请求的到达都会通知所有的worker进程

4)、 http协议的相关配置:

    http {
        ......
        server_name
        root
        location [OPERATOR]/url/{
            ....
        }
    }
    server {
        ...
    }
}

5)、 与套接字相关的配置:

- 1.server{...}
    - 配置一个虚拟主机
server {
    listen address[:PORT]|PORT;
    server_name SERVER_NAME;
    root /PATH/TO/DOCUMENT_ROOT;
}
- 2.listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
- listen address[:port][default_server][ssl][http2|spdy][backlog=number][rcvbuf=size][sndbuf=size]
    - default_server: 设定为默认虚拟主机
    - ssl: 限制仅能够通过ssl连接提供服务
    - backlog=number: 后援队列长度
    - rcvbuf=size: 接收缓冲区大小
    - sndbuf=size: 发送缓冲区大小
- 3.server_name name...
    - 指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串
        - 支持*通配任意长度的任意字符;server_name \*.magedu.com www.magedu.\*
        - 支持一起始的字符做正则表达式模式匹配; server_name  ~^www\d+\.magedu\.com$
    - 匹配机制:
        - (1)首先是字符串精确匹配
        - (2)左侧*通配符
        - (3)右侧*通配符
        - (4)正则表达式
    - 练习:定义四个虚拟主机,混合使用三种类型的虚拟主机;仅开放给来自于本地网络中的主机访问;
- 4.tcp_nodelay on|off
    - 在keepalived模式下的连接是否启用TCP_NODELAY选项
- tcp_nopush on|off
    - 在sendfile模式下,是否启用TCP_CORK选项
- 5.sendfile on|off
    - 是否启用sendfile功能
### 定义路径相关的配置
- 6.root path
    - 设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置: http,server,location,if in location
- 7.location[=|~|~*|^~]url {...}
    - 在一个server中location配置段可以存在多个,用于实现从url到文件系统的路径映射;nginx会根据用户其你去的URL来检查定义的所有location,并找出一个最佳匹配,后儿应用其配置
=:对URL做精确匹配: 例如: http://www.magedu.com/, http://www.magedu.com/index.html
    location = / {
        ...
    }
~: 对URL做正则表达式模式匹配,区分字符大小写
~*: 对URL做正则表达式模式匹配,不区分字符大小写
^~: 对URL的左半部分做匹配检查,不区分字符大小
不带符号: 匹配起始于utl的所有的url
匹配优先级: =, ^~, ~/~*, 不带符号;

- root/vhosts/www/htdocs
    - http://www.magedu.com/index.html --> /vhosts/www/htdocs/index.html
server {
        root /vhosts/www/htdocs/
        location /admin/ {
            root /webapps/app1/data/
        }
}
- 8.alias path;
    - 定义路径别名,文档映射的另一种机制;仅能用于location上下文
    - 注意: location中使用root指令和alias指令的意义不同
        - (a) root,给定的路径对应于location中的/url/左侧的/
        - (b) alias,给定的路径对应于location中的/url/右侧的/
- 9.index file...
    - 默认资源; http,server,location
- 10.error_page code...[=[reponse]] url;
- 11.try_files file... url

6)、 定义客户端请求的相关配置

- 12.keepalive_timeout timeout [header_timeout]
    - 设定保持连接的超时时长, 0表示禁止长连接; 默认为75s;(一般可以调低点)
- 13.keepalive_request number
    - 在一次长连接上所允许请求的资源的最大数量,默认为100;
- 14.keepalive_disable none|browser ...
    - 对哪种浏览器禁用长连接
- 15.send_timeout time
    - 向客户端发送相应报文的超时时长,此处,是指两次写操作之间的间隔时长
- 16.client_body_buffer_size size
    - 用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
- 17.client_body_temp_path path [level1[level2[level3]]]
    - 设定用于存储客户端请求报文body部分的临时存储路径及子目录结构和数量
        - 16进制的数字
        - client_body_temp_path path /var/tmp/client_body 2 1 1
        - 1:表示用1位16进制数字表示一级子目录; 0-f
        - 2:表示用2位16进制数字表示二级子目录: 00-ff
        - 3:表示用2位16进制数字表示三级子目录: 00-ff

7)、 对客户端进行限制的相关配置

- 18.limit_rate rate
    - 限制响应给客户端的传输速率,单位是bytes/second,0表示无限制
- 19.limit_except method...{...}
    - 限制对指定的请求方法之外的其他方法的使用客户端
    limit_except GET {
        allow 192.168.1.0/24;
        deny all;
    }

8)、 文件操作优化的配置

- 20.aio on|off|threads[=pool]
    - 是否启用aio功能
- 21.directio size|off
    - 在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;
- 22.open_file_cache off
    - open_file_cache max=N [inactive=time]
        - nginx可以缓存以下三种信息
            - (1)文件的描述符、文件大小和最近一次的修改时间
            - (2)打开的目录结构
            - (3)没有找到的或者没有权限访问的文件的相关信息
        - max=N: 可缓存的缓存项上限;达到上线后会使用LRU算法实现缓存管理
        - inactive=time: 缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_min_uses指令所指定的次数的缓存项即为非活动项
- 23.open_file_cache_valid time
    - 缓存项有效性的检查频率,默认为60s
- 24.open_file_cache_min_uses number
    - 在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项
- 25.open_file_cache_error on|off
    - 是否缓存查找时发生错误的文件一类的信息

9)、 ngx_http_access_module模块:

实现基于ip的访问控制功能

- 26.allow address|CIDR|unix:|all
- 27.deny address|CIDR|unix:|all
    - http,server,location,limit_except

10)、 ngx_http_auth_basic_module模块

实现基于用户的访问控制,使用basic机制进行用户认证

- 28.auth_basic string|off
- 29.auth_basic_user_file file
    location /admin/ {
        alias /webapps/app1/data/;
        auth_basic "Admin Area";
        auth_basic_use_file /etc/nginx/.ngxpasswd;
    } 

注意: htpasswd命令由httpd-tools提供

11)、 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 处于等待客户端发出请求的空闲连接数
  • 30.stub_status
    配置示例
    location /basic_status {
        syub_status;
    }

12)、ngx_http_log_module模块

- 31.log_format name string...
    - string可以使用nginx核心模块及其他模块内嵌的变量
    - 课外作业: 为nginx定义使用类似于httpd的combined格式的访问日志
- 32.access_log path [format[buffer=size][gzip[=level]][flush=time][if=condition]]
    - access_log off
    - 访问日志文件路径,格式及相关的缓冲的配置
        - buffer=size
        - flush=time
- 33.open_log_file_cache max=N [inactive=time][min_uses=N][valid=time]
    - open_log_file_cache off
    - 缓存各日志文件相关的元数据信息
    - max: 缓存的最大文件描述符数量
    - min_use: 在inactive指定的时长内访问大于等于此值方可被当做活动项
    - inactive: 非活动时长
    - valid: 验证缓存中各缓存项是否为活动项的时间间隔

13)、 ngx_http_gzip_module模块

- 1.gzip on|off
- 2.gzip_comp_level level
- 3.gzip_disable regex....
- 4.gzip_min_length length
    - 启用压缩功能的响应报文大小阙值
- 5.gzip_buffers number size
    - 支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小
- 6.gzip_proxied off|expired|no-cache|private|no_last_modified|no_etag|auth|any...
    - nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的
        - off: 对代理的请求不启用
        - no-cache, no-store,private: 表示从被代理服务器收到的响应报文首部的cache-control的值为此三者中任何一个,则启用压缩功能
- 7.gzip_types mime-type...
    - 压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能

14)、 ngx_http_ssl_module模块

- 1.ssl on|off
    - 开启或关闭ssl功能
- 2、ssl_certificate file
    - 当前虚拟主机使用PEM格式的证书文件
- 3、ssl_certificate_key file
    - 当前虚拟主机上与其证书匹配的私钥文件
- 4、ssl_protocols [SSLv2][SSLv3][TLSv1][TLSv1.1][TLSv1.2]
    - 支持ssl协议版本,默认为后三个
- 5、ssl_session_cache off|none|[builtin[:size]][shared:name:size]
    - builtin[:size]: 使用OpenSSL内建的缓存,此缓存为每worker进程私有
    - [shared:name:size]: 在各worker之间使用一个共享的缓存
- 6、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;
    }   

15)、 ngx_http_rewrite_module模块

将用户请求的URI基于regex所描述的模式进行检查,而后完成替换
- 1、rewrite regex replacement [flag]
    - 将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI
    - 注意: 如果在同一级配置块中存在多个rewrite规则,那么会自上而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
    - 如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端
        - 301: 永久重定向
    - [flag]:
|参数选项|解释说明| 
| :-------- | :--------|
|last|重写完成后停止对当前URI在当前location中后续的其他重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环| 
|break|重写完成后停止对当前URI在当前location中后续的其他重写操作,而后直接跳转至重写规则配置块之后的其他配置;结束循环|
|redirect|重写完成后以临时重定向方式直接返回重写后生成的新URI客户端,由客户端重新发起请求;不能以http://或https://开头|
|permanent|重写完成后以临时重定向方式直接返回重写后生成的新URI客户端,由客户端重新发起请求|
- 2、return
    - return conde [text];
    - return code URL;
    - return URL;
- 3、rewrite_log on|off
    - 是否开启重写日志
- 4、if(condition){...}
    - 引入一个新的配置上写文;条件满足时,执行配置块中的配置指令;server,location
    - condition:
| 比较操作符 | 解释说明 | 
| :-------- | --------|
|==| 等于|
|!=|不等于|
|~|模式匹配,区分字符大小写|
|~*|模式匹配,不区分字符大小写|
|!~|模式不匹配,区分字符大小写|
|!~*|模式不匹配,不区分字符大小写| 

|文件及目录存在性判断|解释说明| 
| :-------- | --------|
|-e|!-e|
|-f|!-f|
|-d|!-d|
|-x|!-x|
- 5、set $variable value
    - 用户自定义变量

16)、 ngx_http_referer_module模块

- 1、valid_referers none|blocked|server_names|string...;
    - 定义referer首部的合法可用值
        - none:请求报文首部没有referer首部
        - blocked: 请求报文的referer首部没有值
        - server_names: 参数,其可以有值作为主机名或主机名模式
            - arbitrary_string:直接字符串,但可使用*作通配符
            - regular expreseeion:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\\.magedu\\.com;
  • 配置示例:
    valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
    if($invalid_referer){
        return 403;
    }

第二、简述Linux集群类型、系统扩展方式及调度方法

.Cluster: 计算机集合,为解决某个特定问题组合自起来形成的单个系统

一. 集群概念

集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。

二. Linux Cluster类型:

1)、LB: Load Balancing, 负载均衡

2)、HA: High Availiablity, 高可用

  • A=MTBF/(MTBF+MTTR)
  • (0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%

3)、HP: High Performance, 高性能

  • www.top500.org
  • 分布式系统:
    • 分布式存储
    • 分布式计算

三. 系统扩展方式:

  • Scale UP: 向上扩展
  • Scale OUT: 向外扩展

四. LB Cluster的实现:

硬件:
    - F5 Big-IP
    - Citrix Netscaler
    - A10 A10
软件:
    - lvs: Linux Virtual Server
    - nginx
    - haproxy
    - ats: apache traffic server
    - perlbal
    - pound
基于工作的协议层次划分:
    - 传输层(通用): (DPORT)
        - lvs
        - nginx: (stream)
        - haproxy: (mode tcp)
    - 应用层(专用): (自定义的请求模型分类)
        - proxy server
            - http: nginx(http,httpd,haproxy(mode http),.....
            - fastcgi: nginx, httpd....
            - mysql: mysql-proxy,.....
    - 站点指标:
        - PV: Page View
        - UV: Unique Vistor
        - IP:
会话保持:
    - (1) session sticky
        - Source IP
        - Cookie
    - (2) session replication
        - session cluster
    - (3) session server        

第三、简述lvs四种集群特点及使用场景

lvs集群的类型:
  lvs-nat: 修改请求报文的目标IP; 多目标IP的DNAT
  lvs-dr: 操纵封装新的MAC地址
  lvs-tun: 在原请求IP报文之外新加一个IP首部
  lvs-fullnat: 修改请求报文的源和目标IP

lvs-nat:

Nginx以及LVS集群_第1张图片
lvs-nat
  • 多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
  • (1)RIP和DIP必须在同一个IP网络,且应该使用私网地址; RS的网关要指向DIP
  • (2)请求报文和响应报文都必须经由Director转发; Director易于成为系统瓶颈
  • (3)支持端口映射,可修改请求报文的目标PORT
  • (4)vs必须是Linux系统,rs可以是任意系统

lvs-dr:

Nginx以及LVS集群_第2张图片
lvs-dr
  • Direct Routing, 直接路由
  • 通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
  • Director和各RS都得配置使用VIP
  • (1)确保前端路由器将目标IP为VIP的请求报文发往Director
    • (a) 在前端网关做静态绑定
    • (b) 在RS上使用arptables
    • (c) 在RS上修改内核参数以限制arp通告及应答级别
      • arp_annouce
      • arp_ignore
  • (2)RS的RIP可以使用私网地址,也可以是公网地址;RIP和DIP在同一IP网络; RIP的网关不能指向DIP,以确保响应报文不会经由Director
  • (3)RS跟Director要在同一个物理网络
  • (4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client
  • (5) 不支持端口映射

lvs-tun:

Nginx以及LVS集群_第3张图片
lvs-tun
  • 转发方式: 不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
  • (1) DIP,VIP,RIP都应该是公网地址;
  • (2) RS的网关不能,也不可能指向DIP;
  • (3) 请求报文要经由Director,但响应报文不能经由Director;
  • (4) RS的OS得支持隧道功能;

lvs-fullnat:

Nginx以及LVS集群_第4张图片
lvs-fullnat
  • 通过同事修改请求报文的源IP地址和目标IP地址进行转发;
    • CIP ---> DIP
    • VIP ---> RIP
  • (1) VIP是公网地址, RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
  • (2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;
  • (3) 请求和响应报文都经由Director;
  • (4) 支持端口映射;
  • 注意: 此类型默认不支持;

总结:

  • lvs-nat, lvs-fullnet: 请求和响应报文都经由Director;
    • lvs-nat: RIP的网关要指向DIP;
    • lvs-fullnat: RIP和DIP未必在同一IP网络,但要能通信;
  • lvs-dr, lvs-tun: 请求报文要经由Director,但响应报文由RS直接发往Client;
    • lvs-dr: 通过封装新的MAC首部实现,通过MAC网络转发
    • lvs-tun: 通过在原IP报文之外封装新的IP首部实现转发,支持远距离通信;

第四、描述LVS-NAT、LVS-DR的工作原理并实现配置

1、LVS-NAT模式

原理
通过网络地址转换的方法来实现调度的。首先调度器(DR)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为DR服务器。)把响应后的数据包发送给DR,DR再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

1.2、NAT模式的优缺点

1、NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
2、只需要在LB上配置一个公网IP地址就可以了。
3、每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
4、NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

1.3、实验环境

客户机Client: 192.168.44.108
lvs负载均衡Director
VIP:192.168.30.99 DIP:192.168.163.128
RealServer: 两台
RS1: 192.168.163.11
RS2: 192.168.163.12
RS服务器均配置httpd服务,并经由RS做轮询调度

1.4、安装过程

RealServer:

同时在RS1&RS2上安装httpd服务,为了掩饰区别做对应html的修改,并启动.

[root@rs1 ~]#yum install httpd -y
[root@rs1 ~]#ss -tnl
State       Recv-Q Send-Q                           Local Address:Port                                          Peer Address:Port              
LISTEN      0      128                                          *:111                                                      *:*                  
LISTEN      0      5                                192.168.122.1:53                                                       *:*                  
LISTEN      0      128                                          *:22                                                       *:*                  
LISTEN      0      128                                  127.0.0.1:631                                                      *:*                  
LISTEN      0      100                                  127.0.0.1:25                                                       *:*                  
LISTEN      0      128                                  127.0.0.1:6010                                                     *:*                  
LISTEN      0      128                                         :::111                                                     :::*                  
LISTEN      0      128                                         :::80
[root@rs1 ~]#vim /var/www/html/test1.html
[root@rs1 ~]#cat /var/www/html/test1.html 

RS1,192.168.163.11

[root@rs2 ~]#cat /var/www/html/test1.html

RS2,192.168.163.12

[root@rs1 ~]#systemctl start httpd.service
[root@rs2 ~]#systemctl start httpd.service
Director

安装ipvsadm,开启核心转发功能,添加规则

[root@director ~]#yum install ipvsadm -y
[root@director ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
[root@director ~]#ipvsadm -A -t 192.168.30.99:80 -s rr
[root@director ~]#ipvsadm -a -t 192.168.30.99:80 -r 192.168.163.11 -m
[root@director ~]#ipvsadm -a -t 192.168.30.99:80 -r 192.168.163.12 -m
[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.30.99:80 rr
  -> 192.168.163.11:80            Masq    1      0          0         
  -> 192.168.163.12:80            Masq    1      0          0
Client测试
[root@CentOS6 ~]#for i in {1..10}; do curl http://192.168.30.99/test1.html; done

RS1,192.168.163.11

RS2,192.168.163.12

RS1,192.168.163.11

RS2,192.168.163.12

RS1,192.168.163.11

RS2,192.168.163.12

RS1,192.168.163.11

RS2,192.168.163.12

RS1,192.168.163.11

RS2,192.168.163.12

Nginx以及LVS集群_第5张图片
image.png

Nginx以及LVS集群_第6张图片
image.png

2、LVS-DR模式(直接路由模式)

原理
DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

2.1、实验环境

客户机Client: 192.168.44.108
lvs负载均衡Director
VIP:192.168.30.99 DIP:192.168.30.100
RealServer: 两台
RS1: 192.168.30.11
RS2: 192.168.30.12
RS服务器均配置httpd服务,并经由RS做轮询调度

2.2、安装过程

RealServer

配置脚本写入内核,对arp_ignore&&arp_announce做调整

[root@rs1 ~]#vim announce.sh
[root@rs1 ~]#cat 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 ~]#bash -n announce.sh
[root@rs1 ~]#bash -x announce.sh start

脚本传输给RS2,做同样的操作

[root@rs1 ~]#scp announce.sh 192.168.30.12:/root/

在RS上添加VIP并限制响应报文从lo端口流出

[root@rs1 ~]#ifconfig lo:0 192.168.30.99 netmask 255.255.255.255 broadcast 192.168.30.99 up
[root@rs1 ~]#route add -host 192.168.30.99 dev lo:0

安装httpd服务,编辑不同的配置页并且启动

[root@rs1 ~]#yum install httpd -y
[root@rs1 ~]#ss -tnl
State       Recv-Q Send-Q                           Local Address:Port                                          Peer Address:Port              
LISTEN      0      128                                          *:111                                                      *:*                  
LISTEN      0      5                                192.168.122.1:53                                                       *:*                  
LISTEN      0      128                                          *:22                                                       *:*                  
LISTEN      0      128                                  127.0.0.1:631                                                      *:*                  
LISTEN      0      100                                  127.0.0.1:25                                                       *:*                  
LISTEN      0      128                                  127.0.0.1:6010                                                     *:*                  
LISTEN      0      128                                         :::111                                                     :::*                  
LISTEN      0      128                                         :::80
[root@rs1 ~]#vim /var/www/html/test1.html
[root@rs1 ~]#cat /var/www/html/test1.html 

RS1,192.168.163.11

[root@rs2 ~]#cat /var/www/html/test1.html

RS2,192.168.163.12

Director
[root@director ~]#yum install ipvsadm -y
[root@director ~]#ifconfig ens33:0 192.168.30.99 netmask 255.255.255.255 broadcast 192.168.30.99 up
[root@director ~]#route add -host 192.168.30.99 dev ens33:0
[root@director ~]#ipvsadm -A -t 192.168.30.99:80 -s rr
[root@director ~]#ipvsadm -a -t 192.168.30.99:80 -r 192.168.30.11 -g
[root@director ~]#ipvsadm -a -t 192.168.30.99:80 -r 192.168.30.12 -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.30.99:80 rr
  -> 192.168.30.11:80             Route   1      0          0         
  -> 192.168.30.12:80             Route   1      0          0  
Client客户机测试
[root@CentOS6 ~]#for i in {1..20}; do curl http://192.168.30.99/test1.html; done

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

RS2,192.168.30.12

RS1,192.168.30.11

Nginx以及LVS集群_第7张图片
image.png
Nginx以及LVS集群_第8张图片
image.png

你可能感兴趣的:(Nginx以及LVS集群)