LVS服务器可以让客户端将LVS服务器作为一个连接的单点,仅仅通过连接LVS服务器便可以得到后端一整个服务器集群的处理与存储能力,这样能够大大提高系统的扩展性与可用性,同时也能够提供服务的安全性,单一入侵一台服务器并不会破坏其他与该服务器隔离的服务。
LVS可以支持如下三种模式:
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
DR在上篇博文中已经详细描述过搭建过程了,这篇我们呢,详细描述NAT以及TUN 的搭建过程
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给后端真实服务器;
3.后端服务器在处理完之后要将响应的报文返回给客户端,但是却不在同一网段;
4.LVS根据自己的追踪技术将后端真实服务响应客户端的报文原地址改为自己的ip地址(SNAT),发送给客户端。
要求: 1.LVS服务器需要有不同的网段。
2.真实服务器的网关必须设置为LVS的ip地址。
优点: 1.安全 2.可以实现不同网段的数据请求。
缺点: 因为在 VS/NAT 中请求和响应报文都需要通过负载调度器,伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身 有可能成为系统的新瓶颈。
如下图所示,这是LVS-NAT模式下的系统结构图:
具体搭建过程:
搭建环境:
调度器:server1:双网卡eth1:172.25.11.1 添加的网卡eth2:172.25.254.100
realserver1:172.25.11.2
realserver2:172.25.11.3
首先配置yum源:
yum repolist:
安装软件:
yum install -y ipvsadm 安装ipvsadm
/etc/init.d/ipvsadm start 启动服务
再添加一块网卡:
设置IP为:172.25.254.100
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 172.25.11.2:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 172.25.11.3:80 -m
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
-> 172.25.11.2:80 Masq 1 0 0
-> 172.25.11.3:80 Masq 1 0 0
打开路由器: vim /etc/sysctl.conf
sysctl –p
yum install httpd -y
/etc/init.d/httpd start
cat index.html
设置网关指向vs
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth1
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=172.25.11.2
PREFIX=24
GATEWAY=172.25.11.1
如果网关设置成功
ping 172.25.254.100会成功
yum install httpd -y
/etc/init.d/httpd start
cd /var/www/html/
cat index.html
/etc/init.d/httpd restart
设置网关:
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth1
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=172.25.11.3
PREFIX=24
GATEWAY=172.25.11.1
如果网关设置成功
ping 172.25.254.100会成功
curl 172.25.254.100出现轮询即可
LVS/TUN的工作流程图如下所示,它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文重新封装,发送给后端真实服务器;
3.后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理;
4.后端真实服务器在处理完数据请求后,直接响应客户端。
要求: 1.lvs和后端真实服务器上都要有vip。
2.不会成为瓶颈。
3.请求的报文不能太大。
优点: 1.快速 2.不安全,不能抵抗DOS攻击
系统结构图:
添加tunl0隧道模式
modprobe ipip 打开隧道
ip link set up tunl0 启动tunl0
ip addr add 172.25.11.100/24 dev tunl0 给tunl0添加vip
ip addr 查看是否加上 tunl0
添加规则:
yum install ipvsadm -y
ipvsadm -A -t 172.25.11.100:80 -s rr
ipvsadm -a -t 172.25.11.100:80 -r 172.25.11.2:80 -i -i就是采用tun模式
ipvsadm -a -t 172.25.11.100:80 -r 172.25.11.3:80 -i
ipvsadm -ln
vim /etc/sysctl.conf
打开内部路由:
net.ipv4.ip_forward = 1
禁用rp_filter内核:
net.ipv4.conf.default.rp_filter = 0
sysctl -p 刷新
modprobe ipip 打开隧道
ip link set up tunl0 启动tunl0
ip addr add 172.25.11.100/24 dev tunl0 给tunl0添加vip
ip addr 查看是否加上 tunl0
yum install arptables_jf -y
arptables -A IN -d 172.25.11.100 -j DROP #将访问100的数据包丢弃
arptables -A OUT -s 172.25.11.100 -j mangle --mangle-ip-s 172.25.11.2 #从100进来的数据从172.25.1.2出去
arptables -L
/etc/init.d/arptables_jf save
/etc/init.d/arptables_jf start
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
vim /etc/sysctl.conf
打开内部路由:
net.ipv4.ip_forward = 1
禁用rp_filter内核:
net.ipv4.conf.default.rp_filter = 0
sysctl -p
curl 172.25.11.100 结果轮询即可