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

 
虚拟主机如果不用Nginx,仅仅只是Tomcat,要想在同一个80端口下去开多个http服务是不行的,只能开一个,但是使用nginx后,可以开多个,并且可以针对不同的域名去进行访问和配置,这就是虚拟主机的功能 。而配置中的server就是一个虚拟主机 。

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

文章插图
 
如上图,用户如果需要配置3个域名的网站,那么就得购买3台服务器 。而如果使用了nginx的虚拟主机功能,那么就只需要购买一台服务器,随后通过nginx的虚拟主机功能开启3个server即可,这么一来可以节约成本,不会造成资源浪费,可以参考下图 。
基于云落地SLB+Tengine实现高可用集群负载均衡 - 中

文章插图
 
以下是虚拟主机的配置,包含了反向代理:
  • 修改几个html,如下: /usr/local/tengine/html中的index.html复制多份进行修改,用以区别各个页面
  • 云服务器预先配置好二级域名,如下:
  • 配置虚拟主机server server { listen 80;
    server_name imooc.imoocdsp.com;
    location / {
    root html;
    index imooc.html;
    }
    }
    server {
    listen 80;
    server_name course.imoocdsp.com;
    location / {
    root html;
    index course.html;
    }
    }
    server {
    listen 80;
    server_name teacher.imoocdsp.com;
    location / {
    root html;
    index teacher.html;
    }
    }
  • 浏览器访问如下三个域名得到的结果不同: http://imooc.imoocdsp.com/ http://course.imoocdsp.com/ http://teacher.imoocdsp.com/
反向代理虚拟主机、集群负载均衡基于反向代理,所以得理解反向代理 。反向代理就是用户的请求会被代理服务器(nginx/tengine)进行转发,由代理服务器来决定用户的请求访问会到达哪个内网计算机节点,那么这种代理称之为反向代理 。
基于云落地SLB+Tengine实现高可用集群负载均衡 - 中

文章插图
 
如上图,用户请求会先到达nginx,然后再由nginx决定这个请求最终转发到某些内网的计算机节点,转发过程透明,用户不知道,并且内网的节点是无法直接被外部访问的,必须经过nginx 。我们可以举一个生活中的例子,比如开学去学校报到,学生分班不是由自己决定的,会由教务处来决定该学生去哪个班级报到,如下图,学生就是用户,报到上学这个过程就是发起的请求,反向代理服务器就是教务处,具体的某个班级就是内网计算机节点,教务处怎么分班的这个过程学生不知道,是透明的,学生分班必须经过教务处,无法直接去上课:
基于云落地SLB+Tengine实现高可用集群负载均衡 - 中

文章插图
 
常见的反向代理场景:负载均衡,虚拟主机等
题外话,什么是正向代理,用户请求经过公网到达目标服务器的过程,会经过正向代理,在家里我们用路由器,路由器之上就是宽带运营商,他们都给你做了一层限制,比如限制网速,限制端口等,他们的作用就是正向代理 。可以参考如下图:
基于云落地SLB+Tengine实现高可用集群负载均衡 - 中

文章插图
 
图中左侧,我通过路由器为自己和媳妇分别设置了上网速度,因为媳妇经常购物,给他做一些限制,这就是正向代理的基本作用了,我们请求经过自己路由器到达公网再到达右侧的目标服务器,这里的目标服务器就是反向代理服务器了 。举个生活中的例子,中考高考的时候我们填志愿,学生就是上网用户,填志愿最终经过教务处,教务处会给我们一定的参考意见,随后志愿分发到全国 。道理是一样的 。再举一个例子,比如有些公司,会禁止对外网的访问,如果你要访问外网,那么必须启动vpn或者代理服务器,你的所有请求会经过这个代理,你发了什么数据他也知道,可能会限制你访问网盘这类网站,这个就是正向代理 。
配置集群(用阿里云1个nginx+2个tomcat)
下面的都用到了线上的阿里云,已经购买5台 。其中3台搭建了tomcat,另外2台搭建tengine 。我们使用其中一台作为演示负载均衡的效果,最终结合阿里云的SLB负载均衡器来演示高可用 。
集群就是人多力量大,目的可以分担流量压力,提升整体系统的并发能力 。一人搬砖总没有多个人帮你一起搬砖来的舒服嘛 。
集群需要配置上游模块upstream,www.abc.com为上游模块的名称 。
阿里云的tengine-master配置:upstream www.abc.com {server 172.19.36.76:8099 weight=1;server 172.19.36.77:8099 weight=1;keepalive 32;}server {listen80;server_name101.133.214.131;location / {proxy_passhttp://www.abc.com;#roothtml;#indexindex.html index.htm;}}


推荐阅读