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

前言

本次分享基于618慕课网直播,更多精彩可以关注:https://class.imooc.com/sale/javaarchitect

618双11这样的活动肯定会有大促,有大促就会有大流量,那么必然的我们必须要保证两个点,一个是高可用,一个是高并发。

  1. 什么是高并发:平时一个网站的流量每天在几千左右,但是在某一天有活动或者某一时间段涌入大量用户,在网站上活动,那么就会发起大量的请求到后端,可能有数十万个甚至百万个,这样会比平时多出很多用户请求,那么势必对服务器后端又一定的压力,这个就是并发,为了做好高并发,系统架构肯定需要做一定的调整。
  2. 什么是高可用:传统部署的一个系统往往只有一台服务器节点,节点挂了,啥都没了,高可用就是为了保证网络节点宕机后,整个网站系统还能够继续的对外提供服务。最简单的手段就是搭建多机高可用集群。
    那么本次课程其实围绕的是高可用来展开的。

那么这次涉及到的一些资料,软件等可以到直播群里去获取,汇总后会统一发出来的。

Nginx 和 Tengine

那么说到集群高可用的话肯定会联想到Nginx,通过nginx就能搭建多机节点的集群,比如tomcat集群,nginx作为网关接受用户的请求,起到反向代理的作用。

Nginx是反向代理服务器,可以构建集群和负载均衡,我们公开课里会使用阿里的Tengine,Tengine是基于Nginx的增强版本,阿里在此基础上的二次开发并且开源的服务器。(可以理解为nginx相当于iPhone12,tengine相当于iPhone12plus)。那么学了Tengine就相当于nginx也会了,一石二鸟。

  • 那么咱们先梳理一下概念,看个眼熟,抛出概念,具体后面细说,课程里主要涉及到一下四点:
    • 什么是正向代理:后面会画图演示来说
    • 什么是反向代理:后面会画图演示来说
    • 什么是集群:后面说
    • 什么是负载均衡:后面说

Nginx并发能力很强,可以支持上万并发(理论5万左右),并且所需要的硬件配置不会很高,对cpu,内存的依赖度不大,而且长期运行十分稳定可靠。

Nginx是异步非阻塞的(AIO),上万连接可以对应到一个进程。(在咱们架构师课程里我们提过apache这个httpd服务器,它是同步阻塞的(BIO),一个连接就对应一个线程,并发越高性能越低下)所以现在主流的服务器都用的nginx或者tengine。

Nginx 能够解决的问题

  • 高可用
  • 集群
  • 负载均衡
  • 虚拟主机
  • 并发能力(高并发):构建多简单集群,提升并发能力,抗负载能力
  • 动静分离(静态资源)(架构师体系课程中就是这么部署的)后面有时间加餐可以画图说一下
  • ……
    需要注意:搭建集群可以解决高可用问题,同时也能分担一定的流量压力,当然高并发并不是仅仅只靠集群就能解决的,这里指的仅仅只是一部分压力。

互动发问

欸?那nginx和tengine是7层还是4层的网络模型呀?
那LVS呢?
俗话说四层转发,七层代理。LVS4层只管向后抛,他不会处理你的请求,7层可以处理,他提供了http协议,根据根据url地址来找到你硬盘里的某个资源文件地址,或匹配请求到反向代理的upstream,他也可以操作header啊cookie啥的。后面要说的负载均衡器组件SLB也是四层负载。

如何理解四层和七层,参考下图:
-w741

-w947

入正题,Tengine 官网

上面的概念没听懂没关系,我们先把Tengine来安装一下,概念在后面循序渐进的去理解。
打开:http://tengine.taobao.org/
下载最新版的即可
-w1364

虚拟机或云服务器安装

