文章目录
- 一、实现负载均衡
- 1、在克隆一个tomca的服务器
- 2、修改主机的名称
- 3、为了呈现效果修改两个tomcat中index.html的静态文件
- 4、启动两个tomcat服务,检测两个服务是否可以正常访问
- 5、修改Nginx的配置文件,增加负载均衡配置
- 二、其他配置
- 1、增加权重配置,权重配置值越高有可能先被执行
- 2、检测配置和重新加载
- 3、如果某台主机不参与配置,则将配置修改为
- 4、如果某台主机只有在高负载量的时候才参与计算,则修改配置为
一、实现负载均衡
在上面的介绍中只实现了nginx的代理一台wen服务器,在现实的开发中不可能一个Nginx服务器代理一个web服务器的情况,而是代理多台的web服务器。
1、在克隆一个tomca的服务器
服务器信息:
NO | 主机名称 | IP地址 | 描述 |
1 | tomcat-service-1 | 192.168.239.132 | tomcat |
2 | nginx-service-01 | 192.168.239.133 | nginx |
3 | tomcat-service-2 | 192.168.239.134 | tomcat |
2、修改主机的名称
root@tomcat-service-1:~# vim /etc/hostname
tomcat-service-2
3、为了呈现效果修改两个tomcat中index.html的静态文件
tomcat-service-1
<h1>192.168.239.132</h1>
tomcat-service-2
192.168.239.134
4、启动两个tomcat服务,检测两个服务是否可以正常访问
tomcat-service-1:
tomcat-service-2:
以上结果显示两台web服务可以正常访问,下面使用Nginx代理两台服务器
5、修改Nginx的配置文件,增加负载均衡配置
upstream appserver{
server 192.168.239.132:8080;
server 192.168.239.134:8080;
}
location / {
proxy_pass http://appserver;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index index.html index.htm;
}
添加upstream appserver 配置项实现负载均衡操作,添加完毕后在修改代理的路径proxy_pass http://appserver,在修改完nginx.conf文件后必须检查是否配置成功
nginx -t
显示如下信息标识配置成功
成功之后重启nginx的服务,观察是否配置成功
root@ubuntu:/usr/local/nginx/conf# /usr/local/nginx/sbin/nginx -s reload
使用浏览器访问nginx服务器,检测是否代理两台web服务器
此时我们可以看到nginx实现了两台web服务器的代理,当用户发送请求的时候是实现循环访问,这就实现了web服务器的负载均衡
二、其他配置
1、增加权重配置,权重配置值越高有可能先被执行
upstream appserver{
server 192.168.239.132:8080 weight=5;
server 192.168.239.134:8080 weight=1;
}
2、检测配置和重新加载
/usr/local/nginx/sbin/nginx -t
root@ubuntu:/usr/local/nginx/conf# /usr/local/nginx/sbin/nginx -s reload
3、如果某台主机不参与配置,则将配置修改为
server 192.168.239.130 down;
4、如果某台主机只有在高负载量的时候才参与计算,则修改配置为
server 192.168.239.130 backup;
以上操作会导致一个问题,当用户登录的时候访问的是第一台服务器,但是第二次访问的时候被代理第二胎服务器,此时登录信息就无效了,需要重新登录,此时其中的一种解决方案是让用户访问的时候一直访问到登录的web服务器。此时针对以上的问题我们可以使用Nginx的ip_hash配置实现,该特征是用户在以后的访问中只能访问第一次访问的服务器,该配置很简单,直接在upstream节点中添加一个ip_hash就可以实现
upstream appserver{
server 192.168.239.132:8080;
server 192.168.239.134:8080;
ip_hsah;
}
以上的方案并非是最好的解决方案,最后的方案是将用户的信息保存在redis中,之后再次访问的时候先到redis中进行查询在确定用户是否登录,如果redis中有记录则表示登录成功。