- 负载均衡
- 负载均衡算法
- 转发的实现
一、负载均衡
集群中的引用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点。负载均衡会根据
集群中的每个节点的负载情况,将用户请求转发到合适的节点上;
负载均衡可以用来实现高可用以及伸缩性:
· 高可用:当某个节点故障时,负载均衡会将用户的请求转发到另外的节点上,从而保证所有的服务持续可用;
· 伸缩性:根据系统整个负载情况,可以很容易地添加或移除节点;
负载均衡运行包含两个过程:
1. 根据负载均衡算法的到转发的节点
2. 进行转发
负载均衡算法
- 轮询
轮询算法把每个请求轮流发送到每个服务器上 - 加权轮询
根据服务器的性能差异,为服务器赋予一定的权值,性能高的服务器能分配到更高的权值; - 最少连接
将请求发送给当前最少连接数的服务器上,由于每个请求的连接时间不一样,使用轮询或者加权轮询算法的话,可能会让一台服务器当前连接数过大,而另一台服务器的连接过小,造成负载不均衡 - 加权最少连接
在最少连接的基础上,根据服务器的性能为每台服务器分配权重,再根据权重重新计算出每台服务器能处理的连接数 - 随机算法
根据请求随机发送到服务器上
转发实现
1. HTTP重定向
2. DNS域名解析
3. 反向代理服务器
反向代理服务器位于源服务器前面,用户的请求需要经过反向代理服务器才能到达原服务器。反向代理可有用来进行缓存、日志记录等,同时也可以用来做负载均衡服务器,
在这种负载均衡转发方式下,客户端不直接请求源服务器,用词原服务器不需要外部IP地址,而反向代理需要配置内部和外部两套IP地址。
优点:与其他功能集成在一起,配置简单
缺点:所有请求和响应都需要经过反向代理服务器,他可能成为性能的瓶颈
4. 网络层
5. 链路层
二、集群下的session管理
一个用户的session信息如果存储在一个服务器上,那么负载均衡器把用户的下一个请求转发到另一个服务器,由于服务器没有用户的session信息,那么该用户就需要重新进行登录等操作;
一般都用的是Session Server
使用一个单独的服务器存储session数据,可以使用传统的mysql,也可以使用redis或者memcached这种内存性数据库
优点
· 为了使得大型网站具有伸缩性,集群中的应用服务器通常需要保持无状态,那么应用服务器不能存储用户的回话信息单独进行村塾,从而保证了应用服务器的无状态;