一、常見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.www58058.com/99164