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端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式