一、常见nginx常用模块和模块的使用示例
1.性能相关的模块配置:
1.worker_processes auto|number #worker进程的数量,通常为当前主机的cpu物理核心数目;
2.worker_cpu_affinity auto [cpumask] #将work进程绑定在固定的cpu上提高缓存命中率
3.worker_priority_number #指定worker进程优先级
4.worker_rlimit_nofile number #worker进程所能够打开的文件数量上限。
2.时间驱动events相关的模块配置
1.worker_connections number #每个worker进程所能够打开的最大并发连接数
2.use method #指明并发连接请求的处理方法,默认自动选择最优方法,use epoll
3.accept_mutex on | off #处理新的连接请求的方法
3.http核心模块配置
1.server #配置一个虚拟主机,可以基于ip,端口,fqdn配置;
2.listen address #配置套接字
3.server_name #配置服务名
4.tcp_nodelay on|off #延迟发送选项
5.sendfile on|off #在内核中封装报文直接发送
6.server_tokens on|off|build|string #是否在响应报文的server首部显示nginx版本
7.location [ = | ~ | ~* | ^~ ] uri { ... } #在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射
8.alias path #路径别名
9.keepalive_timeout timeout [header_timeout] #设置保持长连接超时时长
10.keepalive_requests number #在一次长连接上所允许请求的资源的最大数量
11.limit_rate rate #限制响应给客户端的传输速率,单位是bytes/second 默认值0表示无限制
4.访问控制模块ngx_ http_ access _module
1.实现基于IP的访问控制功能:
allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all;
5.用户认证模块ngx_ http_ auth_ basic_ module
1.实现基于用户的访问控制,使用basic机制进行用户认证
auth_basic string | off;
auth_basic_user_file file;
6.状态查看模块ngx_ http_ http_ stub_ status_ module
1.Active connections:当前状态,活动状态的连接数
2.accepts:统计总值,已经接受的客户端请求的总数
3.handled:统计总值,已经处理完成的客户端请求的总数
4.requests:统计总值,客户端发来的总的请求数
5.Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
6.Writing:当前状态,正在向客户端发送响应报文过程中的连接数
7.Waiting:当前状态,正在等待客户端发出请求的空闲连接数
7.日志记录模块
1.log_format name string ...; #string可以使用nginx核心模块及其它模块内嵌的变量
2.access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];access_log off; #访问日志文件路径,格式及相关的缓冲的配置
3.open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];open_log_file_cache off; #缓存各日志文件相关的元数据信息
8.压缩功能相关的模块配置
1.gzip on | off; #启用或禁用gzip压缩
2.gzip_comp_level level; #压缩比由低到高: 1 到 9 默认: 1
3.gzip_disable regex ...; #匹配到客户端浏览器不执行压缩
4.gzip_min_length length; #启用压缩功能的响应报文大小阈值
5.gzip_http_version 1.0 | 1.1; #设定启用压缩功能时,协议的最小版本 默认: 1.1
9.https模块ngx_ http_ ssl_module模块
1.ssl on | off; #为指定虚拟机启用HTTPS protocol, 建议用listen指令代替
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]] #使用OpenSSL内建缓存,为每worker进程私有
6.ssl_session_timeout time; #客户端连接可以复用ssl session cache中缓存的ssl参数的有效时长,默认5m
10.重定向模块ngx_ http_ rewrite_ module
1.rewrite regex replacement [flag] #将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI
2.return #停止处理,并返回给客户端指定的响应码
3.rewrite_log on | off; #是否开启重写日志, 发送至error_log(notice level)
4.set $variable value; #用户自定义变量
11.反向代理模块
1.proxy_pass URL #proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
2.proxy_set_header filed value #设定发往后端主机的请求报文的请求首部的值
3.proxy_cache_path; #定义可用于proxy功能的缓存; Context:http
4.proxy_cache zone | off #指明调用的缓存,或关闭缓存机制
5.proxy_cache_key string #缓存中用于“键”的内容
6.proxy_cache_valid [code ...] time; #定义对特定响应码的响应内容的缓存时长
7.proxy_cache_methods GET | HEAD | POST ...; #对哪些客户端请求方法对应的响应进行缓存, GET和HEAD方法总是被缓存
8.proxy_connect_timeout time; #定义与后端服务器建立连接的超时时长,如超时会出现502错误,默认为60s,一般不建议超出75s
9.proxy_send_timeout time; #把请求发送给后端服务器的超时时长;默认为60s
10.proxy_read_timeout time; #等待后端服务器发送响应报文的超时时长, 默认为60s
12.ngx_ stream_ proxy_ module模块
可实现代理基于TCP, UDP (1.9.13), UNIX-domain sockets的数据流。
1.proxy_pass address; #指定后端服务器地址
2.proxy_timeout timeout; #无数据传输时,保持连接状态的超时时长
3.proxy_connect_timeout time; #设置nginx与被代理的服务器尝试建立连接的超时时长默认为60s
二、Linux集群类型、系统扩展方式及调度方法
Linux的集群类型包括:
1.LB:Load Balancing:负载均衡;
2.HA:High Availiablity:高可用集群;
3.HP:High Performance:高性集群。
系统扩展方式包括:
1.向上扩展:Scale up;
2.向外扩展:Scale out。
调度算法:根据调度时是否考虑各RS当前的负载状态,可将调度算法分为静态方法和动态方法两种。
静态算法:
1.RR:roundrobin,轮询;
2.WRR:weighted RR,加权轮询;
3.SH:source hashing,实现session sticy,源ip地址hash,将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现回话绑定;
4.DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡;
动态算法:根据每RS当前的负载状态及调度算法进行调度,方法主要有:LC,WLC,SED,NQ,LBLC等。
三、lvs四种集群有点及使用场景
LVS集群包括:lvs-nat;lvs-dr;lvs-tun,lvs-fullnat。
lvs-nat特点:多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发。
1.RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
2.请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;
3.支持端口映射,可修改请求报文的目标PORT;
4.vs必须是Linux系统,rs可以是任意系统;
lvs-dr的特点:通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
1.确保前端路由器将目标IP为VIP的请求报文发往Director;
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.不支持端口映射;
5.RS的OS得支持隧道功能;
lvs-fullnat的特点:通过同时修改请求报文的源IP地址和目标IP地址进行转发
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
2.RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但Director还要将其发往Client;
3.请求和响应报文都经由Director;
4.支持端口映射。
四、LVS-NAT、LVS-DR的工作原理并实现配置
LVS-NAT的工作原理:
1.首先client 发送请求[package] 给VIP;
2.VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver;
3.realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS VIP;
4.LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client;
1.其中Director server:10.3.223.11(对外提供服务的IP),192.168.88.100
Real server1:192.168.88.101
Real server2:192.168.88.102
2.在Director Server上配置LVS;首先打开系统的包转换功能,从而使系统充当路由器:
[root@node1 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
3.配置ipvs:
[root@node1 ~]# ipvsadm -A -t 10.3.223.11:80 -s rr
[root@node1 ~]# ipvsadm -a -t 10.3.223.11:80 -r 192.168.88.101:80 -m
[root@node1 ~]# ipvsadm -a -t 10.3.223.11:80 -r 192.168.88.102:80 -m
4.测试验证:验证httpd的负载均衡。
[root@node4 ~]# for i in {1..20};do curl http://10.3.223.11/;done
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
Real Server 1
Real Server 2
LVS-DR的工作原理:client 发送一个pv请求给VIP;VIP 收到这请求后会跟LVS设置的LB算法选择一个LB 比较合理的realserver,然后把此请求的package 的MAC地址修改为realserver的MAC地址。
1.LVS:192.168.88.100
Real server1:192.168.88.101
Real server2:192.168.88.102
Vip地址:192.168.88.188
2.添加ipvsadm转发规则:
iptables -A -t 192.168.88.188:80 -s rr
iptables -a -t 192.168.88.188:80 -r 192.168.88.101:80 -g -w 1
iptables -a -t 192.168.88.188:80 -r 192.168.88.102:80 -g -w 1
3.添加vip:
ip addr add 192.168.88.188/32 dev lo
4.避免vip冲突:
cat>> /etc/sysctl.conf<<EOF
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99164