LVS高級應用-利用防火牆標記分類報文

        實際生產中,咱們可能會有多個不一樣的應用須要在同一個集羣進行調度,此時須要藉助於防火牆來分類報文,然後基於標記定義集羣服務;能夠將多個不一樣的應用使用同一個集羣服務進行調度。例如http 和 https是兩個集羣服務,訪問電商網站瀏覽商品的時候使用的是http連接,可是若是要購買的時候會跳轉到https連接,可是https和http不是同一個集羣服務,若是跳轉到不是同一臺主機。會話就沒辦法保持,可能這時候商品就沒了,這時候怎麼辦?咱們就能夠藉助防火牆打標機來分類報文,將http和https看成同一個集羣服務,從而實現會話保持。html

方法:node

#打標記方法(在Director主機):
iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER nginx

#示例:將目的ip是192.168.253.192,目的端口是80和443的數據包都打上80443的標記
iptables -t mangle -A PREROUTING -d 192.168.253.192 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 80443算法

#在Dorector主機基於標記定義集羣服務:
ipvsadm -A -f NUMBER [options]服務器

#示例:新增一個集羣服務,基於防火牆標記進行劃分,調度方法爲加權輪詢
ipvsadm -A -f 80443 -s wrr

實驗環境: (RS主機

session

RS               RIP                           VIP                   系統版本        軟件         提供的服務
RS1    192.168.253.129    192.168.253.192      CentOS6         Nginx          http,https
RS2    192.168.253.140    192.168.253.192      CentOS7         Nginx          http,httpsapp

                   (DR主機)負載均衡

DR              DIP                         VIP                 系統版本                     軟件                         提供的服務tcp

DR    192.168.253.128     192.168.253.192     CentOS7        ipvsadm,iptables           四層負載均衡
測試

LVS使用的模式:DR

第一步:RS1端安裝Nginx

#添加阿里景象站的epel源,不一樣的系統方式不同,RS1是CentOS6系統
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#yum安裝Nginx
yum install nginx -y
mkdir /etc/nginx/ssl

第二步:RS2端安裝Nginx

#添加阿里景象站的epel源,不一樣的系統方式不同,RS2是CentOS7系統
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#yum安裝Nginx
yum install nginx -y
mkdir /etc/nginx/ssl

第三步:在DR服務器上自建CA,並簽發證書

#自建CA
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
touch /etc/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial
#簽發證書,域名爲www.ice.com
mkdir -pv ~/nginx
(umask 077; openssl genrsa -out ~/nginx/ssl.key 2048)
openssl req -new -key ~/nginx/ssl.key -out ~/nginx/ssl.csr -days 365
openssl ca -in ~/nginx/ssl.csr -out ~/nginx/ssl.crt

第四步:將DR簽發的證書,分發到RS1和RS2的/etc/nginx/ssl目錄中

scp ~/nginx/ssl.key root@192.168.253.140 /etc/nginx/ssl/ssl.key
scp ~/nginx/ssl.key root@192.168.253.129:/etc/nginx/ssl/ssl.key
scp ~/nginx/ssl.crt root@192.168.253.140:/etc/nginx/ssl/ssl.crt
scp ~/nginx/ssl.crt root@192.168.253.129:/etc/nginx/ssl/ssl.crt

第五步:修改RS1和RS2的nginx配置文件,配置http和https鏈接
RS1端配置

mkdir -pv /var/www/html/{http,https}
echo "192.168.253.129:80">/var/www/html/http/index.html
echo "192.168.253.129:443">/var/www/html/https/index.html

nginx配置文件以下:

worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
root /var/www/html/http;
location / {
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
         }
}
server {
listen 443 ssl;
server_name www.ice.com;
ssl_certificate /etc/nginx/ssl/ssl.crt;
ssl_certificate_key /etc/nginx/ssl/ssl.key;
ssl_session_cache shared:SSL:1m;
         }
}

RS2端配置

mkdir -pv /var/www/html/{http,https}
echo "192.168.253.140:80">/var/www/html/http/index.html
echo "192.168.253.140:443">/var/www/html/https/index.html

nginx配置文件

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html/http;
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
      }
}
server {
listen 443 ssl http2 default_server;
root /var/www/html/https;
ssl_certificate "/etc/nginx/ssl/ssl.crt";
ssl_certificate_key "/etc/nginx/ssl/ssl.key";
ssl_session_cache shared:SSL:1m;
      }
}

第六步:在RS1和RS2上修改內核參數,設置VIP

ifconfig lo:0 192.168.253.192/32 up
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

第七步:DR:配置VIP,藉助防火牆作標記,將http和https看成同一個集羣

ifconfig ens33:0 192.168.253.192 up
iptables -F
iptables -t mangle -A PREROUTING -d 192.168.253.192 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 80443
ipvsadm -A -f 80443 -s rr
ipvsadm -a -f 80443 -r 192.168.253.129 -g
ipvsadm -a -f 80443 -r 192.168.253.140 -g

第八步:測試
咱們在這幾臺服務器以外從新開了一臺服務器,僞裝用戶,ip爲192.168.253.158,須要將自建的CA文件發送過去

##DR端操做
scp /etc/pki/CA/cacert.pem root@192.168.253.158:~/

而後修改一下/etc/hosts文件

#僞裝用戶的服務器修改/etc/hosts
#添加一條
192.168.253.192 www.ice.com

而後能夠訪問測試了

 

這裏能夠看出。將80和443看成一個集羣服務,因此進行輪詢第一次是訪問192.168.253.140的80端口。第二次則訪問192.168.253.129的443端口。這樣一直下去。

第九步:修改DR上的ipvsadm的調度算法。
修改調度算法爲sh,進行ip綁定,讓相同主機訪問的服務器是同一個,這樣就能夠在http切換https的時候也會在同一個服務器達到會話保持的目的。

#DR端
ipvsadm -E -f 80443 -s sh
第十步:再次測試
咱們修改了調度方法以後再次測試

如今能夠看到所有都綁定在了192.168.253.140這個服務器上了。

相關文章
相關標籤/搜索