侧边栏壁纸
博主头像
qingtian博主等级

喜欢是一件细水流长的事,是永不疲惫的双向奔赴~!

  • 累计撰写 104 篇文章
  • 累计创建 48 个标签
  • 累计收到 1 条评论

从单体架构到集群架构1

qingtian
2021-10-24 / 0 评论 / 0 点赞 / 1,178 阅读 / 7,932 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-10-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

从单体架构到集群架构1

单体架构

单体架构的优点

  • 小团队成型即可完成开发-测试-上线
  • 迭代周期短,速度快
  • 打包方便,运维省事

单体架构面临的挑战

  • 单节点宕机造成所有服务不可用
  • 耦合度太高(迭代,测试,部署)
  • 单节点并发能力有限

集群架构

集群概念

  • 计算机“群体”构成整个系统
  • 集群提高并发和可用性

使用集群的优势

  • 提高系统的性能
  • 提高系统的可用性
  • 可扩展性高

使用集群的注意点

  • 用户会话————分布式会话
  • 定时任务————统一的单独做一个定时任务的服务,可以所有的定时任务放在一个节点上部署或者使用延时队列
  • 保证内网互通

Nginx

  • 主要功能是反向代理
  • 通过配置文件可以实现集群和负载均衡
  • 静态资源的虚拟化

什么是正向代理

  • 客户端请求目标服务器之间的一个代理服务器
  • 请求会先经过代理服务器,然后再转发请求到目标服务器,获得内容后最后响应给客户端

什么是反向代理

  • 用户请求目标服务器,由代理服务器决定访问哪个ip

反向代理之路由

安装nginx

  1. 去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本

  2. 上传nginx到linux系统

  3. 安装依赖环境

    (1)安装gcc环境

    yum install gcc-c++
    

    (2)安装PCRE库,用于解析正则表达式

    yum install -y pcre pcre-devel
    

    (3)zlib压缩和解压缩依赖,

    yum install -y zlib zlib-devel
    

    (4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https

    yum install -y openssl openssl-devel 
    
  4. 解压,需要注意,解压后得到的是源码,源码需要编译后才能安装

    tar -zxvf nginx-1.16.1.tar.gz
    
  5. 编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错

    mkdir /var/temp/nginx -p 
    
  6. 在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件

    ./configure 
    --prefix=/usr/local/nginx 
    --pid-path=/var/run/nginx/nginx.pid 
    --lock-path=/var/lock/nginx.lock 
    --error-log-path=/var/log/nginx/error.log 
    --http-log-path=/var/log/nginx/access.log 
    --with-http_ssl_module 
    --with-http_stub_status_module 
    --with-http_gzip_static_module 
    --http-client-body-temp-path=/var/temp/nginx/client 
    --http-proxy-temp-path=/var/temp/nginx/proxy 
    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi 
    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi 
    --http-scgi-temp-path=/var/temp/nginx/scgi
    
    命令解释
    –prefix指定nginx安装目录
    –pid-path指向nginx的pid
    –lock-path锁定安装文件,防止被恶意篡改或误操作
    –error-log错误日志
    –http-log-pathhttp日志
    –with-http_gzip_static_module启用gzip模块,在线实时压缩输出数据流
    –http-client-body-temp-path设定客户端请求的临时目录
    –http-proxy-temp-path设定http代理临时目录
    –http-fastcgi-temp-path设定fastcgi临时目录
    –http-uwsgi-temp-path设定uwsgi临时目录
    –http-scgi-temp-path设定scgi临时目录
  7. make编译

    make
    
  8. 安装

    make install
    
  9. 进入sbin目录启动nginx

    ./nginx
    
    • 停止:./nginx -s stop
    • 重新加载:./nginx -s reload

Nginx的进程模型

  • master进程:主进程

  • worker进程:工作进程

    信号:

    ./nginx -s stop
    ./nginx -s quit
    ./nginx -s reload
    ./nginx -t
    

    信号是由master交给相应的worker来执行的

Nginx处理Web请求机制解析

Worker抢占机制

image-20211019231903713

  1. master进程fork出多个worker进程
  2. 多个worker抢占互斥锁accept_mutex
  3. 抢占到的开始处理请求

传统服务器事件处理

  1. Master主进程监听80端口
  2. 默认开启一个worker进程
  3. 一个client请求到达一个worker,若此时worker1未及时响应,此进程处于阻塞状态
  4. master会fork出其他进程来处理相应的请求

image-20211019232747783

Nginx事件处理

image-20211019233218850

nginx.conf的配置结构

image-20211019233625301

nginx,conf核心配置文件详解

image-20211019235536453

image-20211022082422671

nginx.pid打开失败以及失效问题

image-20211022082452736

image-20211022225957397

image-20211022230155465

Nginx常用命令解析

./nginx -s quit 关闭,直到最后一个连接结束最后关闭nginx
./nignx -t  检测nginx配置文件更改后对不对
./nginx -v  查看nginx的版本号
./nginx -?/-h 查看nginx的命令帮助
./nginx -c filename  设置nginx的核心配置文件

nginx的日志切割(手动)

现有的日志都会存在 access.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把

文件切割为多份不同的小文件作为日志,切割规则可以以 天 为单位,如果每天有几百G或者几个T的日志的话,则可以按需以 每半天 或者 每小时 对日志切割

具体步骤

  1. 创建一个shell可执行文件: cut_my_log.sh ,内容为:

    #!/bin/bash 
    
    LOG_PATH="/var/log/nginx/" 
    
    RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M) 
    
    PID=/var/run/nginx/nginx.pid 
    
    mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log 
    
    mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log 
    
    #向Nginx主进程发送信号,用于重新打开日志文件 
    
    kill -USR1 `cat $PID` 
    
  2. cut_my_log.sh添加权限

    chmod +x cut_my_log.sh
    
  3. 测试日志切割后的结果:

    ./cut_my_log.sh
    

    image-20211023094051184

