热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux之LVS虚拟服务器的原理及环境搭建(DR模式)

LVS作为一款优秀的负载均衡软件,一直受到很多企业的青睐,虽然性能比不上价格昂贵的负载均衡硬件,但对于大部分的业务场景,LV

LVS作为一款优秀的负载均衡软件,一直受到很多企业的青睐,虽然性能比不上价格昂贵的负载均衡硬件,但对于大部分的业务场景,LVS还是能出色地胜任的。LVS工作在网络的第四层,内核的tcp/ip栈上,这也决定了它在所有负载均衡软件中性能是最好的。

一、LVS

1. LVS的介绍

LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

LVS主要由两部分组成,一个是工作在用户空间的ipvsadm,另一个是工作在内核上的ipvs。ipvsadm主要负载管理集群服务,包括添加、删除、修改集群服务、对数据包进行监控等,真正起到负载均衡的是ipvs。ipvs主要监听在INPUT钩子函数中,一旦发现用户请求的是集群服务,ipvs会将数据包forward到POSTROUTING的钩子函数上,然后转发给后端的realserver。

LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

2. LVS的三个部分

(1)Load Balancer:这是LVS的核心部分,它好比我们网站MVC模型的Controller。它负责将客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处理。另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把其剔除,恢复后又可用加上。该层由一台或者几台Director Server组成。

(2)Server Array:该层负责具体业务。可有WEB Server、mail Server、FTP Server、DNS Server等组成。注意,其实上层Director Server也可以当Real server用的。

(3)Shared Storage:主要是提高上一层数据和为上一层保持数据一致。

3. 专用术语

  • VS:virtual server,director,dispatcher
  • RS:real server
  • CIP:客户读ip
  • VIP:用于接受客户端通信的ip
  • DIP:用于调度器与realserver通信的ip
  • RIP:用于提供真正服务的ip

4. LVS的四种模式

LVS的四种模式主要是为了实现服务器的负载均衡。

(1)VS/NAT模式

VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。

(2)VS/TUN隧道模式

VS/TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器。它跟VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。

(3)VS/DR直接路由模式

VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。

(4)fullNAT模式

fullnat模式和nat模式相似,但是与nat不同的是nat模式只做了两次地址转换,fullnat模式却做了四次。fullNAT需要转化访问来源,访问目的ip需要编译内核,导致了效率的低下。

5. 十种调度算法

LVS负载均衡调度算法主要有轮询调度(rr)、加权轮询调度(wrr)、最小连接调度(lc)、加权最小连接调度(wlc)、基于局部的最少连接(lblc)、带复制的基于局部性的最少连接(lblcr)、目标地址散列调度(dh)、源地址散列调度U(sh)、最短的期望的延迟(sed)、最少队列调度(nq)

二、LVS中DR模式的部署

实验准备:

  • 一台lvs调度器server1(安装ipvsadm)172.25.65.1
  • 两台后端服务器(安装httpd)server2(172.25.65.2)和server3(172.25.65.3)
  • 一台测试机

server1:

yum install -y ipvsadm
vim /etc/sysconfig/ipvsadm-config #修改为重启服务后写入策略
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm

开启服务时,会报错,我们查看日志文件,找出错误。在开启服务之前,我们需要创建一个文件,服务会自动识别该服务,识别不到则会报错。

在lvs中添加策略,指定实现负载均衡的模式为DR直接路由模式,在添加过程中要注意的是,添加的策略要在服务重启后才能被写入,之前在ipvsdam-config配置文件中已经设置过了。

ipvsadm -A -t 172.25.65.100:80 -s rr #添加虚拟lvs的策略为轮询
ipvsadm -a -t 172.25.65.100:80 -r 172.25.65.2:80 -g #添加后端服务器
ipvsadm -a -t 172.25.65.100:80 -r 172.25.65.3:80 -g
#其中,-A:添加虚拟服务 -t:tcp -s:调度方式 -a:添加真实服务器 -r:真实服务器的ip -g:直接路由模式dr
ipvsadm -ln #不解析,查看策略
cat /etc/sysconfig/ipvsadm #查看策略文件

在调度器中添加vip(用户请求的入口ip)

server2和server3同时进行如下操作

yum install httpd -y
vim /var/www/html/index.html
systemctl restart httpd
ip addr add 172.25.65.100/24 dev eth0 #添加ip

测试机进行测试

curl 172.25.31.100 #测试网页
arp -an | grep 100 #查看该主机所访问到的mac地址
arp -d 172.25.31.100 #清除mac信息

我们会发现开始访问时,客户端一至访问的是server2的内容,没有进行轮询,那是因为lvs和两个后端服务器的vip均相同,客户端会直接请求后端服务器,而不经过lvs调度器,这样的情况是不允许的。而后通过mac地址的清理,页面的内容发生了改变,但这样的操作也不能实现我们的负载均衡目的,为此我们需要对后端服务器进行如下操作,使它不接收直接来自客户端的请求,以实现客户端访问lvs,lvs进行访问请求的分配。

server2和server3中同时进行如下操作

yum install -y arptables
arptables -A INPUT -d 172.25.65.100 -j DROP #将访问100的包丢弃
arptables -A OUTPUT -s 172.25.65.100 -j mangle --mangle-ip-s 172.25.65.2 #回包
# -d:目的ip -A:添加 -s:源地址 -j:动作
arptables -nL #查看策略是否写入
arptables-save > /etc/sysconfig/arptables #将策略写入文件
cat /etc/sysconfig/arptables #该文件存放策略
systemctl start arptablescat #必须先将策略存入文件,在开启,未存入,启动后策略会丢失
arptables -F #清除策略

测试机进行测试

curl 172.25.65.100

客户端发出请求,lvs调度器会接收该请求,并根据调度器中所写的策略,将客户请求分别发送到后端服务器上,以实现负载均衡。


推荐阅读
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 架构设计:负载均衡层设计方案之负载场景和解决方式篇
    来自:JAVA入门中https:blog.csdn.netyinwenjiearticledetails46605451在上一篇《标准Web系统的架构分层》文章中&# ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • OS的版本是:windows2003R2EnterpriseEditionServerPack2IIS6.0安装后,Web服务器扩展中的ASP.NETv1.1.4322也都启用, ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
  • 【2021Java最新学习路线】开启mysql远程连接
    前言面试技巧另外开篇再说,先上面试干货吧。面试的题目并不一定有严格的顺序关系,有的是从前一个问题延伸而来,(探究的是一个知 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • 目录Atlas介绍Atlas部署Atlas基本管理Atlas结合MHA故障恢复读写分离建议Atlas介绍Atlas是由Qihoo360Web平台部基础架构团队开发维护的一个基于My ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • PartI:取经处: http:www.ramkitech.com201210tomcat-clustering ... [详细]
author-avatar
mobiledu2502858393
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有