首先,我们要搞清楚为什么要做负载均衡?
负载均衡是为了解决单点故障问题。
什么叫单点故障?
用户都请求到一台应用服务器,然后都通过同一个数据库服务器来处理,这个时候如果应用服务器宕机了,或者响应过慢,那么这个服务都无法正常使用了。
说到负债均衡,就肯定要说反向代理。
正向代理就是经过代理中转,对服务端隐藏客户端信息(通过VPN访问国外网站,国外网站只能拿到代理服务器的信息,拿不到真实发起请求用户端的信息);
反向代理就是对客户端隐藏服务端信息(因为部署了多台服务器,所以用户压根不知道自己这次请求被分发到了哪台服务器)
所有请求都经过ngnix反向代理服务器来处理,然后根据负载均衡策略分发到各个后台服务器上,这样有几个优点:
一、如果某台后台服务器挂了的话,nginx可以自动把流量分发给其他服务器,保证服务的稳定性;
二、可以隐藏后端服务器;
三、可以动态添加、去除后台服务器,同时制定对应的分发策略。
常见的分发策略有以下几种:
1.轮询分发:可以根据各台服务器的硬件配置,分发对应的权重,然后把代理服务器接收到的请求按照顺序分发给各个后端服务器,即使某个服务器死机了,也会按照顺序交给下一个服务器处理;
2.根据当前各台服务器处理的请求量分发:好处是可以保证每台服务器处理的请求量都是比较平均的,不会有哪台服务器有太大的请求压力;
3.根据ip计算hash值分发:好处是可以让同一个用户,多次访问的都是同一台服务器,能够维持session会话状态;
4.根据url计算hash值分发:好处是能让关于某一个固定url的请求交给同一个服务器处理;
但需要注意的是,根据ipHash和urlHash分发的策略都需要安装对应的算法包