端口映射其实就是常说的NAT的一种,其功能就是把在公网的地址转翻译成私有地址(目标地址转换DNET)
中实现的三种IP负载均衡技术:
VS/NAT:在已有的IP负载均衡技术中,主要有通过(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器
VS/TUN:通过IP隧道实现虚拟服务器。(Virtual Server via IP Tunneling)
VS/DR:通过实现虚拟服务器的方法
LVS DR模型:
CIP进入Director中目标IP(VIP)没改变,只是改变了目标IP 的mac。
当响应返回时,源IP是VIP,目标IP是CIP。
都处于同一物理网络,不要跨越路由器
拒绝realserver上VIP对前端路由上的VIP的arp请求:
在LVS DR模型中:
Realserver中有eth0和lo接口,lo接口上配置的是VIP地址,要设置来自 director向后端realserver转发请求时,通过lo接口接进来,它还要从lo出去,lo又没办法出去,所以lo就将响应通过eth0转发出去,能通过eth0转发出去的条件是,eth0(DIP)必须指向一个网关,这个网关可以连向互联网。Eth0必须把网关指向能够到达CIP的网关。
CIP -- VIP --- DIP --- RS(lo -->eth0)--router --CIP
LVS-DR模型:
Director两个地址:VIP, DIP
RS有两个地址:VIP, RIP
禁止RS响应对VIP的ARP广播请求:
1、在前端路由上实现静态MAC地址VIP的绑定;
前提:得有路由器的配置权限;
缺点:Directory故障转时,无法更新此绑定;
2、arptables
前提:在各RS在安装arptables程序,并编写arptables规则
缺点:依赖于独特功能的应用程序
3、修改Linux内核参数
前提:RS必须是Linux;
缺点:适用性差;
两个参数:
arp_announce:定义通告模式
arp_ignore:定义收到arp请求的时响应模式
配置专用路由,以使得响应报文首先通过vip所配置的lo上的别名接口
Linux的工作特性:IP地址是属于主机,而非某特定网卡;
LVS-DR配置架构根据其VIP与RIP是否在同一样网络上有两种模型:
在Directory和RS上配置VIP,要使用如下格式:
# ifconfig ALIAS VIP netmask 255.255.255.255 broadcast VIP up
# route add -host VIP dev ALIAS
LVS-DR的配置:
Director: 最好打开路由转发
# iptables -t filter -F
# ifconfig eth0:0 VIP up 不加broadcast和netmask
# route add -host VIP dev eth0:0
RSs:
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up
# route add -host VIP dev lo:0
Director:
# ipvsadm -A -t IP:PORT -s SCHEDULER(调度方法) 定义集群服务
# ipvsadm -a -t IP:PORT -r RS1 -g(lvs类型) -w WEIGHT
/proc/sys/net/ipv4/conf/etho
proc/sys/net/ipv4/conf/all
先配置参数,再去配置IP地址。
arp_announce :arp主动通告(只当有arp请求时,主机主动的通告)
arp_announce=0(默认) B网卡上的所以网卡地址都去通过
arp_announce=1 尽量只让B上和A在同一物理网络的网卡去通告
arp_announce=2 只让B上和A在同一物理网络的网卡去通告(假设A为172.16网络, 那就只让m去向A通告)
arp_ignore :arp 响应
arp_ignore=0 只要主机上有地址,就去响应arp请求
arp_ignore=1 对方请求的本地IP地址,并且配置在响应报文的接口上(A去请求m, 只有m刚好在与它连接的端口上,才响应)
arp_ignore=2 同上,跟请求的一方必须在一个子网内
arp_ignore=3 同上,并且某一网卡的作用域是本地(localhost)的话,不予响应
arp_ignore=8 同上,并且全部的请求都不响应