五、Nginx负载均衡【重点
】
image.pngNginx为我们默认提供了三种负载均衡的策略:
轮询:将客户端发起的请求,平均的分配给每一台服务器。
权重:会将客户端的请求,根据服务器的权重值不同,分配不同的数量。
ip_hash:基于当前发起请求的客户端的ip地址,如果ip地址不变,始终会将请求发送到当前的服务器上。
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 |
网友评论