1. 程式人生 > >LVS-DR模型實現調度

LVS-DR模型實現調度

Linux LVS

LVS-DR集群環境實現

(LVS服務器的網關可以任意配置,只要能出本地接口就行)

實驗環境:(5臺主機)

一臺客戶端

一臺路由器

一臺LVS服務器

兩臺RS服務器

1、搭建網絡環境

路由器配置:

一個接口連接私網

私網需要配置兩個

一個要和發布出去的私網IP通信(VIP:10.0.0.100,掩碼可以任意)

一個要和和LVS和RS服務器間通信(DIP:192.168.205.101)

一個接口連接公網

配置IP:

公網IP配置:

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.18.106.21
PREFIX=16

私網IP配置:

cd /etc/sysconfig/network-scripts

vim ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.205.101
FREFIX=24

cp ifcfg-eth0 ifcfg-eth0:1

DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.200
PREFIX=24(私網IP,且與LVS的VIP能通信)

打開IP轉發功能

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

重啟network服務

LVS網絡配置:

cd /etc/sysconfig/network-scripts

vim ifcfg-ens33

NAME=ens33
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.205.132
PREFIX=24
GATEWAY=192.168.205.101(網關可以任意配置,因為響應報文直接由RS服務器發往Clinet)

重啟network服務

RS網絡配置(兩臺配置幾乎相同,IP改一下就行了)

cd /etc/sysconfig/network-scripts

vim ifcfg-ens33

NAME=ens33
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.205.132
PREFIX=24
GATEWAY=192.168.205.101(網關需要指定為路由器,由於只有一個路由器,所以指向路由器接口的IP)

重啟network服務

2、實現LVS-DR模型

LVS服務器

#!/bin/bash
vip='10.0.0.100'
iface='ens33:1'
mask='255.255.255.255'
port='80'
rs1='192.168.205.100'
rs2='192.168.205.160'
scheduler='wrr'(調度算法可以修改)
type='-g'
case $1 in
start)
ifconfig $iface $vip netmask $mask 
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1(修改調度算法的時候這裏可修改窮權重)
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
;;
stop)
ipvsadm -C
ifconfig $iface down
;;
*)
echo "Usage $(basename $0) start|stop";exit 1
;;
esac

RS服務器

#!/bin/bash
vip='10.0.0.100'
mask='255.255.255.255'
dev=lo:1
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore(會還網卡的arp_ignore可以為默認值,不影響客戶端訪問RS服務器)
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce(回環網卡的arp_announce可以為默認值,不影響客戶端訪問RS服務器)
ifconfig $dev $vip netmask $mask 
;;
stop)
ifconfig $dev 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

註意:此腳本設置的IP沒有保存到文件中,如果重啟網絡服務需重新運行腳本

了解內容:

限制響應級別:arp_ignore

0:默認值,表示可使用本地任意接口上配置的任意地址進行響應

1: 僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,才給予響應

限制通告級別:arp_announce

0:默認值,把本機所有接口的所有信息向每個接口的網絡進行通告

1:盡量避免將接口信息向非直接連接網絡進行通告

2:必須避免將接口信息向非本網絡進行通告

實現http和https在同一集群調度

在防火墻上打標簽

iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m muliport --dport 80,443 -j MARK --set-mark 10

添加集群(如果之前有別的httpd服務的集群,可以刪掉)

ipvsadm -A -f 10 -s wrr

添加集群的RS服務器

ipvsadm -a -f 10 -r 192.168.205.100 -g

ipvsadm -a -f 10 -r 192.168.205.160 -g

持久連接實現方式:-p選項

每端口持久(PPC):每個端口對應定義為一個集群服務,每集群服務單獨調度

每防火墻標記持久(PFWMC):基於防火墻標記(MAKRK)定義集群服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity

每客戶端持久(PCC):基於0端口(表示所有服務)定義集群服務,即將客戶端對所有應用的請求都調度至後端主機,必須定義為持久模式


LVS-DR模型實現調度