可以看见日志已经切割完成了,新的日志会在相应时间的日志中继续写。

Nginx的日志切割(自动)

  1. 安装定时任务插件

    yum install crontabs
    
  2. 使用crontab -e编辑并添加定时任务

    */1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
    
  3. 重启定时任务

    service crond restart
    
    • 常用定时任务命令:

      service crond start //启动服务 
      service crond stop //关闭服务 
      service crond restart //重启服务 
      service crond reload //重新载入配置 
      crontab -e // 编辑任务 
      crontab -l // 查看任务列表
      

image-20211023095644831

使用Nginx搭建静态资源服务器

server {
        listen  90;
        server_name   localhost;

        location / {
                root   /home/foodie-shop;
                index  index.html;
        }
        
        location /imooc {
        		#静态图片的路径:/home/imooc
                root /home;
        }

        location /static {
        		#alias可以使用别名,访问/static此时对用户而言真正的路径是透明的
                alias /home/imooc;
        }


}

使用Gzip压缩提升请求效率

image-20211023153529136

location的匹配规则解析

空格 :默认匹配,普通匹配

location / { 

	root /home; 

}

= :精确匹配

location = /imooc/img/face1.png { 

	root /home; 

}

~* :匹配正则表达式,不区分大小写

#符合图片的显示 
#*代表不区分大小写,
location ~* \.(GIF|jpg|png|jpeg) { 

	root /home; 

}

~ :匹配正则表达式,区分大小写

#GIF必须大写才能匹配到 

location ~ \.(GIF|jpg|png|jpeg) { 

	root /home; 

}

^~ :以某个字符路径开头

#^~匹配到以某个字符路径开头的请求
location ^~ /imooc/img { 

	root /home; 

}

Nginx中解决跨域问题

在配置文件中添加:

#允许跨域请求的域,*代表所有 
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求 
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE 
add_header 'Access-Control-Allow-Methods' *; 
#允许请求的header 
add_header 'Access-Control-Allow-Headers' *;

Nginx中配置静态资源防盗链

#对源站点验证 
valid_referers *.自己的一级域名.com; 
#非法引入会进入下方判断 
if ($invalid_referer) { 
	return 404; 
	}

Nginx的模块化体系

image-20211024103624265

0

评论区