(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端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式
原文地址:http://blog.51cto.com/13520924/2093474