lvs
lvs--linux virtual server
一、lvs:虚拟负载均衡器
1.lvs工作在ios七层模型的第四层--转发(kernel层面),主要分为两部分:ipvasdm--用户管理工具;ipvs+netfilter--内核层面。
2.工作方式:用户管理写策略文件将策略加载至内核层面,实现lvs功能。(管理空间与内核层面的通信)。
3.lvs目前有四种工作模式:DR、NAT、TUN、FullNAT;内核系统目前仅支持前三种模式。
4.netfilter(内核层面)对防火墙数据包与lvs的数据包的处理区分:若是lvs数据包,通过ip_vs模块将其"强制转发"至与其对应的链路。应注意iptables优先级高于ipvs。
5.三种模式原理简介:
(1)DR模式:该模式工作在第二层(路由层)无转发。当客户端访问Vs(服务器)时,第二层通过MAC地址寻址Vs;Vs仅将MAC地址修改为某个后端负载的MAC地址、ip地址不变(ip协议使用在第四层),传给后端负载Rs(Realserver),第二层无转发即无路由功能,这就要求后端负载与服务器vs必须在同一网段;Rs接受信息后,继续向上层应用传递,又第四层使用Tcp协议,因此负载端应有虚拟ip才能完成三次握手协议;客户端收到响应,在第二层进行vip的Arp缓存(ip与MAC地址的映射缓存),如此一来,当下次再访问vip时,将不再经过服务器而是直接访问负载。因此需要在客户端屏蔽对vip的Arp服务,使客户端不对负载地址进行缓存,具体实现见下文。
(2)NAT模式:该模式工作在第四层。数据流原路返回,因此服务器端需要两块网卡,且负载端的网关应设为服务器的后端接口,从而实现数据流的原路返回。实现过程:客户端访问Vs,,Vs进行DNAT转换(cip-->vip转换为cip-->rip);Rs将响应返回再返回给Vs,Vs进行SNAT(rip-->cip转换成vip-->cip)。注意与反向代理原理不同,方向代理工作在ios模型的第七层;DNS域名解析工作在第一层。
(3)TUN模式:隧道协议ipip,支持广域网。
(4)FULLNAT:采用的机制与NAT同,不同的是适用于多vLAN,而NAT仅使用于单个vLAN。
二、lvs实现---DR模式
<1>服务器----如设定为server1
1.yum install ipvsadm ##ipvsadm命令实现管理lvs
2.ipvsadm部分命令使用方法:
ipvsadm -l ##列出策略
ipvsadm -C ##清空策略
ipvsadm -A ##添加策略
3.添加策略,实现管理部分对内核ip_vs的控制
ipvsadm -A -t 虚拟ip:80 -s rr
如:ipvsamd -A -t 172.25.13.113:80 -s rr
## -t:tcp协议;vip:80表示添加虚拟ip的80端口;-s rr:采用轮询算法
ipvsadm -a -t 虚拟:80 -r ip(realserver):80 -g
如:ipvsadm -a -t 172.25.13.113:80 -r 172.25.13.1:80 -g
## -a:添加;-t:tcp; -r ip:真实结点的ip的80端口;-g:DR模式---直连模式
##该策略表示:若是访问vip:80的数据包将 其ip地址改为rip(realserver的ip地址)
注意:若采用DR模式,则不能监听真实主机的8080端口。因为该模式为直连模式,不支持端口转发;NAT模式,支持端口转发
控制原理:
5./etc/init.d/ipvsadm save ##保存策略,会自动刷新至内核层面,重启后策略仍存在
6.ip addr add vip/Netmask dev eth0 ##将vip添加至eth0,使该主机作为服务器端
注意:保证虚拟ip(vip)一定未被占用
7./etc/init.d/ipvsadm start ##开启服务
<2>后端负载----如采用两台主机server2、server4,均做如下操作
1.ip addr add vip dev eth0 ##后端与"服务器端"的连接
注意:负载的ip地址应与vip属于同一vLAN,见DR的工作原理。
服务器将来自客户端的请求转发给后端负载,但服务器不可能记录下所有负载的ip来转发,因此在负载端也需要添加虚拟ip(vip);当对vip 的访问请求到来时,后端负载不再经过服务器而是直接响应客户,此时应注意客户端的arp缓存会记录该响应信息:负载端的真实ip(rip),那么当客户端再次访问vip时,通过send_arp便可以直接访问后端负载,此时lvs也就失去了其负载均衡的意义。那么实现负载均衡需要解决的问题:(1)后端负载不响应关于vip的请求;(2)负载响应由服务器转发过来的请求,不再经过服务器,而是直接与客户端完成Tcp协议,那么客户端对后端负载的arp缓存也很重要,arp服务处于ios七层模型的第二层,所以当关于vip的数据包传输至第二层时,我们可以将vip转换成rip、cip信息不变,进行arp缓存。
2.安装arptables:工作在ios模型的第二层
yum install arptables_jf -y
3.arptables部分命令:
arptables -L ##列出策略
arptables -F ##清空策略
arptables -A ##添加策略
arptables -nL ##仅列出ip策略
4.arptables -A IN -d vip -j DROP
##当外界访问vip时,负载端不做响应
arptables -A OUT -s vip -j mangle --mangle-ip-s rip
##当发送的数据包的源地址是vip时,则将vip转换为rip(真机ip),实现客户端不对本机作arp缓存。
5./etc/init.d/arptables_jf save ##保存策略
若要修改策略可直接更改策略文件:/etc/sysconfig/arptables
6. /etc/init.d/arptables_jf start ##开启服务
<3>测试:访问vip
(1)curl 172.25.13.113
(2)浏览器访问172.25.13.113 ##刷新检查后端负载是否轮询
(3)客户端:arp -an 172.25.13.113 ##查看对vip的arp缓存
(4)关闭某负载的httpd服务,即80端口,如下结果显示可以看出lvs对后端负载本身无健康检查。
FULLNAT模式
工作原理:原路径返回;DDOS抗攻击
在IN中,session通过五元组存储:sip+sport、dip+dport、TCP/UDP;利用session存储进行双向哈希,实现双向DNAT,因此其性能比NAT差些。
一、内核编译
1.rpm -ivhkernel-2.6.32-220.23.1.el6.src.rpm
2.软件依赖性:
yum install redhat-rpm-config patchutils xmlto asciidocelfutils-libelf-devel zlib-devel binutils-devel newt-devel python-develperl-ExtUtils-Embed hmaccalc -y
2.yum install rpm-build -y ##安装工具
cd /root/rpmbuild/SPECS/
rpmbuild -bp kernel.spec
##要求所在主机有gcc
3.软件依赖性:
yuminstall asciidoc-8.4.5-4.1.el6.noarch.rpm newt- devel-0.52.11-3.el6.x86_64.rpm -y
4.rpmbuild -bp kernel.spec
##安装过程中,出现“暂停现象”,根据显示内容可知是在urandom中取随机数,当随机数取完后就回出现暂停,根据提示,在另外一个终端执行rngd-r /dev/urandom
提示:yum provides */rngd ##查看提供rngd的软件
6.打补丁:
cd lvs-fullnat-synproxy/
cp lvs-2.6.32-220.23.1.el6.patch /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
cd /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
patch -p1 < linux-2.6.32-220.23.1.el6.x86_64 ##进行补丁
7.vim Makefile
编辑内容:
EXTEND
5.make
make modules_install
make install
6.cd /boot/grub ##安装路径
vim gurb.conf
修改内容:
10 default=0
:wq
7.reboot
重启之后可用uname -r 命令查看系统当前版本是否为设定的版本