LVS

LVS-NAT實現

LVS簡單介紹

LVS(linux virtual server)其實就是針對高可伸縮、高可用網絡服務的需求,給出基於ip層和基於內容請求分發的負載平衡調度解決方法,並在Linux內核中實現了這些方法,將一組服務器構成一個實現可伸縮的、高可用網絡服務的虛擬服務器。所以,lvs需要內核有ipvs支持,linux-2.4.23以後ipvs都編譯到內核裏,如果你是之前版本確保你的內核支持ipvs後,只需安裝ipvsadm就可以把一臺服務器配置成負載調度器(Load Balancer)。對外提供服務的IP,也就是我們訪問的IP稱做VIP。調度器LB的任務主要是分發請求,真正處理的是真實服務器(Real Server)。

LVS三種模式工作原理

網絡地址傳輸模式工作原理

LB收到用戶請求包後,LB將請求包中虛擬服務器的IP地址轉換爲某個選定RS的IP地址,轉發給RS;RS將應答包發給LB,LB將應答包中RS的IP轉爲虛擬服務器的IP地址,回送給用戶。

LVS-NAT模型特徵

1、所有realserver與director在同一個子網中

2、rip真實服務器ip地址爲私有地址,僅用於集羣節點之間使

3、客戶端的請求,響應都要經過director

4、ripserver 網關指向dip

5、可以實現端口映射 80

6、realserver可以是任何操作系統

7、dirctor可能成爲系統瓶頸

直接路由模式工作原理

LB收到請求包後,將請求包中目標MAC地址轉換爲某個選定RS的MAC地址後將包轉發出去,RS收到請求包後 ,可直接將應答內容傳給用戶。此時要求LB和所有RS都必須在一個物理段內,且LB與RS羣共享一個虛擬IP。

LVS-DR模型特徵

1、集羣節點必須在一個物理網絡上(mac)

2、rip可以使用公網地址

3、director處理入站請求,

4、realserver網關不指向director

5、不支持端口映射

6、大多數操作系統支持realservers

7、dr dirctor 比nat director性能優越

IP隧道模式(IP Tunneling)

LB收到用戶請求包後,根據IP隧道協議封裝該包,然後傳給某個選定的RS;RS解出請求信息,直接將應答內容傳給用戶。此時要求RS和LB都要支持IP隧道協議。

LVS-TUN模型特徵

集羣節點可跨互聯網

1、director和realserver不需要在一個網絡中

2、rip一定不是私有地址

3、director 僅處理入站請求

4、realserver網關不能指向director ip

5、不支持端口映射

6、僅有支持ip遂道功能操作系統才能用在realserver

LVS scheduling methods(LVS調度算法)

靜態調度4個

輪叫RR加權輪叫WRR目標地址hash DH源地地址hash SH

動態調度6個

最少鏈接(Least Connections)

加權最少鏈接(Weighted Least Connections)WLC

linux默認的調度 shortest expected delay SED

never queue NQ

基於本地的最少鏈接(Locality-Based Least Connections:DH)LBLC

帶複製的基於本地最少鏈接(Locality-Based Least Connections with Replication)LBLCR

LVS-NAT實現過程

實驗拓撲圖

clip_image002

192.168.1.100是LVS與互聯網的虛擬server ip地址,簡稱爲VIP

192.168.1.1是LVS與內部真實服務器通信的ip地址,簡稱爲DIP

192.168.1.100與192.168.1.101就是LVS通過一些調度算法,選擇服務器響應的真實服務器地址

LVS配置

Eth0網卡使用hostonly連接

clip_image004

Eth1網卡使用vmnet2連接

clip_image006

開啓路由功能

[root@localhost ~]# vim /etc/sysctl.conf

clip_image008

[root@localhost ~]# sysctl –p #使路由功能生效

查看內核是否支持IPVS

[root@localhost ~]# uname -r

2.6.18-164.el5

