詳細描述常見nginx常用模塊和模塊的使用示例
nginx常見的模塊分類:
核心模塊:core module
Nginx 核心功能模塊負責Nginx的全局應用,主要對應主配置文件的Main區塊和Events區塊
- Main 區塊:常見的配置如下
user nginx;
設置運行nginx的用戶名,每個指令都心“ ; ”結尾
worker_processes auto;
配置工作進程的數量,應用小于等于當前主機的物理核心數
auto表示自動檢查內核核心數,并啟動
error_log /var/log/nginx/error.log;
錯誤日志文件路徑
pid /run/nginx.pid;
指定存儲nginx主進程進程號碼的文件路徑
load_module file
指明要裝載的動態模塊
include file | mask
指明包含進來的其他配置文件
worker_cpu_affinity auto [cpumask]
cpu綁定的配置,auto表示自動綁定cpu核心
cpumask表示自定義核心數,表示如下:
CPU MASK:
00000000:8個0表示cpu編號
00000001:0號cpu
00000010:1號cpu
00000100:2號cpu
......
10000000:8號cpu
worker_priority number
指定worker進程的nice值
設定worker進程優先級在[-20,20]之間
worker_rlimit_nofile number
worker進程所能夠打開的文件數量上限
daemon on|off 是否以守護進程方式運行Nignx
master_process on|off
是否以master/worker模型運行nginx;默認為on
- Events 區塊:在配置文件中以events{}形式配置,常見的選項有:
worker_connections 1024;
#單進程所能夠打開的最大并發連接數數量
user select | poll
#指明并發連接請求的處理方法(select | poll)
accept_mutex on | oof
處理新的連接請求的方法;
on意味著由各worker輪流處理新請求
off意味著每個新請求的到達都會通知所有的worker進程
標準模塊:HTTP modules,Standard HTTP modules,Optional HTTP modules,Mail modules等。這些模塊非常豐富,列舉常見的模塊
ngx_http_auth_basic_module模塊:實現基于用戶的訪問控制,使用basic機制進行用戶認證
auth_basic string | off;認證的用戶字符
auth_basic_user_file file;認證的文件路徑
配置示例:
location /admin/ {
alias /webapps/app1/data/;
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
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:處于等待客戶端發出請求的空閑連接數;
配置示例:
location /basic_status {
stub_status;
}
ngx_http_ssl_module模塊:ssl安全模塊功能
ssl on | off;
是否開啟ssl安全功能
ssl_certificate file;
當前虛擬主機使用PEM格式的證書文件;
ssl_certificate_key file;
當前虛擬主機上與其證書匹配的私鑰文件;
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl協議版本,默認為后三個;
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
builtin[:size]:使用OpenSSL內建的緩存,此緩存為每worker進程私有;
[shared:name:size]:在各worker之間使用一個共享的緩存;
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;
}
ngx_http_referer_module模塊:反盜鏈功能
valid_referers none | blocked | server_names | string ...;
定義referer首部的合法可用值;
none:請求報文首部沒有referer首部;
blocked:請求報文的referer首部沒有值;
server_names:參數,其可以有值作為主機名或主機名模式;
arbitrary_string:直接字符串,但可使用*作通配符;
regular expression:被指定的正則表達式模式匹配到的字符串;要使用~打頭,例如 ~.*\.magedu\.com;
配置示例:
valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
if($invalid_referer) {
return http://www.magedu.com/invalid.jpg;
}
以上僅僅是nginx配置模塊的冰冊一角,詳細的配置文檔可以查看官方文檔:http://nginx.org/en/docs/
簡述Linux集群類型、系統擴展方式及調度方法
Linux集群類型分為:LB(負載均衡),HA(高可用),HP(高性能)幾種類型。
系統的擴展方式一般有向上擴展和向外擴展兩種,在linux服務中一般是向外擴展。
調度方法有靜態方法與動態方法兩天類型
靜態方法:是僅根據算法本身進行調度主要有以下幾種方法:
- RR:roundrobin,輪詢
- WRR:Weighted RR,加權輪詢
- SH:Source Hashing,實現session sticky,對源IP地址進行hash;將來自于同一個IP地址的請求始終發往第一次挑中的RS,實現會話綁定
- DH:DH:Destination Hashing;目標地址hash,將發往同一個目標IP的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡
動態方法:主要根據每RS當前的負載狀態及調度算法進行調度
- LC:least connections,最少連接數算法,計算方式如下:
Overhead=activeconns(活動鏈接)*256+inactiveconns(非活動鏈接) - WLC:Weighted LC,權重最少連接數算法,計算方式如下:
Overhead=(activeconns*256+inactiveconns)/weight(權重) - SED:Shortest Expection Delay,最短期望延遲,計算方式如下:
Overhead=(activeconns+1)*256/weight
除此之外還有NQ,LBLC,(動態的DH算法),LBLCR,(帶復制功能的LBLC)等幾個算法不進行一一列舉了。
簡述lvs四種集群優點及使用場景
四種集群方式分別為:lvs-nat,lvs-dr,lvs-tun,lvs-fullnat。在介紹這四種工作原理之前,了解一下lvs集群中的一些術語。
vs:Virtual Server,Director,Dispatcher,Balancer
rs:Real Server,upstream server,backend server
CIP:Client IP
VIP:Virtual server IP
RIP:Real server IP
DIP:Director IP
lvs-nat:
多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP地址和PORT端口來實現轉發。網絡拓撲圖如下:
工作原理:當client向服務器(RS集群)發送請求時,源地址為CIP地址,目標地址為VIP,調度器Diretory收到報文后發現是發給后端RS服務器的數據,通過調度發給其中的一臺RS(假設為RS1服務器),于是通過DIP向RS1的RIP1地址發送報文。
RS1服務器接收報文后,響應client的請求,于是RS1通過RIP1向Director的DIP地址發送響應報文,Director收到報文后將源地址IP從RIP改為VIP,目標IP不變發送給client。
這就完成了一次請求與響應的過程,期間client是與Director通信,并不知道RS服務器的存在。
該方式有以下幾點特點:
- RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP
- 請求報文和響應報文都必須經由Director轉發;所有的請求和發送都經過Director,Director易于造成系統擁塞
- 支持端口映射,可修改請求報文的目標PORT
- vs(Director)必須是Linux系統,rs可以是任意系統
lvs-nat是典型的反代服務器的一種應用,Director可以做靜態內容的緩存,減輕后端RS服務器的IP壓力,并且能隱藏后端的RS服務器
lvs-dr:(Direc Routing)
直接路由,通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變,由于lvs-dr是基于mac進行轉發的,所以Director和各RS都得配置使用VIP,但是Director和各RS都有VIP要保證請求只發給Director而不是直接發給RS則需要確保前端路由器將目標IP為VIP的請求報文發往Director
實現方法有以下幾種:
- 在前端網關做靜態綁定,直接綁定mac,不進行ARP廣播,但是如果Director出現故障則會出現找不到mac地址或重新綁定的情況。
- 在RS上使用aprtables
-
在RS上修改內核參數以限制arp通告及應答級別將apr_announce和apr_ignore這兩個參數修改一下就可以了,一般推薦第三種方式。
其網絡拓撲圖如下:
lvs-dr網絡拓撲圖.png
工作原理:CIP向VIP請求報文,經過route時發現VIP在自己的網絡中,于是就通過ARP方式將報文發給VIP主機,這里的Director和RS都有VIP地址,所以要確保請求報文只能被Director接收,之后Director通過調度在報文上加上RS的MAC地址把報文扔給router,touter通過新的MAC地址找的RS主機,并發送請求報告。
RS接收到請求報文之后發送用自己的VIP地址(一般不與RIP同網卡,而在lo網卡上)直接通過router響應報文,響應報文不經過Director,從而減輕Director的負載壓力。
除了上面提到的mac問題以外該方式還有以下幾點特點:
- RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director
- RS跟Director要在同一個物理網絡(經過mac地址轉發的)
- 請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client
- 不支持端口映射
lvs-dr是為減輕Director負載壓力的一種實現方式
lvs-tun:
轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往調度挑選出的目標RS;
RS直接響應給客戶端(源IP是VIP,目標IP是CIP)
其網絡拓撲圖如下:
工作原理:CIP向VIP發送請求報文,通過router到達Director,Director接受報文發現是集群服務后端報文直接在報文首部再添加RS服務的RIP地址首部(假設為RS1),并通過Internet發送到RS1服務器,RS接受報文后拆封報文時第一層的RIP是本機地址,但是還有一層VIP地址首部,因此RS要支持隧道功能,能理解VIP地址并接受處理請求。
RS向CIP響應報文時,直接使用VIP做源地址,CIP做目標地址通過Internet向Client響應報文。
其特點如下:
- DIP,VIP,RIP都應該是公網地址
- RS的網關不能,也不可能指向DIP(響應不應該Director)
- 請求報文要經由Director,但響應不能經由Director
- 不支持端口映射
- RS的OS得支持隧道功能:如果請求報文數據超過MTU(最大報文數)時,在添加首部會超過MTU而被拆分報文(要理解內層的CIP和VIP的首部)
lvs-tun一般應用在Director與RS不在同一網段,并且相隔甚遠的情況下使用。
lvs-fullnat:
通過同時修改請求報文的源IP地址和目標IP地址進行轉發。
CIP <--> DIP 請求報文時源IP從左往右,響應時目標IP從右往左
VIP <--> RIP 請求報文時目標IP從左往右,響應時源IP從右往左
工作原理:CIP向VIP發送請求,Director接收報文后知道是后端服務報文,于是修改源地址IP為DIP,目標地址IP為RIP,經過路由發送的RS服務器上。
RS服務器響應報文時,先通過RIP地址將報文發給Director的DIP,Director接收到報文后發現是Client的報文于是修改源IP為VIP,目標IP為CIP通過Internet發送給client。
lvs-fullnat的特點如下:
- VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP
- RS收到的請求報文源地址是DIP,因此,只能響應給DIP;但Director還要將其發往Client
- 請求和響應報文都經由Director
- 支持端口映射,此類型默認不支持(需要修改編譯內核)
lvs-fullnat框架一般用于Director與RS不在同一機房但可以通過內網連接的一種方式,內核默認是不支持的,需要重新編譯內核才能實現。
描述LVS-NAT、LVS-DR的工作原理并實現配置
lvs-nat和lvs-dr的工作原理上述已經說明了,這個主要將如何實現配置,在配置之前先說明一下ipvsadm工具的一般用法,先yum安裝ipvsadm之后執行一下ipvsadm -h命令查看幫助信息,具體如下:
[root@zhu ~]# ipvsadm -h
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h
Commands:
Either long or short options are allowed.
--add-service -A add virtual service with options
--edit-service -E edit virtual service with options
--delete-service -D delete virtual service
--clear -C clear the whole table
--restore -R restore rules from stdin
--save -S save rules to stdout
--add-server -a add real server with options
--edit-server -e edit real server with options
--delete-server -d delete real server
--list -L|-l list the table
--zero -Z zero counters in a service or all services
--set tcp tcpfin udp set connection timeout values
--start-daemon start connection sync daemon
--stop-daemon stop connection sync daemon
--help -h display this help message
Options:
--tcp-service -t service-address service-address is host[:port]
--udp-service -u service-address service-address is host[:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
--ipv6 -6 fwmark entry uses IPv6
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
the default scheduler is wlc.
--pe engine alternate persistence engine may be sip,
not set by default.
--persistent -p [timeout] persistent service
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
--gatewaying -g gatewaying (direct routing) (default)
--ipip -i ipip encapsulation (tunneling)
--masquerading -m masquerading (NAT)
--weight -w weight capacity of real server
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lower threshold of connections
--mcast-interface interface multicast interface for connection sync
--syncid sid syncid for connection sync (default=255)
--connection -c output of current IPVS connections
--timeout output of timeout (tcp tcpfin udp)
--daemon output of daemon information
--stats output of statistics information
--rate output of rate information
--exact expand numbers (display exact values)
--thresholds output of thresholds information
--persistent-conn output of persistent connection info
--nosort disable sorting output of service/server entries
--sort does nothing, for backwards compatibility
--ops -o one-packet scheduling
--numeric -n numeric output of addresses and ports
--sched-flags -b flags scheduler flags (comma-separated)
ipvsadm常用的命令如下:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
vs服務相關的命令
-A:新增VS
-E:修改VS
-D:刪除VS
-R:重載規則
-S:保存規則(相當于ipvsadm-save)
-C:清空所有
-L:查看
-t:tcp協議
-u:udp協議
-f:firewall MARK,是一個數字
-s:調度方法,默認是wlc
-p:會話保持連接的
---------------------------分割線----------------------------------------
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
RS相關的命令
-a,-e,-d,-l,-t|u|f這些命令與VS服務命令一致,只是大小寫轉換而已
-r:指明服務器的IP
-w:權重
lvs-nat配置:
前期準備:
各節點時間必須同步
Director:
VIP:192.168.80.4(公網地址)
DIP:192.168.10.8(私網地址)
開啟核心轉發功能
[root@director ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.80.4 netmask 255.255.255.0 broadcast 192.168.80.255
inet6 fe80::3f13:7555:73e5:6f08 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:01:ba:2c txqueuelen 1000 (Ethernet)
RX packets 122777 bytes 133041537 (126.8 MiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 16760 bytes 1547576 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.8 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::a857:646a:90c8:ab64 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:01:ba:36 txqueuelen 1000 (Ethernet)
RX packets 62 bytes 5983 (5.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 61 bytes 5346 (5.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
---------------------------------分割線----------------------------------
#開啟核心轉發功能
[root@director ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
RS1:
RIP:192.168.10.9(私網地址并且和Director的私網地址在同一網段)
GW:192.168.10.8(網關必須指向Director的私網地址)
RS1可以ping通Director的私網地址,安裝nginx或httpd服務,并配置主頁內容
[root@rs1 ~]# ping 192.168.10.8
PING 192.168.10.8 (192.168.10.8) 56(84) bytes of data.
64 bytes from 192.168.10.8: icmp_seq=1 ttl=64 time=0.339 ms
64 bytes from 192.168.10.8: icmp_seq=2 ttl=64 time=2.13 ms
64 bytes from 192.168.10.8: icmp_seq=3 ttl=64 time=0.320 ms
64 bytes from 192.168.10.8: icmp_seq=4 ttl=64 time=0.368 ms
64 bytes from 192.168.10.8: icmp_seq=5 ttl=64 time=0.808 ms
^C
--- 192.168.10.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.320/0.794/2.137/0.695 ms
RS2:
RIP:192.168.10.10(私網地址并且和Director的私網地址在同一網段)
GW:192.168.10.8(網關必須指向Director的私網地址)
RS2可以ping通Director的私網地址,安裝nginx或httpd服務,并配置主頁內容
[root@rs2 ~]# ping 192.168.10.8
PING 192.168.10.8 (192.168.10.8) 56(84) bytes of data.
64 bytes from 192.168.10.8: icmp_seq=1 ttl=64 time=0.392 ms
64 bytes from 192.168.10.8: icmp_seq=2 ttl=64 time=0.558 ms
64 bytes from 192.168.10.8: icmp_seq=3 ttl=64 time=0.367 ms
64 bytes from 192.168.10.8: icmp_seq=4 ttl=64 time=0.367 ms
64 bytes from 192.168.10.8: icmp_seq=5 ttl=64 time=0.462 ms
^C
--- 192.168.10.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.367/0.429/0.558/0.074 ms
驗證服務是否配置成功
[root@director ~]# curl http://192.168.10.9/test1.html #連接RS1的nginx服務
<h1>RS1:192.168.10.9</h1>
[root@director ~]# curl http://192.168.10.10/test1.html #連接RS2的nginx服務
<h1>RS2:192.168.10.10</h1>
安裝ipvsadm:
[root@director ~]# yum install ipvsadm -y
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
* extras: centos.ustc.edu.cn
* updates: centos.ustc.edu.cn
正在解決依賴關系
--> 正在檢查事務
......
Running transaction
正在安裝 : ipvsadm-1.27-7.el7.x86_64 1/1
驗證中 : ipvsadm-1.27-7.el7.x86_64 1/1
已安裝:
ipvsadm.x86_64 0:1.27-7.el7
完畢!
配置lvs-nat
配置Director
[root@director ~]# ipvsadm -A -t 192.168.80.4:80 -s rr
# -s 指明調度方式為rr,Director服務要ip:80
添加RS服務器
[root@director ~]# ipvsadm -a -t 192.168.80.4:80 -r 192.168.10.9 -m
[root@director ~]# ipvsadm -a -t 192.168.80.4:80 -r 192.168.10.10 -m
# -r:添加RS服務器;-m:指明是nat模式
檢查配置結果:
[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.80.4:80 rr
-> 192.168.10.9:80 Masq 1 0 0
-> 192.168.10.10:80 Masq 1 0 0
驗證結果:
[root@node1 ~]# for i in {1..10}; do curl http://192.168.80.4/test1.html; done
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
<h1>RS1:192.168.10.9</h1>
<h1>RS2:192.168.10.10</h1>
lvs-dr配置:
前期準備:
各節點時間必須同步
Director:
VIP:192.168.10.8
DIP:192.168.80.4
在ens33:0網卡上配置如下:
[root@director ~]# ifconfig ens33:0 192.168.10.8 netmask 255.255.255.255 broadcast 192.168.10.8 up
[root@director ~]# route add -host 192.168.10.8 dev ens33:0
RS1:
VIP:192.168.10.8
RIP1:192.168.80.20
在lo:0上配置VIP
[root@rs1 ~]# ifconfig lo:0 192.168.10.8 netmask 255.255.255.255 broadcast 192.168.10.8 up
RS2:
VIP:192.168.10.8
RIP2:192.168.80.22
在lo:0上配置VIP
[root@rs2 ~]# ifconfig lo:0 192.168.10.8 netmask 255.255.255.255 broadcast 192.168.10.8 up
兩臺RS配置腳本寫入內核,對arp_ignore&&arp_announce做調整
[root@rs1 ~]# vim 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 ~]# route add -host 192.168.10.8 dev lo:0
# route add 命令指定192.168.10.8的IP只能經過lo:0這個網卡發送出去,確保是VIP響應而不是RIP響應
在Director上安裝并配置ipvsadm:
[root@director ~]# yum install ipvsadm -y
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: mirrors.shu.edu.cn
......
Running transaction
正在安裝 : ipvsadm-1.27-7.el7.x86_64 1/1
驗證中 : ipvsadm-1.27-7.el7.x86_64 1/1
已安裝:
ipvsadm.x86_64 0:1.27-7.el7
完畢!
[root@director ~]# ipvsadm -A -t 192.168.10.8:80 -s rr
[root@director ~]# ipvsadm -a -t 192.168.10.8:80 -r 192.168.80.20 -g
[root@director ~]# ipvsadm -a -t 192.168.10.8:80 -r 192.168.80.22 -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.10.8:80 rr
-> 192.168.80.20:80 Route 1 0 0
-> 192.168.80.22:80 Route 1 0 0
# -g:表示dr類型,默認是dr
驗證結果:
[root@node1 ~]# for i in {1..10}; do curl http://192.168.10.8/test1.html; done
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>
<h1>RS1:192.168.80.20</h1>
<h1>RS2:192.168.80.22</h1>