最近关注了一下分布式dubbo和springCloud,dubbo简单的做了一下总结,springCloud还没有进行系统的学习,等过段时间学习了之后再写一篇关于它的文章。
借用百度百科里面的介绍就是
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
简单的说一下就是dubbo的负载均衡是服务层面,nginx的负载均衡是在http请求层面。
nginx的简单实现
nginx下载安装
首先这里我使用的是docker进行操作,毕竟现在docker已经非常的流行,构建起来也是很简单的。
我这里用的是centos8搭建的docker,可以看一下我之前写的docker教程。
docker安装nginx
- 首先我们可以先看一下docker里面的nginx版本:
- 将nginx的镜像下载下来即可:
- 启动nginx:
由于docker启动nginx容器之后并不能直接启动nginx服务,所以还需要去/usr/sbin/启动nginx。
这样我们访问centos的地址就可以看到nginx已经启动了:
在这里我们可能会发现我们访问地址后没有显示这个页面,而是显示的无法连接,其实是因为我们没有开放centos的80端口,我们只需要关闭防火墙就可以了。
1. 查看防火墙状态
firewall-cmd --state
2. 停止firewall
systemctl stop firewalld.service
3. 禁止firewall开机启动
systemctl disable firewalld.service
nginx的简单应用
首先实现nginx应用的时候我们需要先下载两个tomcat,所以在docker里面我们应该先启动两个tomcat。
启动两个tomcat,端口分别是8080和8081
我们需要进入容器内启动tomcat
这样我们两个tomcat都启动完毕了
反向代理
反向代理隐藏了服务器
的信息!
我们想要实现的功能就是访问虚拟机的地址,然后通过nginx反向代理到8080的tomcat里面。
现在我们访问虚拟机的地址还是显示nginx的欢迎页面:
我们进入nginx容器的/etc/nginx文件夹里面修改nginx.conf:
-
先安装vim编辑器
apt-get update apt-get install vim
-
进行编辑:
server { listen 80; # 端口号 server_name 192.168.233.128; # 虚拟服务器的识别路径 location ~ /edu/ { root html; proxy_pass http://192.168.233.128:8080; # 代理的地址 index index.html index.html; } location ~ /vod/ { root html; proxy_pass http://192.168.233.128:8081; # 代理的地址 index index.html index.html; } }
-
启动ngins:
重启nginx service nginx restart 启动nginx ./nginx 停止nginx ./nginx -s stop
- 查看页面:
nginx负载均衡
- 首先需要将两个tomcat里面配置相同的文件:
我们需要在连个tomcat里面都建一个test文件夹,然后里面新建一个同名的html文件,这里我们还是叫a.html就可以了。
8080的tomcat服务器:
8081的tomcat服务器:
- 配置nginx.conf
首先我们需要先新建一个upstream模块:
然后我们需要在server里面配置相关信息,这里的proxy_pass需要使用我们上面的upstream模块:
启动或者重启nginx就可以了,这里我们使用的是默认的轮询:
1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2.weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream myserver {
server 192.168.233.128:8080 weight 5;
server 192.168.233.128:8081 weigth 10;
}
3. ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
upstream myserver {
ip_hash;
server 192.168.233.128:8080;
server 192.168.233.128:8081;
}
4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
upstream myserver {
server 192.168.233.128:8080;
server 192.168.233.128:8081;
fair;
}
测试(通过):
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。