第十三周作业

nginx 是什么?

NGNIX是一个免费的、开源的、高性能的HTTP服务器和反向代理,以及一个IMAP/POP3代理服务器。NGNX以其高性能、稳定性、丰富的特征集、简单的配置和低的资源消耗而著称。

nginx 的程序结构

nginx是高度模块化的,程序启动的时候由一个master进程生成管理多个worker来进行并发相应用户请求。可以达到10k并发。缓存进程则是由cache loader(载入缓存对象)和cache manager(管理缓存镜像)两部分组成。高度模块化的nginx只有在后期版本才支持DSO(动态加载模块)部分模块支持动态装载和卸载。

 

images

 

特性:异步、事件驱动和非阻塞

  • 并发请求处理:通过poll/select 实现,只有当poll不支持时才使用select
  • 文件IO: 高级IO sendfile,异步,mmap

nginx模块配置文件结构

  • 主配置文件:/etc/nginx/nginx.conf
  • 辅配置文件:/etc/nginx/conf.d/*.conf 

配置文件模块分类: 

核心模块:core module

标准模块:

  1. HTTP modles: web模块

                      Standard HTTP modules:标准http模块

                      Optional HTTP modules 可选http模块

  1. Mail module:右键模块
  2. Stream module:流模块(传输层代理)
  3. 3rd party modules:第三方模块,分布式文件系统需要用到

nginx的功用:

  1. 静态web资源服务器;(图片服务器,或js/css/html/txt等静态资源服务器)
  2. 结合FastCGI/uwSGI/SCGI等协议反代动态资源请求。
  3. http/https协议的反向代理;
  4. imap4/pop3协议的反向代理;
  5. tcp/udp协议的请求转发;
主配置文件

http协议相关配置指令:

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size] 

default_server:默认虚拟主机

ssl:权限仅能够通过ssl连接提供服务;

backlog=number:后院队列长度;

rcvbuf=size:接收缓冲区大小;

sndbuf=size:发送缓冲区大小;

server_name name…: 虚拟的服务的主机名

支持*通配符号:server_name,magedu.com www.m,agedu.com

支持~其实字符做正则表达式模式匹配:server_name 【~^www\d+.magedu.com$ 】

匹配机制:

首先是字符串精确匹配;

左侧*通配符匹配;

右侧*通配符匹配;

正则表达式;

tcp_nodelay on | off

在keepalived模式下链接是否启动TPC_NODELAY选项;

tcp_nopush on | off

在sendfile模式下,是否启动TPC_CORK选项,是否一起打包发送;

sendfile on | off

是否启动sendfile 功能;

定义路径相关配置:

root path:

设定web资源路径映射,用于指明用户请求的url所对应的本地文件系统上的文档所在的目录路径。

可配置位置:

http、server、location、if in location

location [ = | ~ | ~* | ^~ ] URI {…}

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射,nginx会根据用户请求的uri来检查定义的所有location,并找出一个最佳匹配而后应用器配置;

=:对URI做精确匹配;

~:对URI做正则表达式模式匹配,区分字符大小写;

~*:对URI做正则表达式模式匹配,不区分字符大小写;

^~:对URI做左半部分做匹配检查,不区分字符大小写;

不带符号:匹配其实于此URI的所有URL;

匹配优先级:

= >^~ > ~ >~* > /

书写格式:

alias path:

定义路径别名,文档映射的另一种机制,仅能用于location上下文。

注意:location汇总使用root指令和alias指令的意义不同;1、root.给定的路径对应用location中的/uri/左侧、;2、aliash:给定路径对应location中的/uri/右侧/;

index file …:定义多个主页,至左而右;

默认资源:http,server,location;

error_page code… [=[rsponse]] uri;

可自定义错误响应码。

try_files file … uri;

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

keepalive_timeout timeout [header_timeout];

设定保存连接的超时时长,0表示禁止长连接,默认是75于第13项共同配置

keepalive_requests number:

再一次长连接上允许请求的资源的最大连接数量,默认100;

keepalive_disable none | browser …;

对那种浏览器禁用长连接;

send_timeout time;

想客户端发响应报文的超时时长,此处只是连词写操作之间的间隔时长。

client_body_buffer_size size;

用于接收客户端请求报文的body部分的缓存区大小,默认为16k,超出此大小时,将其被暂存到磁盘上有client_bodu_temp_path指令定义的位置;

client_body_temp_path path {level1 [leve 2 [leve3]]];

设定用于存储客户端请求报文的body比分的临时存储路径及子目录结构和数量;

16进制的数字为每层的目录:client_body_temp_path /var/tmp/client_body 1 2 3

1:表示1位16进制数字表一级子目录:

2:表示用2位16进制数字表示二级子目录;

3:表示用2位16进制数字表示三级子目录;

 

limit_tate rate;

限制响应给客户端的传输数率,单位是bytes/second, 0表示无限制;

limit_except method … {…}

限制对指定的请求方法之外的其他方法的使用客户端;

文件操作优化配置

aio on | off | threads [=pool];

是否启用aio功能;优化阻塞;

directio size | off;

在Linux主机启动O_DIRECT标记,此文件标示;大于等于给定的使用限制例如:direction 4m;

open_file_cache off;

ofen_file_cachemax=N [inactive=time];

nginx可以缓存以下三种信息;

文件的描述符,文件大小和最近一次的修改时间。

打开的目录结构

没有找到的或者没有权限访问的文件的相关信息。

max=N:可缓存的缓存项上限,达到上限后会使用LRU实现缓存管理;

inactive=time:缓存项目的非活动时长,在此处之地当的时长内未被命中的或者命中的次数少于ipen_file_chace_min_uses指令所指定的次数和缓存项即为非活动项目;

open_file_cache_valid time;

缓存项有效性的检查频率;默认为60s;没有指定的活动次数便归为非活动项,达到上限后LRU计算清理缓存,每隔设定值清理。

open_file_cache_min_user number;

在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多次方可被归类为活动项目;

open_file_cache_errors on | off;

是否缓存查找时发生错误的文件信息;

nginx模块

nginx_http_access_module

实现基于ip地址访问控制功能;

allow address | CIDR | unix | all;

deny address | CIDR | unix | all;

http、server、location、limit_except

nginx_http_auth_basic_module

auth_basic_string | off;

auth_bashic_user_file file;

location /admin/ { 

ngxpasswd 由httpd-tools 提供

ngx_http_stub_status_module

stub_status;

配置示例:

用于输出nginx的基本状态信息;

Active connections:2

server accepts handled requests

120233 120233 120028

Reading: Wrinting Waiting: 1

Active connections :活动的连接数,数组至左往右;

accepts:已经接收的客户端请求的总数;

handled:已经处理完成的客户端请求的总数;

requests:客户端发来的请求总数;

Reading:处于读取客户端请求报文首部的连接数:

Writing:处于向客户端发送响应报文过程中的连接数;

Waiting:处于等待客户端发出请求的空闲连接数;

log_format name string …;

string 可以使用nginx 核心模块及其模块内建的变量;

access_log path [format [buffer=size]缓冲区大小[gzip[=level]]压缩存放[flush=time][if=condition]];

access_log off;

访问日志文件路径,格式及相关的缓冲的配置;

buffer=size

flush=time

open_log_file_cache max=N [inavtive=time][min_use=N][valid=time]

open_log_file_cache off;缓冲各日志文件相关的元数据信息;

max:缓存的最大文件数量;

min_use:在inactive指定的时长内访问大于等于此值方可被当作活动项;

inactive:非活动时长;

valid:验证缓存中各缓存项是否为活动项的时间间隔;

ngx_http_gzip_module

数据压缩模块,可以压数据容量大小;

gzip on | off

是否启用压缩模块

gzip_comp_level level

压缩等级 level等级1-9;

gzip_disable regex…;

使用“User-Agent”头部字段匹配任何指定的正则表达式禁用响应的

gzip_min_length length;

启用压缩功能的相应报文大小阈值

gzip_buffers number size;

支持实现压缩功能时为其配置的缓存区数量及每个缓存区的大小;

gzip_proxied off | expired | on-cache | on-store | provate | no_last_modified | no_etag | auth | any …;

启用时处off之外都需要指明,nginx 作为代理服务器接收到从被代理服务器发送的响应报文后,在任何条件下启用压缩功能的;

off:对代理服务器的请求不启用;

on-cache,no-store,private:表示从被代理服务器收到的响应报文首部cache-control的值为此三者中任何一个,则启动压缩功能;

gzip_types mime-type…;

压缩过滤器,仅对此设定的MIME类型的内容启动压缩功能:

ngx_http_ssl_module

ssl on | off;

是否对虚拟主机启动HTTPS协议

ssl_certificate file;

当前虚拟主机使用PEM格式的证书文件;

ssl_certificate_key file;

当前虚拟机上其证书匹配的私钥文件;

ssl_protocols [SSLv2] [SSLv3] [TLSv1][TLSv1.1][TLSc1.2];

支持的ssl 协议版本,默认为后三个;

ssl_session_cache off | none | builtin [:size];

builtin[:size] 使用OpenSSL内建的缓存,为此缓存为每个worker进程私有;

ssl_session_timeout time;

客户端一侧的连接可以复用ssl session cache 中缓存的ssl 参数的有效时长;

配置示例:

ngx_http_rewrite_module 

将用户请求的URI基于regex所藐视的模式进行检查,而后完成替换;

例如

rewrit regex replacement [flag]

将用户请求的URI的regex的条件匹配替换为replacement的新URI;

注意:rewrit多条规则的同时会被至上而下逐行匹配,如果没有设定[flag]标志位则有可能出现无线循环;

replacement是http://或https://开头,则替换结果会直接重定向返回客户端。301:永久重定向。

[flag]:

last:重写完成后停止对当前URI在档期那location中后续其它重写操作,而后对新的URI启动新一轮重写检查,前提重启新一轮循环;

break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则匹配块之后其它配置,结束循环;

redirect:重写完成后以临时重定向方式直接返回重写后生成的URI给客户端,由客户端重新发起请求,不能以http://或http://开头。

permanent:重写完成以后永久重定向方式直接返回重写后生成的URI给客户端,由客户端重新发起请求。

return

return code [text];

return code URL;

return URL;

停止处理并返回给客户端;

rewrite_log on | off

是否开启重写日志

if (condition ) {…}

映入一个新的配置上下文,条件满足时,执行配置块中的配置指令;

server

location

condition:

比较操作符:

==:等于

!=:不等

~:模式匹配,区分字符大小写;

~*:模式匹配,不区分字符大小写;

!~:模式不匹配,区分字符大小写;

!~*:模式不匹配,不区分字符大小写;

文件及目录操作性判断:

-e,!-e:文件、路径、或连接文件是否存在:不存在,可以是字符串和变量

-f,!-f:文件是否存在,不存在

-d,!-d:路径是否存在,不不存在

-x,!-x:检查文件是否为可执行的文件,可以是字符串和变量

set $variable value;

用户自定义变量;

ngx_http_referer_module

模块用于阻止对”Refere"开头字段中具有无效值的请求的站点访问。

valid_referers none | blocked | server_names |string …;

定义referer首部的合法可用值

none:请求报文没有收到referer首部;

blocked:请求报文的referer首部没有值;

server_names:参数,其可以有值作为主机名或主机名模式;

arbitrary_string:直接字符串,但可使用*做通配符;

regular expression :被指定正则表达式模式匹配到的字符串,要使用*打头;例如:*.magedu.com;

配置示例:

ngx_stream_proxy_module

基于传输层进行TCP、UDP和UNIX机型数据转发,实现反向代理服务器。

proxy_pass address;

设置代理服务器的地址,地址可以指定唯域名或IP地址,以及端口或者$upstream定义组后调用。

可设置位置:server

proxy_timeout timeout;

在客户端或代理服务器连接上的两次连续读写操作之间设置超时,如果在此时间内没有发送数据则关闭连接。

默认:proxy_timeout 10m;

可设置:stream,server

proxy_connect_timeout time;

定义与代理服务器建立连接超时;

默认:proxy_connect_timeout 60s;

可设置:stream,server

语法格式:

nginx_http_upstream_module

用于定义可由proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass和memcached_pass 指令引用的服务器组。

upstream name {…}

定义后端服务器组,会引入一个新的上下文,组内的服务器由server定义,定义的组可被proxy_pass调用。

可设置:http

server address [parameters]

定义upstream上下文中的server组成员,以及相关参数;

可设置:upstream

address;

主机名;

ip+port

unix:/PATH/TO/SOME_SOCK_FILE

parameters:

weight=number 权重,默认为1.

max_fails=number;失败尝试次数,超过后server主机将被停用。

max_conns :当前的服务器每个worke最大并发连接数。

backup:备用服务器,只有所有主机都down时生效。

down:主机状态不可用。

least_conn;

最少连接调度算法;当server拥有不同权重时为wlc:当所有后端主机的连接数相同是则使用wrr调度;

可配置:upstream

least_time header | last_byte; [inflight]

指定组使用负载均衡方法,其中请求以最少的平均响应时间和最少的活动里娜姐传递给服务器,同时考虑服务器的权重,如果有多个这样的额服务器。则使用加权魂环平衡方法一次尝试他们。

header:如果header指定了参数,则使用接收response_header时间

last_byte:如果last_byte指定了参数,则使用接收full_response的时间

infight:如果inflight指定了参数(1.11.6),则还会考虑不完整的请求。

ip_hash:

源地址hash算法,能够将来自同一个源ip地址的亲求始终发往同一个upstream 的server;

hash key [consistent];

指定hash的key表实现调度,key可以是文本、变量或(文本+变量),从组中添加或删除服务器可能会导致将大多数密钥重新映射到不同的服务器。

consistent:参数,指定用一致性hash算法;

可配置:upstream

ngx_http_fastcgi_module

fastcgi模块允许想fastcgi服务器发送数据。

fastcgi_pass address;

可配置:location、if in location

fastcgi_index name;

定义fastcgi默认主页:

可配置:http、server,location

也可定义在$fastcti-script_name变量中,需要开启调用include fastcgi_params; 

fastcgi_param parameter value [if_not_empty];

设置应该传递给fastcgi服务器的参数,该值可以包含文本、变量以及他们的组合。需要开启调用include fastcgi_params。

可配置:http,server,location

fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

定义fastcgi缓存规则,缓存位置为磁盘上的文件系统,由path所指定的路径来定义;

可配置:http

常用设定:

levels=levels;缓存目录层级数量,分别1,2,3级别。

keys_zone=name:size;设置内存空间名字:大小

inactive=time:非活动时间。

max_sizi=size:磁盘缓存可用空间。

1、http配置定义规则,2、server或location调用规则(调用时需要同时设定保存哪些内容)

fastcgi_cache zone | off;

调用指定的自定义缓存来缓存数据;

可设置:http,server,location

fastcgi_cache_key string;

定义用作缓存项的key的字符串;

可设置:http,server,location

fastcgi_cache_methods GET | HEAD | POST …;

为哪些请求方法使用缓存;

默认:fastcgi_cache_methods GET HEAD;

可设定;http,server,lcoation

fastcgi_cache_valid [code…] time;

单独设定响应码各自的缓存时长;

可设定:http,server,location

fastcgi_cache_min_uses number  munber;

缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指定的次数方可认作活动项;

默认:fastcgi_cache_min_user 1;
可设定:http,server,location

fastcgi_keep_conn on | off;

默认fastcgi服务发送响应报文后关闭连接,此功能开启时保持连接。

默认:fastcgi_keep_conn off;

可设定:http, server,location

ngx_http_proxy_module

将访问本机的请求,准发至后台另一台服务器进行响应,即实现反向代理服务器功能。

定义转发,实现反向代理服务

定义缓存

代理服务器请求、响应超时时长

proxy_pass URI;

可配置;location,if in location,limit_except

proxy_pass http://host[:port]; 将在端口后补全Real Server服务的设定路径(例如:http默认的/var/www/html/)

proxy_pass http://host[:port]/PATH; 如果location定义为路径则将URI替换唯/uri/var/www/html/

location定义的URI是使用的正则表达式,在if语句或limit_except中私用proxy_pass 指令,则host不能带有PATH.

proxy_set_header filed value

可配置:http,server,location

设定发往后端主机的请求报文的请求首部值。

value 修改的内容。

proxy_set_header value $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for(适应较多)

图形工具:wireshark

proxy_cache_path

自定义缓格式

可配置:http

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

 

proxy_cache zone | off; 

开启调用自定义的缓存zone或关闭功能;

可配置:http,serer,location;

proxy_cache_key string;

定义缓存中用于“键”的内容;

可配置:http,server,location

定义对特定响应吗的响应内容的缓存时长,也可只设定响应时间。

可配置:http,server,location

proxy_cache_use_stale

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off

在某些服务通信期间可以使用过期缓存响应给客户端。

默认:proxy_cache_use_stale off;

可配置:http,server,location;

error:与服务器建立连接,请求或响应发生错误时;

timeout:与服务器建立连接,传递请求或响应发生错误时;

invalid_header:服务器无响应;

updating:更新时允许使用过期缓存响应。

服务器返回代码:

http_500,http_502,http_503,http_504,http_403_http_404,http_429.

proxy_cache_methods GET | HEAD | POST …;

客户请求是包含列表中的指令,则缓存响应 GET, HEAD, POST…

默认:proxy_cache_methods GET HEAD;

可配置:http,server,location

proxy_hide_header filed;

默认情况下,nginx不会从代理服务器对客户端的响应中传递标题段"Date“,”Server“,”X-Pad“和”X-Accel-“。改proxy_hide_header指令设置不会传递的其它字段

 

proxy_connect_timeout time;

定义与服务器建立连接的超时,应该注意,此超时通常不会超过75秒。

默认:proxy_connect_timeout 60s;

可配置:http,server,location

porxy_read_timeout time;

定义从代理服务器响应的超时时长,超时时间则关闭连接。

默认:proxy_read_timeout 60s;

可配置:http,server,location

proxy_send_timeout time;

设置将请求传送至代理服务器的超时时长,如果连续两次超过设定的时长,则关闭连接。

默认:proxy_send_timeout 60s;

可配置:http,server,location

ngx_http_headers_module

给响应报文添加自定义首部或修改响应报文指定的首部值。

add_header name value [always];

添加自定义首部;

可配置:http,server,location,if in location

expires epoch | max | off;

用于定义Expore 或 cache-control 首部的值;

@:指定一天的是时间expires @15h30m;

max:是指10年。

 

Linux 常见的集群类型

LB:linux Balancing :负载均衡是由众多服务主机在同一个网络内构建出来将来至客户端请求的大量数据分布其它主机中处理请求,能够有效缓解常规模式下主机负荷。

HA:High Availiablity 高可用性能服务集群,集群中会每个服务都是一个节点,一旦节点出现软件或硬件故障就会导致单点故障,影响整个服务正常运行,而HA的出现能够解决单点故障,有效提高了服务的稳定性。

High peroframnce 高性能服务器集群将众多台主机的资源有效利用、提高高性能有分布式存储;分布式计算;

 

扩展方法:

  1. 向上扩展:提升硬件的cpu、内存等处理设备对于提升的结果所花费的费用是不明显的。
  2. 向内扩展:将多台服务主机集合起来,不但能有效的提高性能,对于成本也是向上扩展成本要低的多。

实现方法:分为硬件和软件实现例如负载均衡:硬件厂商就有F5 Big-IP、Citrix Netscaler而软件可以有lvs(linux virtual server)基于某些协议来实现调度。协议还区分为(内核空间的TCP协议的 lvs)工作在用户空间模拟内核空间TCP协议的nginx,haproxy…等

 

LVS四种集群优点和是采用场景

LVS-NAT:LVS-NetWork Address Translation 网络地址转换

修改请求报文的目标地址为 RIP,根据算法将请求发送至 Real Server,响应报文返回时通过网络地址在经由Virtual Server 将源地址修改为本机VIP,在返回至客户段。

  1. Director:需要打开核心转发;
  2. RIP和DIP必须在同一个IP网络,且应该使用私用网络地址;RS的网关哟啊指向DIP
  3. 请求报文和响应报文都必须经由DIrector转发;Director易于成为瓶颈。
  4. 支持端口映射,可修改请求报文的目标PORT。
  5. VS必须是Linux系统,RS可以是任意系统;

image

LVS-TUN:IP Tunneling:

转发模式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在源IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文根据算法挑选出来的RS目标,RS响应报文时拆除VS分装的IP首部响应给客户端(源IP是VIP,目标IP是CIP)。

  1. DIP、VIP、RIP都应该是公网地址;
  2. RS的网关不能也不可能指向DIP,
  3. 请求报文要经由DIrector,但响应报文不经由DIrector;
  4. 不支持端口映射;
  5. RS的OS得支持隧道功能;

image

LVS-DR:LVS-Direct Routing; 直接路由 

通过为请求报文重新封装一个MAC地址首部然后转发,源MAC是DIP所在的接口的MAC,目标MAC是根据算法分配的RS的RIP所在接口的MAC地址,(源IP:PORT,目标IP:PORT)保持不变;响应报文返回时直接返回给客户端。

Director 的VIP和DIP要在同一物理网络内

RS要配置vip地址,但不做请求报文;

确保前端路由器将目标IP为VIP的请求报文发往Director;

在前端网关做静态绑定;

在RS上使用artables;

在RS上修改内核参数以限制arp通告及应答级别;

arp_announce 限制通告级别

arp_ignore  限制应答级别

RS的RIP可以使用私有网地址,也可以是公网地址;RIP与DIP在同一IP网络,RIP的网关不能指向DIP,以确保响应报文不会经由Director;

RS跟Director要在同一个物理网络;

请求报文要经由Director,但响应不能经由Director,而是由RS直接发送Client;

不支持端口映射;

image

LVS—fullnat

同时修改请求报文的源IP地址和目标IP地址进行转发;

  1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络,因此,RIP的网关一般不会指向DIP
  2. RS收到请求报文源地址是DIP,因此,只能响应给DIP,但Director还要将其Clinet;
  3. 请求和响应报文都经过Director;
  4. 支持端口映射;

注意:此类型默认不支持;

image

LVS-DR示例:

配置环境:

  1. ​Director 主机[ens33 IP:192.168.124.3]

  2. RS1 主机[ens33 IP:192.168.124.4]

  3. RS2 主机[ens33 IP:192.168.124.5]

系统版本:CentOS 7

 

​Director 主机

yum -y instlal ipvsadm # 安装管理协议

ifconfig ens33:0 192.168.124.200 netmask 255.255.255.0 broadcast ens33:0 up #设置监听网卡(可设置别名)IP地址网段并启用即是:VIP

ipvsadm -A -t 192.168.124.200:80 -s rr # Director 监听地址及端口,-s 指定轮巡方式rr

ipvsadm -a -t 192.168.124.200:80 -r 192.168.124.4 -g  # 添加管理后台真实主机将监听的200的80端口传送至124.4 主机

ipvsadm -a -t 192.168.124.200:80 -r 192.168.124.5 -g 

RS1 主机 和RS2 主机

          安装web服务http并启用默认端口80

yum -y install httpd

两天主机分别建立默认访问主页:

vim /var/www/html/index.html

<h1> 192.168.124.4 </h1>

vim /var/www/html/index.html

<h1> 192.168.124.5 </h1>

ifconfig ens33:0 192.168.124.200 netmask 255.255.255.0 broadcast 192.168.124.200 up  设置监听地址 VIP 并启用

echo 1 >

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore    修改全局通告级别
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 修改lo通知级别
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

arp_ignore: 

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:保留未使用

8:不回应所有的arp请求

arp_announce

0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。

2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。

启动httpd 服务

systemctl start httpd

通过浏览器访问:192.168.124.200:80/index.html 多次刷新查看结果

 

 

LVS-Net 示例:

配置环境:

  1. ​Director 主机[ ens33 IP:192.168.124.3] [ens37 IP:192.168.35.10 ] 内外两块网卡

  2. RS1 主机[ ens33 IP:192.168.30.21 ] 内网

  3. RS2 主机[ ens33 IP:192.168.30.22 ] 内网

系统版本:CentOS 7

 

​Director 主机

ipvsadm -A 192.168.124.3:80 -s rr

ipvsadm -a 192.168.124.3:80 -t 192.168.30.21 -g

ipvsadm -a 192.168.124.3:80 -t 192.168.30.22 -g

R3和R4 主机

yum -y install httpd # 安装http服务

vim /var/www/html/index.html

<h1> 192.168.30.21</h1>

vim /var/www/html/index.html

<h1> 192.168.30.22 </h1>

浏览器输入192.168.124.3:80/index.html 多次刷新测试

 

 

原创文章,作者:N28_刚好遇到小熊猫,如若转载,请注明出处:http://www.178linux.com/124724

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code