实验环境
两台虚拟机:
192.168.137.110
192.168.137.120
Tomcat相关修改
虚拟机中分别安装有tomcat,分别修改webapps/ROOT目录下index.jsp,便于查看实验结果:
<!-- 192.168.137.110 -->
<body>
<h1>Tomcat One</h1>
...
</body>
<!-- 192.168.137.120 -->
<body>
<h1>Tomcat Two</h1>
...
</body>
Nginx配置
在192.168.137.110上安装Nginx,修改配置文件:
http {
...
upstream tomcat {
server 192.168.137.110:8080;
server 192.168.137.120:8080;
}
server {
listen 80;
location / {
#proxy_set_header Host $host;
proxy_pass http://tomcat;
}
}
...
}
测试
启动tomcat和Nginx。
浏览器直接测试效果:
刷新:
也可以修改nginx.conf,在server中添加:
add_header backendIP $upstream_addr;
add_header backendCode $upstream_status;
这样就可以在访问页面的时候查看response header中realserver的ip和返回码:
Nginx 负载均衡策略
轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。weight默认为1,将请求平均分配给每台服务器,weight可以指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
IP_hash
每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。当然如果这个节点不可用了,会发到下个节点,而此时没有session同步的话就注销掉了。
最少连接
将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。会考虑weight的值。
url_hash
此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包 nginx_upstream_hash(1.7.2版本以后集成到了nginx源码,不需要单独安装)。
fair
此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair 模块。
sticky
nginx安装参数参考
./configure \
--prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body \
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/subsys/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-openssl=../openssl-1.0.2j \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-pcre \
--add-module=../nginx_moudle/goodies-nginx-sticky-module \
--add-module=../nginx_moudle/nginx_upstream_check_module-0.3.0
># make && make install