第一、详细描述常见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:
- 多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
- (1)RIP和DIP必须在同一个IP网络,且应该使用私网地址; RS的网关要指向DIP
- (2)请求报文和响应报文都必须经由Director转发; Director易于成为系统瓶颈
- (3)支持端口映射,可修改请求报文的目标PORT
- (4)vs必须是Linux系统,rs可以是任意系统
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:
- 转发方式: 不修改请求报文的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:
- 通过同事修改请求报文的源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
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