LVS持久連接 ppc+pcc+防火牆標記html
若是一個大型的網站使用了LVS進行負載均衡,咱們看到的網站是由幾個內部的相同網站羣集而來的,因爲http是一種無狀態的協議,每次請求完畢後就會自動斷開,而若是內部羣集的網站,是使用輪詢等方法時,若是一個用戶在第一個server中購買了一個商品以後,在下次請求時可能會輪詢到server2,這時候,咱們在第一個server中購買的商品就會消失,這顯然不是咱們想要的,也多是在購買端口以後,在付費的時候出現問題,咱們都是使用80端口訪問網站而使用443端口進行付費的,而80端口與443端口的轉換,也不能經過普通的鏈接來設置,這裏咱們就須要使用LVS持久連接來達到咱們想要的結果。數據庫
LVS持久連接有三種類型:vim
pcc (persistent client connections) :持久的客戶端鏈接安全
ppc (persistent port connections) :持久的端口鏈接服務器
persistent netfilter marked packet persistence :防火牆標記的鏈接負載均衡
咱們舉三個例子對這三種鏈接都作一下說明。ssh
如今的三個示例都是以DR模型爲基礎tcp
示例1 基於客戶的持久連接 pccide
要求:uer1訪問server1測試
user2訪問server2
Director配置
[root@localhost ~]# ipvsadm –C
[root@localhost ~]# ipvsadm -A -t 192.168.2.11:0 -s rr -p
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.20 -g
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.30 –g
在DR的基礎上咱們只須要修改這一處那可,下面就能夠測試
在user1上測試
你能夠對其進行刷新,可是老是出現server2的網頁
咱們能夠在director上查看一下匹配效果
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.11:0 rr persistent 360
-> 192.168.2.30:0 Route 1 0 7
-> 192.168.2.20:0 Route 1 0 0
[root@localhost ~]#
從上面的匹配能夠看出,網頁老是訪問的192.168.2.30的網頁,也就是server2,沒有對server1進行訪問,上面的360指的是持久鏈接的時間是360秒。
咱們再在user2上訪問一下
刷新也是同樣的server1的內容
看一下director中的匹配狀況
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.11:0 rr persistent 360
-> 192.168.2.30:0 Route 1 0 7
-> 192.168.2.20:0 Route 1 0 6
Server1訪問的沒有改變,仍爲7,可是server2由0增長到了6,也就是隻有usre2的訪問量,這樣就作到了在必定的時間內,每一個用戶只與一臺server相鏈接。
示例2 基於端口的持久鏈接 ppc
若是羣集的內部分別有http服務和ssh服務,咱們想要使用VIP地址來訪問http服務器時,系統能夠定位到http服務器,訪問ssh時,系統定位到ssh服務器,那麼咱們就要使用基於端口的持久鏈接。以下例
要求:讓client訪問網頁時轉到server1的主頁,使用ssh時轉到server2上的ssh服務上。
在director上進行配置
[root@localhost ~]# ipvsadm –C
[root@localhost ~]# ipvsadm -A -t 192.168.2.11:80 -s rr -p
[root@localhost ~]# ipvsadm -A -t 192.168.2.11:22 -s rr -p
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.20 -m
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:22 -r 192.168.2.30 –m
在client上對其進行測試
測試網頁:
結果能夠看到是server1中的網頁
測試ssh
能夠看到經過訪問192.168.2.11進入了系統192.168.2.30
示例3 基於防火牆標記持久鏈接
在日常的購物時咱們都是直接使用http來進行鏈接的,也就是使用80端口,爲了安全性,在付費的時候都會使用https也就是443端口,來進行安全付費,而若是你在server1上進行了物品的購買,而在付費的時候,要創建新的鏈接,那麼服務器在可能被鏈接到server2的https服務上,這顯然是不行的,咱們要在和贓物一個相同數據庫中進行付費的操做,才能找到本身所購得的商品,而顯然咱們要讓鏈接再次進行時,必定要鏈接到購物的那個server1,這就須要基於防火牆標記來實現了,它能夠依據標記將贓物和付費的兩位鏈接都鏈接到同一個服務器中,這就達到了咱們的要求。
要求:在相同的服務器上進行購物與付費
咱們要先給server1與server2設置https鏈接
Server1與server2各作以下配置
注:兩個服務器都要作https
[root@localhost ~]# cd /etc/pki
[root@localhost pki]# vim tls/openssl.cnf
修改以下部分
保存退出
建立須要的文件
[root@localhost pki]# cd CA/
[root@localhost CA]# mkdir certs crl newcerts
[root@localhost CA]# touch index.txt serial
[root@localhost CA]# echo "01" > serial
爲CA認證中心建立密鑰
[root@localhost CA]# openssl genrsa 1024 > private/cakey.pem
生成證書
如今來爲http服務應用ssl加密
[root@localhost ~]# mkdir /etc/httpd/certs
[root@localhost ~]# cd /etc/httpd/certs
爲http建立私鑰
[root@localhost certs]# openssl genrsa 1024 > httpd.key
生成請求文件
請求證書
[root@localhost certs]# openssl ca -in httpd.csr -out httpd.pem
安裝mod_ssl
[root@localhost certs]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh distcache-
[root@localhost Server]# rpm -ivh mod_ssl-
[root@localhost pki]# cd /etc/httpd/conf.d/
[root@localhost conf.d]# vim ssl.conf 修改以下
SSLCertificateFile /etc/httpd/certs/httpd.pem
SSLCertificateKeyFile /etc/httpd/certs/httpd.key
SSLCACertificateFile /etc/pki/CA/cacert.pem
重啓服務器
[root@localhost conf.d]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
Server1與server2都作了以下配置以後,開始在director上開始作基於防火牆標記持久鏈接
[root@localhost ~]# ipvsadm –C
[root@localhost ~]# iptables -F -t mangle
[root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.2.11 -p tcp --dport 80 -j MARK --set-mark 10
[root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.2.11 -p tcp --dport 443 -j MARK --set-mark 10
[root@localhost ~]# ipvsadm -A -f 10 -s rr -p 1800
[root@localhost ~]# ipvsadm -a -f 10 -r 192.168.2.20 -g
[root@localhost ~]# ipvsadm -a -f 10 -r 192.168.2.30 –g
測試:
使用http鏈接
使用https鏈接
測試成功