美文网首页
Nginx以及LVS集群

Nginx以及LVS集群

作者: 佐岸的咖啡 | 来源:发表于2018-12-10 23:30 被阅读0次

    第一、详细描述常见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, 高性能

    三. 系统扩展方式:

    • 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:

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

    lvs-dr:

    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:

    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:

    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 
    <h1>RS1,192.168.163.11</h1>
    [root@rs2 ~]#cat /var/www/html/test1.html 
    <h1>RS2,192.168.163.12</h1>
    
    [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
    <h1>RS1,192.168.163.11</h1>
    <h1>RS2,192.168.163.12</h1>
    <h1>RS1,192.168.163.11</h1>
    <h1>RS2,192.168.163.12</h1>
    <h1>RS1,192.168.163.11</h1>
    <h1>RS2,192.168.163.12</h1>
    <h1>RS1,192.168.163.11</h1>
    <h1>RS2,192.168.163.12</h1>
    <h1>RS1,192.168.163.11</h1>
    <h1>RS2,192.168.163.12</h1>
    
    image.png
    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 
    <h1>RS1,192.168.163.11</h1>
    [root@rs2 ~]#cat /var/www/html/test1.html 
    <h1>RS2,192.168.163.12</h1>
    
    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
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    <h1>RS2,192.168.30.12</h1>
    <h1>RS1,192.168.30.11</h1>
    
    image.png image.png

    相关文章

      网友评论

          本文标题:Nginx以及LVS集群

          本文链接:https://www.haomeiwen.com/subject/rvurhqtx.html