章文嵩博士的博文在這裏,瞅瞅吧。http://www.linuxvirtualserver.org/zh/lvs3.htmlhtml
接下來咱們的示例,就採用以下ip配置部署。linux
具體數據包路由走向,參考個人文章 VMware虛擬網絡鏈接模式詳解(NAT,Bridged,Host-only) 中的nat網絡鏈接方式。nginx
NAT模式的幾個要點web
一、準備工做,3臺服務器。一臺用做Director server。2臺用做real server。如上圖。算法
二、配置Director server爲雙ip瀏覽器
[root@localhost ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.222.131 netmask 255.255.255.0 broadcast 192.168.222.255 inet6 fe80::20c:29ff:feaf:ff3a prefixlen 64 scopeid 0x20<link> ether 00:0c:29:af:ff:3a txqueuelen 1000 (Ethernet) RX packets 53298 bytes 4735958 (4.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2690 bytes 453988 (443.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.2.136 netmask 255.255.255.0 broadcast 192.168.2.255 inet6 fe80::20c:29ff:feaf:ff44 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:af:ff:44 txqueuelen 1000 (Ethernet) RX packets 11269 bytes 882315 (861.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1502 bytes 294418 (287.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 TYPE="Ethernet" BOOTPROTO="static" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" NAME="eth1" DEVICE="eth1" ONBOOT="yes" IPADDR="192.168.2.136" NETMASK="255.255.255.0"
[root@localhost network-scripts]# echo "1">"/proc/sys/net/ipv4/ip_forward"
[root@localhost ~]# yum install ipva
[root@localhost ~]# ipvsadm -C --清空轉發規則 [root@localhost ~]# ipvsadm -A -t 192.168.222.131:80 -s rr --131上一單有80端口的tcp請求,即便用rr表示轉發策略爲輪詢的方式轉發給一下的真實服務器,這裏有好多負載均衡轉發算法,在下面會介紹下。 [root@localhost ~]# ipvsadm -a -t 192.168.222.131:80 -r 192.168.2.130 -m [root@localhost ~]# ipvsadm -a -t 192.168.222.131:80 -r 192.168.2.129 -m
三、配置Real server。real server爲host-only模式,這裏要作的就很簡單啦。緩存
[root@localhost network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="static" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" NAME="eth0" DEVICE="eth0" ONBOOT="yes" IPADDR="192.168.2.130" NETMASK="255.255.255.0" GATEWAY="192.168.2.136"
四、看下結果,在主機上用瀏覽器打開。http://192.168.222.131/ ,不斷刷新頁面便可看到來到2個real server的不一樣web站點的網頁。服務器
[root@localhost ~]# curl 192.168.222.131 192.168.222.130:A [root@localhost ~]# curl 192.168.222.131 192.168.2.129 c [root@localhost ~]# curl 192.168.222.131 192.168.222.130:A [root@localhost ~]# curl 192.168.222.131 192.168.2.129 c
五、到此,lvs的nat模式的配置實現也已完成,這個配置其實很簡單的,對吧。哈哈。網絡
ipvsadm 參數詳解負載均衡
保存添加的虛擬ip記錄和ipvsadm的規則可使用service ipvsadm save,還能夠用-S或--save。清除全部記錄和規則除了使用-C,還以使用--clear。
下面列出幾個經常使用的查詢。
一、查看記錄和規則
[root@localhost network-scripts]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.222.131:80 rr -> 192.168.2.129:80 Masq 1 1 0 -> 192.168.2.130:80 Masq 1 0 0
InActConn:
指非活躍鏈接數,咱們將處於 TCP ESTABLISH
狀態之外的鏈接都稱爲不活躍鏈接。例如處於 SYN_RECV
狀態的鏈接,處於 TIME_WAIT
狀態的鏈接等。
ActiveConn:是活動鏈接數,也就是tcp鏈接狀態的ESTABLISHED;
Weight:輪詢權重
二、選項是統計自該條轉發規則生效以來的包
[root@localhost network-scripts]# ipvsadm -L --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 192.168.222.131:http 50 263 134 46273 20519 -> 192.168.2.129:http 32 178 83 31215 13069 -> 192.168.2.130:http 18 85 51 15058 7450
Conns (connections scheduled) : 已經轉發過的鏈接數
InPkts (incoming packets) :入包個數
OutPkts (outgoing packets) : 出包個數
InBytes (incoming bytes) :入流量(字節)
OutBytes (outgoing bytes) : 出流量(字節)
三、顯示速率信息
[root@localhost network-scripts]# ipvsadm -L --rate IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port TCP 192.168.222.131:http 0 1 0 216 87 -> 192.168.2.129:http 0 1 0 212 85 -> 192.168.2.130:http 0 0 0 4 2
CPS (current connection rate) :每秒鏈接數
InPPS (current in packet rate) : 每秒的入包個數
OutPPS (current out packet rate): 每秒的出包個數
InBPS (current in byte rate) : 每秒入流量(字節)
OutBPS (current out byte rate) 每秒入流量(字節)
一、rr(round robin:輪詢。 --在服務器池中無窮的循環遍歷。
二、wrr(weighted round robin):權重輪詢法。 --根據權重值,來分配請求鏈接,處理的請求鏈接數與權重值的比率一致。
三、lc(least-connection):最少鏈接法。 --當請求到達director時,director查看活動和非活動的鏈接數量,以肯定把請求分發給哪一個服務器,director將集羣節點目前的活動鏈接數量x256再加上不活動的鏈接數量,獲得借點的開銷值。最低開銷值的節點勝出,被分發給新的入站請求。(若是開銷同樣,則第一個節點被選中)。
四、wlc(weighted least-connection):帶權重的最少鏈接法。 --先如lc算出集羣節點的開銷值,而後除以分配給其的權重值,最小值節點勝出,將入站請求分發給它。
五、lblc(locality-based least-connection):基於本地的最少鏈接法。 --基於局部的最小鏈接,當realserver是緩存服務器的時候用的比較多。
六、lblcr(locality-based least-connection with replication):帶複製的基於局部的最小鏈接。 --當realserver是緩存服務器的時候用的比較多。
七、dh(destination hashing):目標散列法
八、sh(source hashing):源散列法。 --同一個ip的客戶端老是分發給同一個realserver。至關於有客戶粘性,與nginx中的iphash一致。
九、sed(shortest expected delay):最短預期延遲法。 --最短延時預測(ci+1)/ui,ci是鏈接數,ui是權重值。在wlc方法上作啦輕微改進,這些服務使用tcp,並且當羣節點在處理每一個請求時保持在活動狀態。計算方法:每一個集羣節點的的開銷值是經過將活動的鏈接數+1計算的。而後開銷值除以分配權重值,獲得的就是sed值,值少的集羣節點勝出。
十、nq(never queue):永不排隊法。 --沒有隊列,分配請求給空閒的服務器,沒有空閒的服務器就找響應最快的。