负载均衡
原来就一台机器,所有的访问都需要访问到这一台,给回应。容易给服务器撑爆了,现在多加了一些服务器,把原来的访问量分散到多台机器上,这个叫负载均衡。节省时间,防止服务器崩溃。
原理
之前:
我把服务器的外网ip直接暴露给用户,用户根据ip直接访问就行
外网IP指的是服务器在互联网上唯一的标识,也称为公网IP或者公共IP。与之相对的是内网IP,用于在局域网(LAN)内部进行通信。通过外网IP,用户可以直接从互联网上访问服务器,并建立客户端与服务器之间的连接。
现在:
我有三台机器,就有三个ip,mac地址也会有三个
那用户怎么去访问这三个公网ip呢?
用户只访问一个公网ip,但如果ip有三个的话到底是哪个服务器来回应就是问题。(到底访问谁)
所以需要有另一台服务器去管理这三个真实的服务器,用户直接跟管理服务器去对话,转到这三台服务器中的一台
发展
1.使用DNS域名解析服务器
以前没有负载均衡服务器的时候用DNS服务器,只要把三个IP都绑定到DNS服务器的一个域名上,解析的时候就能通过轮询的方式给访问分配到不同的服务器上。
但如果ip1坏了,DNS服务器还没来得及更新服务器的状态,来访问了仍然轮询到ip1,那么用户就会以为整个系统瘫痪了,这是大问题。
2.使用load balance服务器(负载均衡服务器LB,LVS的前身)
把访问分散到各个ip的服务器里面,LB有两个网卡eth0、eth1,一个访问内网ip,一个访问公网ip(VIP,virtual ip)
用户通过外网ip到达了LB,LB再通过各种策略去转发给真实ip
3.Linux Virtual Server(LVS)虚拟服务器
模式
NAT策略
net address translation网络地址转换,LB把用户发送的数据包给扒开,里面的目的端口肯定是LB提供的公网ip,端口号是LB给提供的,假如LB让用户去访问ip1,那么就把数据包的目标ip和端口号替换成ip1内网ip的就可以,然后直接转发。(问谁的策略:轮询、加权轮询,问ABACA,最小连接,连的少的服务器下次优先处理)
DR直接路由服务器
direct rounting
LB服务器既要把用户发过来的数据包转发给真实服务器,又要把服务器返回的数据发回给用户,这个工作量很大,那么可以直接把真实服务器返回的数据不通过LB服务器直接返给用户,省了一大半工作量。
LB服务器把客户端发来的数据通过MAC地址去转发给真实服务器,真实服务器再给客户端发送回复,那么就需要在真实服务器上挂载VIP(以负载均衡服务器的身份),现在四个服务器都是VIP,那么客户端来数据了谁来响应?因为找ip实际上找的是mac地址,把真实服务器的VIP挂载到non-ARP端口上,就只有LB会响应
TUN模式
把客户端给LB的包再封装一层IP头,就是从LB到真实服务器的IP头,这样就可以LB和真实服务器不再必须在同一网段内
LVS是把LB封装到Linux系统内核上作为一个开源项目软件