高可用的实现——LVS(Linux Virtual Server)


高可用的实现——LVS(Linux Virtual Server)
 
Linux Virtual Server
 
几个术语:
Director:也可以称为调度器,LVS前端设备;
realserver:也称为真实内部服务器,是真正在提供服务的;
VIP:对外公布的IP,即客户请求进来的IP地址;
DIP:调度器和realserver之间通信的地址;
LVS工作模式介绍
 
LVS实现服务器集群负载均衡有三种方式,NAT,DR和TUN,下面简单谈谈这三种方式的区别:
 
LVS-NAT:
这个方法的思路是实施网络层(IP层)数据欺骗,它把客户端发送到redirector数据IP包的目标地址进行了替换。
1、网络环境
一台director + N台realserver,director和realserver在同一个私有网段,director是realserver的默认网关。只有director拥有公共IP,可以暴露在广域网上。
 
2、客户端请求
客户端请求先到公用IP(director),请求报文中的IP包目标地址被替换成了一个director据负载均衡策略选择的一个realserver的IP。
 
3、realserver响应
realserver处理完请求生成了返回数据包,返回数据IP包的源地址是realserver的IP地址,目标地址是客户服务端IP地址。由于realserver的默认网关是redirector,因此尽管返回IP数据包的目标地址是客户端的ip地址,返回数据包仍然首先被发回到redirector上。redirector再次实施欺骗,把返回的IP 数据包的源地址改成自己的IP。然后再转发到交换机上返回给客户端。
整个过程redirector的任务是实施了2次IP层欺骗修改,一次是修改了请求数据包得目标地址,这次修改的目的是为了实现数据的负载均衡的分发。另一次是修改了响应数据包的源地址,目的是为了隐藏realserver,使用户感觉不到realserver的存在。
 
3、限制:整个集群的吞吐量受到redirector的带宽限制(主要是出口带宽)。
 
LVS-DR:
这个方法的思路是实施数据链路层数据欺骗,修改网络帧数据的Mac地址。
1、网络环境
一台director + N台realserver,director和realserver都拥有公共IP,都暴露在广域网上,此外realserver还有一个和director ip地址一样的ip别名。
也就是说realserver有2个ip,一个真实的ip地址,一个和direcotr地址一样的IP别名(即公用IP),公用IP就是开放给客户端访问的IP地址。
realserver还需要做一个配置,使它们忽略所有的针对公用IP的ARP广播,当系统arp广播询问哪个mac地址拥有公用IP时,就只有调度服务器会响应,外界发送的数据就不会发给实际服务器。
 
2、客户端请求
客户端请求先到公用IP(director),由于网络环境已配置为只有director响应过ARP广播,因此请求报文的mac地址会被改为realserver的mac地址。
也就是说redirector实施链路层欺骗,将帧数据的目标mac地址替换成根据负载均衡策略决定的某一realserver的mac地址。
 
3、realserver响应
realserver收到mac帧,然后将mac帧组装成ip包,发现ip包中的目标地址和自己的ip别名相同,没有问题,继续处理,(这就是要求ip别名相同的原因,如果不同,操作系统可能会直接忽略)生成响应数据,发送回去。这时候由于redirector不是默认网关,因此这些数据会直接发到广域网上,广域网会把数据送到客户端。
 
4、优点:返回数据包无需经过redirector,没有redirector带宽瓶颈。原则上集群的带宽是所有实际服务器带宽之和,当然他们不可能超过连接的广域网交换机的带宽。
 
5、限制:需要购买多个公共IP,director和realserver必须在同一个 WAN网段,也就是要在同一个交换机上。
为什么一定要在同一网段呢?很简单,如果realserver在另外一个网段,redirector把整个数据包和mac帧修改完之后再发送到交换机上,交换机发现自己的wan内找不到这个mac地址,无法进行转发。
 