用腾讯云的的666miss服务器

  • 上传到某一个目录
    -w1148

  • 解压缩:

    tar zxvf tengine-2.3.2.tar.gz
    

    -w1141

  • 进入tengine根目录,结构和nginx类似,安装方式也是类似
    -w912

  • 安装依赖环境

    • 安装gcc环境
      • yum install gcc-c++ -y
    • 安装PCRE库,用于解析正则表达式
      • yum install -y pcre pcre-devel
    • zlib压缩和解压缩依赖,
      • yum install -y zlib zlib-devel
    • SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
      • yum install -y openssl openssl-devel
  • 配置编译(可以参考nginx):

    ./configure --prefix=/usr/local/tengine
    
  • 安装:

make && make install
  • 安装成功,可以看到tengine的目录都有了,目录结构和nginx也都是一致的 -w790

启动tengine

启动方式与nginx一致
-w865

浏览器访问tengine所在的内网ip:
-w640

虽然是tengine,但是本质上他还是nginx的进程:
-w1179

  • 停止:
    • ./nginx -s stop
  • 重启:
    • ./nginx -s reload

Tengine 配置文件详解(可以作为加餐环节)

打开 /usr/local/tengine/conf/nginx.conf,配置内容如下:

# 默认注释了,其实就是nginx的默认用户,注释代表使用当前用户,也就是root,这里可以修改为指定的用户,用以限制。
#user  nobody;
#nginx 是多进程,一个进程里又可以开很多线程,线程用以处理用户连接,可以设置为CPU的核数为1,预留一
个,比如你现在是8核的,那就设置为7,当然你设置为8问题也不大,这个服务器里不要再放额外的一些中间件了(默认1个)
worker_processes  2;

# 每个worker进程可以处理的最大连接数,连接数并不是越大越好,因为还受到环境因素,比如磁盘io或网络
io快不快,内存和cpu大不大等因素影响。
events {
    worker_connections  10240;
}
# 此外,操作系统限制一个进程能够打开的最大文件数,也限制了nginx的最大并发,可以通过如下查看:
# cat /proc/sys/fs/file-max
# 一般9万左右,worker_processes x worker_connections < file-max,这个可以自己调大
# 如果反向代理了几台tomcat,那么总的并发数是 worker_processes x worker_connections / 4,得出的值
是一个差不多的范围,4是一个预估的经验值(长期以往大家总结的)。
# 需要注意,真正的并发数并不是一个特定的值,是根据硬件资源以及环境资源的一个综合的值,和上面计算
得出的值也肯定会有一定的偏差

# HTTP 模块
http {
    # 在任何地方都能使用include进行配置的引入
    # 资源媒体类型,浏览器支持的资源媒体类型和我们设置的类型匹配,则会在浏览器播放视频/播放音乐/展示图片,不匹配则下载,阿里OSS的图片在chrome上只能下载不能展示,道理是一样的
    include       mime.types;
    # 如果文件类型在mime.type中找不到则默认使用下方的
    default_type  application/octet-stream;

    # 高效传输模式,发送文件数据更快,简单来说,nginx作为静态资源服务器,开启会提高nginx性能,如果把nginx作为反向代理服务器,那么没什么卵用
    # 文件数据传输存在于操作系统的内核里,不需要经过缓冲区的拷贝,如此效率更高,性能更好,也可以称之为零拷贝
    sendfile        on;
    # 打开后可以优化网络传输,打开的前提是sendfile为on
    # tcp_nopush      on;

    # 设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 启用压缩,html/js/css压缩后文件变小,传输也会更快(我们在架构师课程里有演示过吧,不记得的敲个0)
    #gzip  on;

    # 可以在http指令块中设置多个虚拟主机
    server {

        # listen 监听端口
        # server_name localhost、ip、域名
        # location 请求路由映射,匹配拦截,默认用`/`可以对后面的路径进行匹配,匹配到就显示对应的资源文件。
        # location 参考文档:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#location
        # root 请求位置
        # index 首页设置

        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

    }
}
posted @ 2020-06-19 09:51  风间影月  阅读(511)  评论(0编辑  收藏  举报