一 、单机版nginx负载均衡实现
1.1 负载均衡概念
为了提高服务高可用,往往服务单元实现集群化部署,当客户端发出请求时,代理服务会获取所有的可用服务,根据配置一定的算法,从可用服务中选择一个进行请求及响应,这种机制叫负载均衡。
1.2 nginx单机版负载均衡的规划
二、具体实现
2.1 再克隆webtest2并配置IP
具体过程参考前面教程
为了方便,使用webtest1来克隆webtest2
2.2 按照规划图配置web服务器,并启动测试
启动webtest1和2
2.2.1 在webtest1上操作:
cp -r /usr/apache-tomcat/ /usr/tomcat1
cp -r /usr/apache-tomcat/ /usr/tomcat2
cp -r /usr/apache-tomcat/ /usr/tomcat3
vim /usr/tomcat1/conf/server.xml
:22 8001
:69 8181
vim /usr/tomcat2/conf/server.xml
:22 8002
:69 8082
vim /usr/tomcat3/conf/server.xml
:22 8003
:69 8083
为了讲解负载均衡,让服务显示不同,方便后面测试
vim /usr/tomcat1/webapps/test1/index.jsp
:3 111111111111111111111
vim /usr/tomcat2/webapps/test1/index.jsp
:3 2222222222222222222222
vim /usr/tomcat3/webapps/test1/index.jsp
:3 3333333333333333333333
启动tomcat:
/usr/tomcat1/bin/startup.sh
/usr/tomcat2/bin/startup.sh
/usr/tomcat3/bin/startup.sh
测试tomcat:
http://192.168.140.62:8181/test1/
http://192.168.140.62:8182/test1/
http://192.168.140.62:8183/test1/
另外一台配置和上面相同 端口改为 8184 8185 8186
2.2.2 配置nginx负载均衡
vim /usr/local/nginx/conf/nginx.conf
2.2.3 测试nginx负载均衡
保证后台6台tomcat正常运行
重启nginx
/usr/local/nginx/sbin/nginx -s reload
浏览器请求:
http://192.168.140.43/test/test1/
刷新在 62:8181-8183和 61:8184-8186 之间来回切换
三、nginx负载均衡算法
3.1 轮询算法(roundribbon)
按照请求时间的先后顺序,把不同请求依次访问后端服务,当某一台服务器出现故障,nginx会自动把故障服务剔除,如果故障机恢复正常,nginx会自动让它再次参与负载均衡。
具体配置:
http://192.168.140.43/test/test1/
让tomcat2关闭,刷新请求 让 tomcat2再次启动,再刷新请求
3.2 按权重轮询(weight roundribbon)
根据服务器性能不同,让不同的服务承载不同的访问量。解决服务器性能差异问题。
具体实现:
weight 配置取值返回从1-255 数据越大,权重越大,默认值为1
重启nginx
/usr/local/nginx/sbin/nginx -s reload
或者(麻烦)
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s start
浏览器请求:
http://192.168.140.43/test/test1/
多次刷新请求,测试结果发现,权重越大出现的频率越高
3.3 ip_hash算法
一旦配置ip_hash算法,就会按照客3户端IP进行hash运算,运算结果对总的服务数量取余,余数是几,就会跳转到该服务,并且以后的所有请求在同一IP时,都会请求到该服务。(在轮询或者权重轮询的基础上)。解决session不共享问题的。
具体实现:
多次刷新不会该变内容
3.4 公平算法fair
按照服务的响应时间来进行负载均衡,服务响应时间越短,负载的请求就会越大。
3.5 url_hash 算法
按照uri的不同,负载到不同的服务器上。通俗的说,请求的url及参数相同,该请求每次都会到同一个服务器上。解决缓存利用率问题,提高缓存利用率。