[root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5

如果是CONFLIG_IP_VS_PROTO_TCP=y 則說明支持ipvs

clip_image010

掛載光盤

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/

編輯本地yum

[root@localhost ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo

clip_image012
使用yum安裝ipvsadm工具

[root@localhost ~]# yum install -y ipvsadm

ipvsadm命令詳細介紹

1.定義集羣服務

語法:

ipvsadm -A|-E -t|-u VIP:port -s scheduler -s指調度算法

ipvsadm -D -t|-u VIP:port

-A 在虛擬服務器表中添加新的虛擬服務器記錄

-E 編輯內核虛擬服務器表中虛擬服務器記錄。

-D 刪除虛擬服務器表中虛擬服務器記錄。

-L 查看

-t|-u 代表tcp和udp服務

VIP指虛擬服務器ip地址,即LVS與internet通信的網卡地址

2. 真實服務器的規則定義

ipvsadm -a|e -t|u VIP:port -r REALSERVER -g|-i|-m [-w weight]

ipvsadm -d -t|-u VIP:port -r REALSERVER

-a 在虛擬服務器表的添加一條新的真實服務器

-e 編輯虛擬服務器記錄中真實服務器記錄

-d刪除虛擬服務器記錄的真實服務器記錄

-r 提供服務響應的真實服務器

-g 指LVS 的工作模式爲直接路由模式

-i 指LVS 的工作模式爲隧道模式

-m 指LVS 的工作模式爲NAT 模式

-z 清空計數器

-n 數字的方式來顯示地址

--stats 狀態信息

--rate 每秒速率

添加或修改集羣服務:ipvsadm -A|E -t|u|f VIP:port -s 調度算法 刪除一個集羣服務: ipvsadm -D -t|u|f VIP:port

添加或者修改REALSERVER:ipvsadm -a|e -t|u|f VIP:port -r REALSERVER[:port] -g|-i|-m [-w 權重]

刪除一個REALSERVER: ipvsadm -d -t|u|f VIP:port -r REALSERVER[:port]

Ipvsadm配置

[root@localhost ~]# ipvsadm -A -t 192.168.10.100:80 -s rr #定義一個 集羣服務,-s指調度算法爲rr

[root@localhost ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.1.100 -m #向集羣服務添加RS -m爲nat方式

[root@localhost ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.1.101 –m #向集羣服務添加RS -m爲nat方式

[root@localhost ~]# service ipvsadm save #對規則進行保存

Saving IPVS table to /etc/sysconfig/ipvsadm: [確定]

[root@localhost ~]# service ipvsadm start

查看規則被保存

[root@localhost ~]# vim /etc/sysconfig/ipvsadm

clip_image014

Real server1配置

Eth0網卡選擇vmnet2連接,Eth0配置

clip_image016

#yum install –y httpd

#cd /var/www/html

#echo”web1”>index.html

#service httpd restart

Real server2配置

Eth0網卡選擇vmnet2連接,Eth0配置

clip_image018

#yum install –y httpd

#cd /var/www/html

#echo”web2”>index.html

#service httpd restart

測試

clip_image020

clip_image022

不斷刷新之後,查看請求會話結果

[root@localhost ~]# ipvsadm –ln

clip_image024

至此,實現了輪詢。。

LVS-DR實現

clip_image026

Real server1配置

clip_image028

先配置內核參數再配置ip地址,順序不能顛倒

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2">>/etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2">>/etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1">>/etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1">>/etc/sysctl.conf

[root@localhost ~]# sysctl –p #立即生效

新加個

clip_image030

[root@localhost ~]# route add -host 192.168.10.101 dev lo:0

[root@localhost ~]# yum install –y httpd

[root@localhost ~]# cd /var/www/html

[root@localhost ~]# echo”web1”>index.html

[root@localhost ~]# service httpd restart

Real server2配置

clip_image032

直接從real server1拷貝內核參數到real server2

[root@mail ~]# scp 192.168.10.200:/etc/sysctl.conf

[root@mail ~]# sysctl –p #立即生效

新加個

clip_image034

[root@mail ~]# route add -host 192.168.10.101 dev lo:0

[root@localhost ~]# route add -host 192.168.10.101 dev lo:0

[root@localhost ~]# yum install –y httpd

[root@localhost ~]# cd /var/www/html

[root@localhost ~]# echo”web1”>index.html

[root@localhost ~]# service httpd restart

Direct配置

clip_image036

clip_image038

[root@mail ~]# mkdir /mnt/cdrom/

mkdir: cannot create directory `/mnt/cdrom/': File exists

[root@mail ~]# mount /dev/cdrom /mnt/cdrom/

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@mail ~]# cd /mnt/cdrom/Cluster

[root@mail Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm

Preparing... ########################################### [100%]

1:ipvsadm ########################################### [100%]

[root@mail Cluster]# service ipvsadm save

Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]

[root@mail Cluster]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

[root@mail Cluster]# ipvsadm -A -t 192.168.10.101:80 -s rr

[root@mail Cluster]# 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.101:80 rr

[root@mail Cluster]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.200 -g

[root@mail Cluster]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.201 -g

[root@mail Cluster]# 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.101:80 rr

-> 192.168.10.201:80 Route 1 0 0

-> 192.168.10.200:80 Route 1 0 0

測試

clip_image040

clip_image042

Direct查看,實現輪詢。

clip_image044

持續連接實現PCC

緊接着以上的lvs-Dr做

Director配置

[root@mail ~]# 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.101:80 rr

-> 192.168.10.201:80 Route 1 0 0

-> 192.168.10.200:80 Route 1 0 0

[root@mail ~]# ipvsadm –C #清空規則

[root@mail ~]# ipvsadm –ln #查看清空後的規則

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

[root@mail ~]# ipvsadm -A -t 192.168.10.101:0 -s rr -p 1800

[root@mail ~]# ipvsadm -a -t 192.168.10.101:0 -r 192.168.10.200 -g

[root@mail ~]# ipvsadm -a -t 192.168.10.101:0 -r 192.168.10.201 -g

[root@mail ~]# ipvsadm -ln

測試,不斷刷新之後,一直出現的是web2頁面

clip_image046

clip_image048

新打開一個終端ssh 192.168.10.101

clip_image050

在director上顯示

[root@mail ~]# ipvsadm –ln

clip_image052

PPC

[root@mail ~]# ipvsadm -C

[root@mail ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

[root@mail ~]# ipvsadm -A -t 192.168.10.101:80 -s rr -p 1800

[root@mail ~]# ipvsadm -A -t 192.168.10.101:22 -s rr -p 1800

[root@mail ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.200 -g

[root@mail ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.201 -g

[root@mail ~]# ipvsadm -a -t 192.168.10.101:22 -r 192.168.10.201 -g

[root@mail ~]# ipvsadm -a -t 192.168.10.101:22 -r 192.168.10.200 –g

clip_image054

測試

clip_image056

可以看出http的交給192.168.10.201

clip_image058

Ssh到192.168.10.101 可以看出ssh都交給了192.168.10.200

clip_image060

clip_image062

防火牆

clip_image064

Realserver1配置

[root@localhost ~]# vim /etc/pki/tls/openssl.cnf

clip_image066

clip_image068

clip_image070

[root@localhost ~]# cd /etc/pki/CA/

[root@localhost CA]# mkdir crl certs newcerts

[root@localhost CA]# ll

total 20

drwxr-xr-x 2 root root 4096 Oct 11 21:07 certs

drwxr-xr-x 2 root root 4096 Oct 11 21:07 crl

drwxr-xr-x 2 root root 4096 Oct 11 21:07 newcerts

drwx------ 2 root root 4096 Jun 30 2009 private

[root@localhost CA]# touch serial index.txt

[root@localhost CA]# echo "01">serial

clip_image072

[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem

clip_image074

[root@localhost CA]# chmod 600 private/cakey.pem

[root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -days 3650 -out cacert.pem

clip_image076

clip_image078

[root@localhost CA]# mkdir -pv /etc/httpd/certs

mkdir: created directory `/etc/httpd/certs'

[root@localhost CA]# cd /etc/httpd/certs/

[root@localhost certs]# openssl genrsa 1024 >httpd.key

clip_image080

[root@localhost certs]# openssl req -new -key httpd.key -out httpd.csr

clip_image082

clip_image084

[root@localhost certs]# openssl ca -in httpd.csr -out httpd.cert

clip_image086

clip_image088

[root@localhost certs]# yum install -y mod_ssl

[root@localhost certs]# vim /etc/httpd/conf.d/ssl.conf

clip_image090

Realserver2配置

[root@mail CA]# mkdir certs newcerts crl

[root@mail CA]# touch serial index.txt

[root@mail CA]# scp 192.168.10.200:/etc/pki/tls/openssl.cnf /etc/pki/tls/

[root@mail CA]# scp 192.168.10.200:/etc/pki/CA/serial /etc/pki/CA/

[root@mail CA]# scp 192.168.10.200:/etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/

[root@mail CA]# mount /dev/cdrom /mnt/cdrom/

[root@mail CA]# yum install -y mod_ssl

[root@mail CA]# scp 192.168.10.200:/etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/

[root@mail CA]# mkdir -pv /etc/httpd/certs

[root@mail CA]# scp 192.168.10.200:/etc/httpd/certs/* /etc/httpd/certs/

[root@mail CA]# scp 192.168.10.200:/etc/pki/CA/cacert.pem /etc/pki/CA/

[root@mail CA]# scp 192.168.10.200:/etc/pki/CA/private/cakey.pem /etc/pki/CA/private/

Director配置
Iptables配置

[root@mail pki]# ipvsadm –C

[root@mail pki]# iptables -t mangle -A PREROUTING -p tcp --dport 80 -d 192.168.10.101 -j MARK --set-mark 10

[root@mail pki]# iptables -t mangle -A PREROUTING -p tcp --dport 443 -d 192.168.10.101 -j MARK --set-mark 10

查看mangle表格

clip_image092

[root@mail pki]# service iptables save #保存規則

Ipvsadm配置

[root@mail pki]# ipvsadm -A -f 10 -s rr -p 1800

[root@mail pki]# ipvsadm -a -f 10 -r 192.168.10.200

[root@mail pki]# ipvsadm -a -f 10 -r 192.168.10.201

規則顯示

clip_image094

測試

clip_image096

clip_image098

clip_image100

clip_image102

clip_image104

clip_image106

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章