1.集群概述
單體部署:
可以將上面內容分別部署在不同的服務器上。
單體架構的優點:
小團隊成型就可完成開發,測試,上線
迭代周期短,速度快
打包方便,運維簡單
單體架構的挑戰:單節點宕機造成所有服務的不可用(多節點);耦合度太高(迭代,測試,部署)(分布式部署);單節點并發能力有限(負載均衡)
集群:計算機”整體”構成整個系統;這個“群體”構成一個整體,不能獨立存在;群體提升并發與可用性
集群的優勢:提高系統性能;提高系統可用性;可擴展性高;
使用集群的注意點:
用戶會話:會話要使用分布式會話,通過Redis緩存實現分布式會話。
定時任務:所有的計算機節點,上面所有的任務,在某個時刻,都會跑一遍;任務都是一模一樣,會浪費計算機的資源。可以統一做定時任務的服務;或者使用mq的延時任務。
內網互通:必須保障。
2.什么是Nginx?常用的web服務器有哪些?
Nginx:高性能的http和反向代理web服務器,同時也提供IMAP/POP3/SMTP服務;主要功能是反向代理;通過配置文件實現負載均衡或者集群;靜態資源的虛擬化
常見的服務器:
3.什么是反向代理?
正向代理:客戶端請求目標服務器之間的一個代理服務器;
請求會先經過代理服務器,然后再轉發請求到目標服務器,獲得內容后最后響應給客戶端。
反向代理:
用戶請求目標服務器,由代理服務器決定訪問哪個ip
教務處相當于方向代理。
正向代理和反向代理的區別:
位置不同
正向代理,架設在客戶機和目標主機之間;
反向代理,架設在服務器端;
代理對象不同
正向代理,代理客戶端,服務端不知道實際發起請求的客戶端;
反向代理,代理服務端,客戶端不知道實際提供服務的服務端;
用途不同
正向代理,為在防火墻內的局域網客戶端提供訪問Internet的途徑;
反向代理,將防火墻后面的服務器提供給Internet訪問;
安全性不同
正向代理允許客戶端通過它訪問任意網站并且隱藏客戶端自身,因此必須采取安全措施以確保僅為授權的客戶端提供服務;
反向代理都對外都是透明的,訪問者并不知道自己訪問的是哪一個代理。
備注:正向代理–HTTP代理為多個人提供翻墻服務;反向代理–百度外賣為多個商戶提供平臺給某個用戶提供外賣服務。
4.Nginx安裝與運行
(1)去官網http://nginx.org/下載對應的nginx包,推薦使用穩定版本
(2)上傳nginx到linux系統
(3)安裝依賴環境
安裝gcc環境;
yum install gcc-c++
安裝PCRE庫,用于解析正則表達式;
yum install -y pcre pcre-devel
zlib壓縮和解壓縮依賴;
yum install -y zlib zlib-devel
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 \n --prefix=/usr/local/nginx \n --pid-path=/var/run/nginx/nginx.pid \n --lock-path=/var/lock/nginx.lock \n --error-log-path=/var/log/nginx/error.log \n --http-log-path=/var/log/nginx/access.log \n --with-http_gzip_static_module \n --http-client-body-temp-path=/var/temp/nginx/client \n --http-proxy-temp-path=/var/temp/nginx/proxy \n --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \n --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \n --http-scgi-temp-path=/var/temp/nginx/scgi
配置命令:
(7)make編譯
make
(8)安裝
make install
(9)進入sbin目錄啟動nginx
./nginx
停止:./nginx -s stop
重新加載:./nginx -s reload
(10)打開瀏覽器,訪問虛擬機所處內網ip即可打開nginx默認頁面,顯示如下便表示安裝成功:
注意事項:
如果在云服務器安裝,需要開啟默認的nginx端口:80
如果在虛擬機安裝,需要關閉防火墻
本地win或mac需要關閉防火墻
5.Nginx顯示默認首頁過程解析
內網環境:使用內網ip
云服務器:使用外網ip
請求nginx默認頁面:
Nginx主要配置:
server {listen 80;server_name localhost;location / {root html;index index.html index.htm; }error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
6.Nginx進程模型解析
ps -ef|grep nginx 查詢nginx相關進程。
root 2856 32390 0 10:12 pts/1 00:00:00 grep --color=auto nginx
root 21121 1 0 08:29 ? 00:00:00 nginx: master process ./nginx
nobody 21122 21121 0 08:29 ? 00:00:00 nginx: worker process
Master進程:主進程。Master接收外界的一些信號,傳遞給對應的worker進程;監控worker
worker進程:工作進程,為master服務
master接收一些信號,然后傳遞給相應的worker進程;master還可以對發送的指令可以讀取并驗證核心配置文件的有效性:
具體實例:
[root@VM-0-9-centos conf]# …/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Worker進程數量是可以配置的。
配置worker進程的過程:
nginx進程模型:
每個進程相互獨立,多線程的話,雖然多線程的開銷要小于進程,但是它們會公用一個內存,
線程之間是相互會有影響的,需要開發人員自己去維護內存管理。并且會增加一定的風險,導致我們出錯。
多進程,相互之間是獨立的,安全的。如果說一個worker異常退出了,其他的worker會正常運行。
7.Nginx處理web請求機制解析
Nginx本身是性能非常高,非常好的服務器。可以處理的并發數可以達到幾十萬或者幾百萬。
Worker搶占機制:use epoll.Linux epoll機制。
Master fork出多個worker進程(fork是底層機制。)
Accept_mutex:互斥鎖,多個worker競爭,搶到了才能去處理cilent.
傳統服務器事件處理:類似于BIO:
以上是同步阻塞。
Nginx事件處理:本身是異步非阻塞模型,一般有默認的并發數(1024).可以進行配置,根據你的硬件來配置
events {
#默認使用epoll
use epoll;
#每個worker允許連接的客戶端最大連接數
worker_connections 1024;
}
使用epoll可以處理6-8萬個請求,當worker獲得cilent的請求后,對請求處理到阻塞的部分,worker就不會繼續等待阻塞的請求,而是處理一些其他客戶端的請求。這樣worker就可以同時處理多個cilent請求,從而實現了高并發。
Nginx的性能為什么這么高?
1.worker的搶占機制。
2.異步非阻塞的通信模式,多路復用器。
8.nginx.conf配置結構與語法指令
配置里有指令和指令塊。
指令:
#user nobody;
worker_processes 2;
指令塊:
events {
#默認使用epoll
use epoll;
#每個worker允許連接的客戶端最大連接數
worker_connections 1024;
}
9.同步與異步,阻塞與非阻塞
同步:關鍵字:輪詢;異步:通知;
阻塞:關鍵字:一直等待;非阻塞:關鍵字:不用等
還可以根據客戶端和服務器端分開處理。
同步時客戶端就會阻塞。阻塞時,服務器端就會阻塞。
從客戶端和服務器端的角度來理解,異步:服務器端會通知你后臺正在處理,客戶端可以處理其他請求。
對于阻塞以及非阻塞的理解,關鍵點在于,非阻塞時,服務器端可以繼續處理請求,極大的節省系統資源。經濟效益高
10.Nginx.conf核心配置文件
設置worker進程的用戶,指的linux中的用戶,會涉及到nginx操作目錄或文件的一些權限,默認為nobody
user root;//涉及到操作系統用戶的權限問題,nobody跟root用戶操作文件的權限完全不同。
user root;
worker進程工作數設置,一般來說CPU有幾個,就設置幾個,或者設置為N-1也行
worker_processes 1;
nginx 日志級別debug | info | notice | warn | error | crit | alert | emerg,錯誤級別從左到右越來越大
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
通過不同的日志級別,輸出不同的日志內容
此處配置的日志文件在:
–error-log-path=/var/log/nginx/error.log
設置nginx進程 pid
配置內容:
–pid-path=/var/run/nginx/nginx.pid
pid logs/nginx.pid;
設置工作模式
events {# 默認使用epolluse epoll;# 每個worker允許連接的客戶端最大連接數worker_connections 10240;
}
http 是指令塊,針對http網絡傳輸的一些指令配置
http {
}
include 引入外部配置,提高可讀性,避免單個配置文件過大
include mime.types;
設定日志格式,main為定義的格式名稱,如此 access_log 就可以直接使用這個變量了
–http-log-path=/var/log/nginx/access.log
sendfile使用高效文件傳輸,提升傳輸性能。啟用后才能使用tcp_nopush,是指當數據表累積一定大小后才發送,提高了效率。
sendfile on;
tcp_nopush on;
keepalive_timeout設置客戶端與服務端請求的超時時間,保證客戶端多次請求的時候不會重復建立新的連接,節約資源損耗。
#keepalive_timeout 0;
keepalive_timeout 65;
gzip啟用壓縮,html/js/css壓縮后傳輸會更快
gzip on;
server可以在http指令塊中設置多個虛擬主機
listen 監聽端口
server_name localhost、ip、域名
location 請求路由映射,匹配攔截
root 請求位置
index 首頁設置
server {listen 88;server_name localhost;location / {root html;index index.html index.htm;}}
11.nginx常用命令解析
Nginx常用命令:
./nginx -t:查看配置文件是否正確
./nginx -s reload:重啟nginx
./nginx 啟動
./nginx -s stop 關閉
./nginx -s reload 重啟
可以將配置的多臺server 保存在xxx.conf文件中,然后通過include引入。
暴力關閉nginx:./nginx -s stop 強制關閉。
友好關閉:./nginx -s quit:會維持當前用戶連接直到用戶不再發送請求關閉連接。針對一些http請求。
檢驗:./nginx -t :配置文件發生更改,檢查配置文件是否有問題
查看相關版本號 ./nginx -v 展示具體的信息:./nginx -V 提供命令的幫助: ./nginx -h或者./nginx -? 指定特定的配置文件 ./nginx -c
12.nginx日志切割-手動
去特定目錄下查看日志文件:
命令: cd /var/log/nginx
然后根據以前的配置查詢所有相關的文件
命令:/usr/local/nginx/sbin/nginx -V
查詢的是之前安裝nginx所有相關的配置。
首先創建對應的文件: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`
新建文件添加權限。
chmod +x cut_my_log.sh
成功后,文件變成綠色。
測試日志切割后的結果:
./cut_my_log.sh
測試:
根據時間戳生成的log文件,每執行一次進行一次切割。
nginx日志切割-定時任務
安裝定時任務:
yum install crontabs
crontab -e 編輯并且添加一行新的任務:
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
重啟定時任務:
service crond restart
crontab -l:查詢定時任務內容
常用定時任務命令:
service crond start //啟動服務
service crond stop //關閉服務
service crond restart //重啟服務
service crond reload //重新載入配置
crontab -e // 編輯任務
crontab -l // 查看任務列表
Systemctl stop crond.service:關閉定時任務
Systemctl status crond.service :查看定時任務的狀態