五、Nginx負載均衡【重點
】
Nginx為我們默認提供了三種負載均衡的策略:
輪詢:將客戶端發起的請求,平均的分配給每一臺服務器。
權重:會將客戶端的請求,根據服務器的權重值不同,分配不同的數量。
ip_hash:基于當前發起請求的客戶端的ip地址,如果ip地址不變,始終會將請求發送到當前的服務器上。
image.png
5.1 輪詢
想實現Nginx輪詢負載均衡機制只需要在default.conf配置文件中添加以下內容
upstream 名字 {
server ip:port;
server ip:port;
...
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
例如:(注意:upstream的名字不要使用下劃線)
upstream my-server {
server 39.98.132.196:8080;
server 39.98.132.196:8081;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://my-server/;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd docker_mysql_tomcat docker_nginx docker_ssm yangl
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_ssm/
[root@iz8vbdmrir2n6xqzrbd93hz docker_ssm]# ls
docker-compose Dockerfile video-web.war
[root@iz8vbdmrir2n6xqzrbd93hz docker_ssm]# cd docker-compose/
[root@iz8vbdmrir2n6xqzrbd93hz docker-compose]# ls
docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker-compose]# docker-compose-Linux-x86_64 up -d
Starting video-ssm ... done
[root@iz8vbdmrir2n6xqzrbd93hz docker-compose]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_ssm]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_nginx/
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# ls
default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
5.2 權重
實現權重的方式
upstream 名字 {
server ip:port weight=權重比例;
server ip:port weight=權重比例;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
例如:
upstream my-server {
server 39.98.132.196:8080 weight=5;
server 39.98.132.196:8081 weight=1;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://my-server/;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
5.3 ip_hash
ip_hash實現,只需要添加一個 ip_hash 配置即可
upstream 名字 {
ip_hash; # 配置ip_hash
server ip:port;
server ip:port;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
六、Nginx動靜分離【重點
】
Nginx的并發能力公式:
worker_processes * worker_connections / 4 | 2 = Nginx最終的并發能力
動態資源需要/4,靜態資源需要/2.
Nginx通過動靜分離,來提升Nginx的并發能力,更快的給用戶響應。
6.1 動態資源代理
使用proxy_pass動態代理
# 配置如下
location / {
proxy_pass 路徑;
}
6.2 靜態資源代理
使用root靜態代理
# 配置如下
location / {
root 靜態資源路徑;
index 默認訪問路徑下的什么資源;
autoindex on; # 代表展示靜態資源全的全部內容,以列表的形式展開。
}
# 先修改docker,添加一個數據卷,映射到Nginx服務器的一個目錄
# 添加了index.html和1.jpg靜態資源
# 修改配置文件
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# vim docker-compose.yml
修改docker-compose.yml為如下內容:
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:latest
container_name: nginx
ports:
- 80:80
volumes:
- /opt/docker_nginx/conf.d/:/etc/nginx/conf.d
- /opt/docker_nginx/img/:/data/img
- /opt/docker_nginx/html/:/data/html
重啟再查看,目錄已經創建
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 down
Stopping nginx ... done
Removing nginx ... done
Removing network docker_nginx_default
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 up -d
Creating network "docker_nginx_default" with the default driver
Creating nginx ... done
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml html img
分別在 html 以及 img 目錄中拷貝對應的 html 頁面和圖片即可,然后修改 Nginx 的 default.conf 配置文件
upstream my-server {
server 39.98.132.196:8080 weight=5;
server 39.98.132.196:8081 weight=1;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
# 代理到html的靜態資源
location /html {
root /data; #由于location后面寫的是/html,所以root后的路徑就不用寫成/data/html,/html會默認放在/data后面
index student.html;
}
# 代理到img的靜態資源
location /img {
root /data;
autoindex on;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# ls
default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
瀏覽器分別訪問以下地址進行測試:
http://39.98.132.196/html/ (查看之前拷貝的student.html頁面) http://39.98.132.196/img/2.jpg (注:2.jpg是拷貝的圖片名稱) http://39.98.132.196/img/ (注:可以看到當前目錄下的所有文件)
七、Nginx集群
單點故障,避免nginx的宕機,導致整個程序的崩潰
準備多臺Nginx。
準備keepalived,監聽nginx的健康情況。
準備haproxy,提供一個虛擬的路徑,統一的去接收用戶得請求。
Nginx集群 |
---|
image.png
|