基于云落地SLB+Tengine实现高可用集群负载均衡 - 中( 二 )

server可以配置1个或者多个,代表用户请求进来被反向代理到这个某个tomcat节点,
upstream www.abc.com {server 192.168.1.171:8080;server 192.168.1.172:8080;server 192.168.1.173:8080;}用户请求通过访问www.123.com,反向代理到upstream所对应的3个tomcat节点,这个就是3台tomcat组成的集群,如果说1个tomcat能够支持的并发为150,那么3台就差不多是450上下 。
server {listen80;server_namewww.123.com;location / {# 把请求代理到upstream对应的tomcat集群中proxy_passhttp://www.abc.com;}}负载均衡 - 轮询配置集群的时候其实默认就有负载均衡,默认的是轮询 。负载均衡算法有如下几种:

  • 轮训,如下所示,这是默认的三节点集群使用了默认的轮询负载均衡算法 。轮询就是用户请求进来会一个一个的分别分配到这三个节点去处理 。
举两个例子:
  1. 就好比胖头陀和瘦头陀去食堂打饭,有30个馒头,不论你胖瘦高矮,食堂阿姨一人分15个馒头 。
  2. 再举个栗子,就好比皇宫佳丽三千,你应该要干嘛?雨露均沾吧,7个不同的妃子,每天一个轮训着平均分配资源,对吧 。
upstream www.abc.com {server 192.168.1.171:8080;server 192.168.1.172:8080;server 192.168.1.173:8080;}负载均衡 - 权重weight按照一定的比率去分配流量的访问,权重越大,被访问到的几率也就越大 。一般来说服务器的硬件配置整体性能层次不齐,有的好有的不好,所以,相对来说性能不好的权重分配少一些,性能好的服务器权重分配高一些,这样不同节点承载的压力也就不同了 。
举两个例子:
  1. 就好比胖头陀和瘦头陀去食堂打饭,有30个馒头,阿姨看胖头陀很胖,分配20个馒头,瘦头陀很瘦,吃的少,分配10个馒头 。
  2. 再举个栗子,就好比皇宫佳丽三千,你应该要干嘛?每个人有不同的喜好,甄嬛长得漂亮一些,自然权重也会高一些,咖妃长得太黑了,自然权重少一些 。
具体配置如下:
upstream www.abc.com {server 192.168.1.171:8080 weight=1;server 192.168.1.172:8080 weight=3;server 192.168.1.173:8080 weight=2;}负载均衡 - ip_hash(不演示了)根据用户请求过来的ip做哈希,ip一定是固定的,所以哈希的值也是固定的,这样用户请求到的tomcat节点也是固定的,这种方式可以保证用户会话不会丢失,永远存在,但是如果用户切换网络,比如从wifi到4g,则会导致会话丢失 。
举个例子,我人在上海,拨打110,由于我所在的地域是上海,那么对方接通的肯定是上海公安局,如果我现在去了南京,这个时候拨打110,那么运营商根据我所在地分配的接听电话就是江苏公安局了 。对吧,这是一个道理,就是根据你的地址来源进行服务节点的分配处理 。
配置代码示例:
upstream www.abc.com {ip_hash;server 192.168.1.171:8080 weight=1 max_conns=180;server 192.168.1.172:8080 weight=3;server 192.168.1.173:8080 weight=2;}负载均衡 - url_hash(不演示了)【基于云落地SLB+Tengine实现高可用集群负载均衡 - 中】和iphash同理,用户请求,在浏览器中访问的url,根据这个做hash,分配到不同的节点 。
小节常用的负载均衡算法为 加权轮询,iphash是用的最少甚至不用,因为会造成请求并发量倾斜,容易导致固定的某个节点宕机 。
提一下动静分离,架构师课程中,把静态代码发布到nginx,实现动静分离 。当然也可以静态代码(JS/css/HTML)放到CDN会更好 。
加餐:什么是动静分离提到动静分离就会想到前后端分离,各种分,分分合合的 。