LVS-TUN:
这个方法是为了突破LVS-DR同一网段内的限制所提出来的。它不做任何欺骗,而是光明正大的交流,在网络层进行了二次包装。
 
1、网络环境
一台director + N台realserver,director 和realserver都拥有公共IP,都暴露在广域网上。公共ip互不相同,没有别名限制,也无需在同一网段。
 
2、客户端请求
客户端发送数据到redirector,redirector把IP包作为有效负载放到一个新的IP包中去,并根据调度策略确定一个特定realserver的ip作为新的IP包得目的地址。这些新的IP包完全符合网络协议,也没有任何欺骗的勾当,因此这些ip包光明正大得穿过wan网段,达到指定的realserver。
 
3、realserver响应
realserver拿到数据后,它需要做一个事情,把ip包的有效载荷提取出来,然后把这些载荷再作为ip包组成TCP,再向上组成最后的请求数据。根据请求数据,realserver生成返回数据后,光明正大返回给客户端。
 
4、优点:和LVS-DR一样,没有redirector出口带宽瓶颈。
 
5、缺点:需要额外的打包和解包,有一定的开销。
 
LVS配置
LVS-NAT的配置
1、realserver配置要求:
配置内部私网地址,默认网关指向调度服务器
2、Directer配置要求 基本配置:
调度服务器需要2块网卡(一块网卡对外,一块网卡对内。1块也可以,配置子接口,对外的VIP和DIP都配置在同一网卡上,不过这样会更加的降低调度器的性能,建议还是双网卡)
关闭selinux和iptables
setenforce 0
service iptables stop
(为了避免不必要的麻烦,在每台服务器上都关闭这2个服务)
打开包转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
ipvsadm -A –t $VIP:$Port-s rr
解释:-A表示添加一个集群服务(可以添加多个,比如添加一个web的80和一个https的443);-t表示是tcp协议;-s表示调度算法是轮询(一共有10种调度算法,可以按照自己实际需要选择)
ipvsadm -a –t $VIP:$Port -r $DIP:$Port-m
解释:-a表示添加一个realserver,后面跟上之前定义的集群服务的地址端口,-r表示增加具体realserver的地址,-m表示模式为NAT模式
 
LVS-DR的配置
1、Realserver配置要求 基本配置
首先先配置限制arp,不然等配置好地址后就产生地址冲突了,通过修改内核参数来实现。
在linux中 ,默认在接口上通告所有接口上IP的arp广播,在接口上应答所有接口上IP的arp请求
arp_announce 限制arp通告
限制等级
0:在接口上通告所有接口上IP的arp广播
1:对于其它设备的arp请求,在接口上尽量限制广播通告应答(不够严格)
2:只通告本接口上IP的arp广播
arp_ignore 限制arp应答
限制等级
0:对于其它设备 的arp请求,应答所有其它接口的上IP的arp应答
1:对于其它设备的arp请求,只应答本接口上IP的arp应答
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf//lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
 
在realserver上的lo口配置VIP,这样配置就限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突
ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255
ifconfig eth0 $DIP up
注意此VIP的接口的广播地址仍然为VIP,限制其广播,子网掩码是32位,下面调度器上的配置也注意此项
配置特殊路由,使目标为VIP的包的以源地址为VIP的lo口出去
route add –host $VIP dev lo:1
Directer配置要求
 
配置VIP和DIP,VIP配置在物理网卡的子接口上
ifconfig eth0 $DIP broadcast $VIP netmask 255.255.255.0 up
ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
配置特殊路由,目标是VIP的包从配置了VIP的物理子接口上出去
route add –host $VIP dev eth0:1
集群配置
ipvsadm -A –t $VIP:$Port-s rr
解释:-A表示添加一个集群服务(这里和NAT中的配置一样)
ipvsadm -a –t $VIP:$Port -r $DIP:$Port-g
解释:其它和NAT也差不多,在最后的模式改为-g,即DR模式
 

相关内容

    暂无相关文章