Nginx + Tomcat 负载均衡集群 (群集 Cluster)
Nginx + Tomcat 负载均衡集群 (群集 Cluster)
Nginx + Tomcat 负载均衡集群 (群集 Cluster)
=====================================
面试:
····················
Nginx负载均衡默认是基于应用层的协议,从1.1版本起也支持四层协议 ,现在的nginx不仅支持7层也支持4层
nginx负载均衡调度状态:down、backup、max_fails、fial_timeout
nginx 的5种算法:轮询、least_conn(最小连接数)、ip_hash、fair 、url_hash
···············
什么是最小连接数,并举例说明
least-connected方式可以更公平的将负载分配到多个机器上面,使用least-connected ,nginx不会
将请求分发到繁忙的机器上面,而且将新的请求分发到较清闲的机器上面。
····················
负载就是客户对网站所造成的压力,也即客户对网站巨大的访问量
【1】1台tomcat能够最大连接数量为400个用户(但实际上能够正常访问200个,更多的话就会访问速度变得很慢),超过300基本都会报警了
【2】机器满足不了业务的需求,用户访问超过机器的访问数量就需要排队,
【3】机器坏了,瘫痪了
负载均衡的作用:支持更高的访问量,减少用户的等待时间(延时),并且解决一台机器的单点故障。
所以要用多台tomcat 也就是所谓的集群,大家一起工作。
负载均衡器或者说是负载调度器,由负载均衡器转交给后面的多台tomcat
~~~注意拓扑图中的单点(要考虑单点故障,是否需要备用服务器)~~~~~
养成看拓扑图查隐患的习惯
百度查:网卡的bonding ,如何配置
网卡bonding简介
网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡,配置完毕后,所有的物理网卡的ip和mac将会变成相同的。
多网卡同时工作可以提高网络速度,还可以实现网卡的负载均衡、冗余。
bonding常用的有三种模式
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。
mode5和mode6不需要交换机端的设置,网卡能自动聚合,因为做bonding的这两块网卡是使用不同的MAC地址。mode4需要支持802.3ad。
mode0,mode2和mode3理论上需要静态聚合方式。
1、查看bond模块:
modprobe -l bond* 或者 modinfo bonding
2、查看所有网卡:
[master@uni-cloud ~]$ lspci | grep net
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 05)
05:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
建议关闭NetworkManager:
$chkconfig NetworkManager off
$service NetworkManager stop
模式6下bond0会使用eth0或eth1其中某一个网卡的mac地址,如果此mac地址对应的物理网卡down了,则存活的某一网卡继承此mac地址
(这mac地址是虚拟出来的,设备实际的mac地址是唯一且不变的),当然bond0 mac地址也是此值;此外mode0模式下查看会发现bond将所有的网卡mac地址虚拟成相同的mac地址
================================================
nginx 是一款http服务软件 ,能够支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存
cpu等系统资源消耗非常低,目前很多大型网站都用nginx服务器做后端网站程序的反向代理及负载均衡器,来提升整个网站的
负载并发能力。
nginx 特点:高并发、资源低消耗、不仅能做网站,还能做负载均衡器(即反向代理)
==================================================
Nginx + Tomcat 负载均衡集群实验
66主机 : nginx tomcat
67主机 : tomcat
·~~~~~~~~~~~~~~~~~~~
66主机
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location ~* \.jsp$ {
proxy_pass http://192.168.200.67:8080;
}
保存退出
[root@localhost ~]# nginx -t
[root@localhost ~]# killall -HUP nginx
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
32 upstream tomcat_pool { //定义一个资源组,tomcat_pool 组名
33 server 192.168.200.66:8080 weight=1; //指定节点,weight=1 权重为1 ,默认权重为1
34 server 192.168.200.67:8080 weight=1;
35 }
49 location ~* \.jsp$ {
50 proxy_pass http://tomcat_pool; //这里写成定义的组名即可# ####proxy_set_header Host $http_host; //如果出现访问页面400错误时,加上这一行代码,一般新版本会出现这个错误(做了一个头部的转向)
51 }
保存退出
[root@localhost ~]# nginx -t
[root@localhost ~]# killall -HUP nginx
================= =======================
在浏览器访问192.168.200.66/index.jsp 实现网页跳转
nginx新版本须注意::如果后端服务器设置有类似防盗链或者根据http请求中的host字段来进行路由或者判断功能的话,
如果反向代理层的nginx不重写请求头中的host字段,将导致请求失败,报400错误。
-----------------------------------------------------------------------------------------------
nginx负载均衡算法 (5种)
【1】、轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动删除故障系统,使用户访问不受影响
upstream tomcat_pool { //定义一个资源组,tomcat_pool 组名
server 192.168.200.66:8080 weight=1; //指定节点,weight=1 权重为1 ,默认权重为1
server 192.168.200.67:8080 weight=1;
}
weight (轮询权重)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下,
或者仅仅为在主从的情况下设置不同的权值,达到合理有效的利用主机资源。
server 192.168.200.66:8080 weight=1;
server 192.168.200.67:8080 weight=2; 数字越大,权重越高,被分配的请求越多
【2】、least_conn(企业中运用较多)
least-connected方式可以更公平的将负载分配到多个机器上面,使用least-connected ,nginx不会
将请求分发到繁忙的机器上面,而且将新的请求分发到较清闲的机器上面。
upstream tomcat_pool { //在这里加上 least_conn;
least_conn;
server 192.168.200.66:8080 weight=1;
server 192.168.200.67:8080 weight=1;
}
【3】ip_hash (将用户与后端服务器进行绑定,但是在企业中并不会用这种方式,
因为服务器出现故障,用户登录信息就会丢失,企业中将session信息统一放到后端,或者是服务器之间进行session信息的同步)
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,
并且可以有效解决动态网页存在的session共享问题
upstream tomcat_server {
ip_hash;
server 192.168.200.112:8080 weight=1;
server 192.168.200.113:8080 weight=1;
}
【4】、fair
根据页面大小和加载时间长短来分配,也即根据后端服务器的响应时间来分配请求,
响应时间短的优先分配,nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。
upstream tomcat_server {
fair;
server 192.168.200.112:8080 weight=1;
server 192.168.200.113:8080 weight=1;
}
【5】、url_hash
按访问的url的哈希结果来分配,使每个URL定向到一台后端服务器,可以进一步提高
后端缓存服务器的效率,nginx本身不支持url_hash算法,须安装hash
upstream tomcat_server {
hash $request_uri;
hash_method crc32;
server 192.168.200.112:8080 weight=1;
server 192.168.200.113:8080 weight=1;
}
------------------------------------------------------------------------------------------------------
nginx负载均衡调度状态
在nginx upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态,常用的状态
如下:
down:表示当前server不参与负载均衡(在做维护或者代码上线的时候把一部分服务器标记为down,进行上线,叫做ab发布,灰度发布,这样一来用户可以继续进行访问)
backup:备份机器,有机器故障才会请求backup机器(找一台空闲的机器做备胎)
max_fails(很重要 ):允许请求失败次数,默认为1(通常设定的值为2或者3),当超过最大次数时返回proxy_next_upstream模块定义的错误
fial_timeout(很重要):请求失败超时时间,在经历了max_fails次失败后,暂停服务的时间,max_fails和fail_timeout可以一起使用。
eg:
upstream tomcat_server {
server 192.168.200.112:8080 weight=1 down;
server 192.168.200.113:8080 weight=1;
}
upstream tomcat_server {
server 192.168.200.112:8080 weight=1 max_fails=3 fail_timeout=10s;
server 192.168.200.113:8080 weight=1 max_fails=3 fail_timeout=10s;
}
~~~~~
在nginx中http、https、fastcgi、uwsgi、scgi、and memcached 的负载均衡都是通过反向代理实现的,
要配置http的负载均衡只需要将http协议改成https就可以了,其他配置不变。
要实现fastcgi、uwsgi、scgi、and memcached的负载均衡可以分别使用 fastcgi_pass 、uwsgi_pass 、scgi_pass 、and memcached_pass指令。