LVS介绍及相关配置
一. lvs概述
lvs是一种工作在四层协议上的负载均衡解决方案,在1998年5月由章文嵩博士创建。目前广泛使用的负载均衡模型主要有:
1)工作在四层协议(lvs):主要用于四层协议上的负载均衡,性能相较于工作在七层的协议更好。但是协议栈是工作在传输层,对于传输层以上的高级特性支持不足。
2)工作在七层协议(nginx、haproxy):主要解决七层协议上的负载均衡(nginx也可以工作在四层,需要在编译的时候添加--with-streams参数),更加适合于http服务、邮件服务等高层协议的服务。相较于四层协议负载均衡,牺牲了少量的性能,提供了更有针对性的服务。
二. lvs工作模式
2.1.两段式工作原理:
lvs工作原理和iptables的工作原理相似,他们都具有一个位于内核空间的框架(netfilter、ipvs)+用户空间的管理工具(iptables、ipvsadm)。用户空间的管理工具提供了我们操作规则的入口,我们通过配置相关的规则到内核空间的框架中,使之生效来实现相对应的功能。
lvs模型涉及到的设备主要可以分成两类:一类是director调度器(用来接收客户端的请求,并通过ipvs规则及算法转发到后端真正提供服务的设备),另一类是realserver(即后端真正提供服务的设备)。lvs安装在director调度器上,位于内核空间的ipvs监听在netfilter中的input链上,并且在这里设定了一些规则,一旦发现访问的是集群服务,强制修改请求报文(从这里区分了nat模式、dr模式、tun模式),并立即送往prerouting链上。如果经判断不是访问集群服务的请求,还是根据网络层协议正常访问本机[根据ip+port判断]。
2.2.注意:
1、因为lvs模型依赖了netfilter内核框架,并且对处理访问集群服务的请求报文,强行做了修改,这会导致iptables功能失效。因此lvs和iptables不能共同使用。
2、2.4.23版本之前的内核没有内置ipvs代码,需要打补丁。在此版本后,可以直接使用lvs功能。
三. lvs常用工作模型
3.1.nat模型
工作原理:
当监控到clientip访问集群服务,director调度器会根据调度算法挑选一个后端realserverip,将数据报文送往postrouting链进行dnat转换(目标地址转换)。当后端realserver处理请求完毕后,响应报文再次经由director回复client,在director的prerouting链进行snat(源地址转换)。
优点与不足:
优点是配置简单;缺点是因数据进出都要经过director,所有性能较差,一般带动10个rip。
nat模型注意事项:
1)集群节点与director必须在同一个网络中。
2)rip地址一般都是私有地址,而且仅用于与dip通信。
3)director位于client和realserver之间,负责进出的所有通信。
4)集群节点要使用dip作为默认网关。
5)director支持端口映射。
6)任何操作系统都可以作为realserver。
7)director容易成为集群性能的瓶颈。
3.2.dr模型
工作原理:
【director调度阶段】director在接收到client的请求后(client访问的是director的vip),发现该请求是访问集群服务时,便修改请求报文的目标mac地址并通过postrouting链转发该报文至realserver。
【realserver处理阶段】每个realserver都具有vip,配置在ip别名上,仅用于封装响应报文,不用于与director通信。当realserver收到该请求报文时,在数据链路协议发现mac地址是自己的,解封装后发现自己也有配置在别名上的vip,便接收该报文并处理。
【realserver回复阶段】realserver收到的这个请求报文,其源ip地址和目标ip地址均没有做修改。因此在回复报文时,realserver根据网络层ip协议直接回复client,不需要经过director。
优点与不足:
优点是director调度器仅需要处理请求报文,不用处理响应报文,工作效率大大提升,能够带动数百台的realserver;缺点是配置相对于nat模型要复杂。
dr模型注意事项:
1)各集群节点必须跟director在同一个物理网络中,因为要根据mac地址转发。
2)rip可以不用私网地址。
3)director仅处理入站请求,响应报文直接由realserver回复给客户端。
4)realserver一定不能将默认网关指向director,要指向能访问互联网的路由设备。
5)director无法实现端口映射,只改变了mac地址,tcp/ip都没有发生改变。
6)大多数的操作系统都可以用在realserver上,server必须要支持隐藏ip。
拓展:禁止realserver响应arp方式
1)在路由设备上固定写上vip的mac地址。
2)arptables规则链上定义规则,不响应arp。
3)kernel parameter:有两个参数arp_ignore、arp_announce用于限定主机对arp广播的响应级别和通告级别。用户请求的vip和进来的网络接口不是同一个,那就忽略这个arp报文。
arp_announce:
0:将本机任何接口的任何地址向外通报;1:尽可能向目标网络通报与其网络匹配的接口。2:仅向与本地接口匹配的网络进行通告。默认0。
arp_ignore:
0:表示回应任何本机配了的地址。1:表示只响应该ip地址且该ip配置同网络的接口上。默认0。
3.3.tun模型
工作原理:
director当接收到client的请求报文并发现访问的是集群服务时,调度器会在原有的ip请求报文外部,再次封装一层ip报文并发送至外网(在原有的ip报文再次封装一层ip报文即为隧道技术),最终转发至不同网络域的realserver。
优点及缺点:
优点是能够解决异地灾备的需求;缺点是director和realserver设备要支持隧道技术,配置复杂;
tun模型注意事项:
1)realserver可以跨越互联网。
2)realserver的rip必须是公网地址。
3)director只处理入站请求,响应报文有realserver发往客户端。
4)只有支持隧道协议的os才能用于realserver。
5)不支持端口映射。
四. lvs配置详情(centos7)
4.1.nat模型配置
网络规划
nat模式
vip:
192.168.100.150 outer
dip:172.16.100.10 inner
rip1:
172.16.100.11 inner
rip2:
172.16.100.12 inner
realserver配置
1 # 安装nginx并配置 2 yum install nginx -y
director配置
1 # 安装ipvsadm工具 2 yum install ipvsadm -y 3 # 关闭icmp重定向 4 echo 1 > /proc/sys/net/ipv4/ip_forward 5 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects 6 echo 0 > /proc/sys/net/ipv4/conf/defaults/send_redirects 7 echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects 8 echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects 9 # director设置ipvsadm 10 ipvsadm -a -t 192.168.100.150:80 -s rr 11 ipvsadm -a -t 192.168.100.150:80 -r 172.16.100.11:80 -m 12 ipvsadm -a -t 192.168.100.150:80 -r 172.16.100.12:80 -m
4.2.dr模式配置
网络规划
director:
vip:192.168.100.150
dip:192.168.100.155
rip1:
lo:0 192.168.100.150(vip)
rip 192.168.100.151
rip2
lo:0 192.168.100.150(vip)
rip 192.168.100.152
realserver配置
# 配置内核参数,禁止响应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 # 配置别名vip ifconfig lo:0 192.168.100.150 broadcast 192.168.100.150 netmask 255.255.255.255 up # 添加默认路由指向director前的网关,由于实验环境使用nat模式,已经配好了指向默认网关,这里就不再配置了
director配置
# 安装nginx并配置 yum install nginx -y # 配置端口转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward # 配置vip ifconfig ens33:0 192.168.100.150 broadcast 192.168.100.150 netmask 255.255.255.255 up # 添加至realserver的路由 route add -host 192.168.100.150 dev ens33:0 # 配置ipvs ipvsadm -a -t 192.168.100.155:80 -s rr ipvsadm -a -t 192.168.100.155:80 -r 192.168.100.151:80 -g ipvsadm -a -t 192.168.100.155:80 -r 192.168.100.152:80 -g
上一篇: Django基础使用
下一篇: 【原创】(二)Linux物理内存初始化