热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nginx集群服务器必须在同一网段_基于云落地SLB+Tengine实现高可用集群负载均衡中...

本次分享基于618慕课网直播,更多精彩可以关注:https:class.imooc.comsalejavaarchitect虚拟主机如果不用nginx&
74cf2489f5ef1f3b58774a6c4c38e91d.png

本次分享基于618慕课网直播,更多精彩可以关注:https://class.imooc.com/sale/javaarchitect
虚拟主机
如果不用nginx,仅仅只是tomcat,要想在同一个80端口下去开多个http服务是不行的,只能开一个,但是使用nginx后,可以开多个,并且可以针对不同的域名去进行访问和配置,这就是虚拟主机的功能。而配置中的server就是一个虚拟主机。

65688b787dbd73294089239412cca161.png


如上图,用户如果需要配置3个域名的网站,那么就得购买3台服务器。而如果使用了nginx的虚拟主机功能,那么就只需要购买一台服务器,随后通过nginx的虚拟主机功能开启3个server即可,这么一来可以节约成本,不会造成资源浪费,可以参考下图。

15013d8699e7e43887a93e65e8fc9c33.png


以下是虚拟主机的配置,包含了反向代理:

  • 修改几个html,如下:
    /usr/local/tengine/html中的index.html复制多份进行修改,用以区别各个页面
4884b92841f89f736d775fd0a290b6a7.png
  • 云服务器预先配置好二级域名,如下:
a4922e71a81d8409190754c3ffe3e83a.png
  • 配置虚拟主机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/
4b4f8bfef933060190caea0d538621e6.png
c389754304068dfecaee3ff40c110a53.png
40638074a8bcf4a350374aef042ad069.png

反向代理
虚拟主机、集群负载均衡基于反向代理,所以得理解反向代理。反向代理就是用户的请求会被代理服务器(nginx/tengine)进行转发,由代理服务器来决定用户的请求访问会到达哪个内网计算机节点,那么这种代理称之为反向代理。

42dfe302509979a24c4d56a63c20a357.png


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

05a7a2bc833398caf45b3ff200d88887.png


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

0aa6b6b89f5f0f85216cfff27d7f8ea9.png


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

  • 轮训,如下所示,这是默认的三节点集群使用了默认的轮询负载均衡算法。轮询就是用户请求进来会一个一个的分别分配到这三个节点去处理。

举两个例子:

  1. 就好比胖头陀和瘦头陀去食堂打饭,有30个馒头,不论你胖瘦高矮,食堂阿姨一人分15个馒头。
  2. 再举个栗子,就好比皇宫佳丽三千,你应该要干嘛?雨露均沾吧,7个不同的妃子,每天一个轮训着平均分配资源,对吧。

upstream http://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. 再举个栗子,就好比皇宫佳丽三千,你应该要干嘛?每个人有不同的喜好,甄嬛长得漂亮一些,自然权重也会高一些,咖妃长得太黑了,自然权重少一些。
5ddc0b5a3689914c8d70b6f548aeafe6.png

具体配置如下:
upstream http://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,那么运营商根据我所在地分配的接听电话就是江苏公安局了。对吧,这是一个道理,就是根据你的地址来源进行服务节点的分配处理。

d71e341dfc7b5deece3d23ab01da202d.png


配置代码示例:
upstream http://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(不演示了)
和iphash同理,用户请求,在浏览器中访问的url,根据这个做hash,分配到不同的节点。
小节
常用的负载均衡算法为 加权轮询,iphash是用的最少甚至不用,因为会造成请求并发量倾斜,容易导致固定的某个节点宕机。
提一下动静分离,架构师课程中,把静态代码发布到nginx,实现动静分离。当然也可以静态代码(JS/CSS/HTML)放到CDN会更好。
加餐:什么是动静分离
提到动静分离就会想到前后端分离,各种分,分分合合的。

  • 前后端分离就是前后端开发人员所做的本质工作拆开,以前写jsp的时候,前端后端都是由同一个程序员去做的,随着互联网的发展,工作职能开始拆分,那么前端工作量比如js/css/html这些都会由前端去做,称之为frontEnd,后端人员负责java代码开发,接口提供,称之为backEnd。这就是前后端分离。
  • 既然前后端分离了,那么代码肯定是解耦的,是两块不一样的代码,前端归前端,后端归后端。那么这个时候我们就可以借助nginx去实现动静分离部署,其实也就是前端通过nginx静态资源映射,后端通过nginx实现tomcat集群部署,如此一来,用户请求进来到达nginx,那么前端请求访问静态页面,后端接口调用会通过nginx来代理到各自的tomcat节点。那么在架构师体系功课程中,我们就是采用的前后端分离开发外加动静分离进行部署的。具体的结构图如下:
3709970566bd32f4977fd971f4b3d08d.png


附:如果nginx有2台,那么一台负责虚拟静态资源,另外一台负责反向代理也可以。本质上就是使用了2个location来做了2个虚拟主机,一个做静态资源,一个做tomcat反向代理,动静分离可以把动静请求分离,减少tomcat请求压力。ok吧。

844a4eeeaaec57c68b7506bdf0a7a028.png
af5d131c4a21c2ca67f93145a2bb5fea.png



推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
author-avatar
手机用户2602914627
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有