目录
2、Nginx + Tomcat 构筑Web服务器集群的负载均衡
介绍
1、什么是代理服务
代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。
刚开始的时候,代理多数是帮助内网client访问外网server用的
后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内
1.1、正向代理
正向代理类似一个跳板机,代理访问互联网资源
正向代理的用途:
(1) 可以做缓存,加速访问资源
(2)对客户端访问授权,上网进行认证
(3)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
1.2、反向代理
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
反向代理的作用:
(1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
2、Nginx + Tomcat 构筑Web服务器集群的负载均衡
Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx(发音同engine x),它是由俄罗斯程序员Igor Sysoev所开发的。起初是供俄国大型的门户网站及搜索引擎Rambler使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。
2.1、Nginx的核心特点
(1)跨平台:Nginx 可以在大多数OS编译运行,而且也有Windows的版本;
(2)配置异常简单:非常容易上手。
(3)非阻塞、高并发连接
(4)事件驱动:通信机制采用epoll模型,支持更大的并发连接
(5)Master/Worker结构:一个master进程,生成一个或多个worker进程
(6)内存消耗小:处理大并发的请求内存消耗非常小。
(7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问
(8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头
(9)稳定性高:用于反向代理,宕机的概率微乎其微
2.2、Nginx 的 upstream 负载的5种策略
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、指定权重
指定轮询权重,用于后端服务器性能不均的情况。
3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
2.3、环境拓扑
主机 | IP | 角色 |
nginx | 192.168.121.10 | 反向代理服务器 |
tomcat1 | 192.168.121.11 | web服务器 |
tomcat2 | 192.168.121.12 | web服务器 |
2.4、nginx部署
上传软件包并解压
解压
[root@nginx ~]# tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/
安装依赖包
[root@nginx ~]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
预编译
添加www组,创建nginx运行账户www并加入到www组,不允许www用户直接登录系统。
[root@nginx ~]# groupadd www
[root@nginx ~]# useradd -g www -s /sbin/nologin www
注:
结合proxy和upstream模块实现后端web负载均衡
使用proxy模块实现静态文件缓存
结合nginx默认自带的ngx_http_proxy_module模块 和ngx_http_upstream_module模块实现后端服务器的健康检查,也可以使用第三方模块nginx_upstream_check_module
使用nginx-sticky-module扩展模块实现会话黏贴(保持会话)
使用ngx_cache_purge [pɜːrdʒ]实现更强大的缓存清除功能
上面提到的2个模块都属于第三方扩展模块,需要提前下好源码,然后编译时通过--add-moudle=src_path一起安装。
[root@nginx nginx-1.10.3]# tar zxf ngx_cache_purge-2.3.tar.gz -C /usr/local/src/
[root@nginx nginx-1.10.3]# tar zxf master.tar.gz -C /usr/local/src/
[root@nginx nginx-1.10.3]# cd /usr/local/src/nginx-1.10.3/
[root@nginx nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_realip_module --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_flv_module --add-module=../ngx_cache_purge-2.3 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42
编译安装
[root@nginx nginx-1.10.3]# make && make install
启动nginx
[root@nginx nginx-1.10.3]# mkdir -p /var/tmp/nginx/{client,proxy,fcgi}
[root@nginx nginx-1.10.3]# chown -R www:www /var/tmp/nginx/
[root@nginx nginx-1.10.3]# /usr/local/nginx/sbin/nginx
查看端口号
[root@nginx nginx-1.10.3]# netstat -antup | grep 80
网站访问测试
注:nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载。
注:如果你想在已安装好的nginx上添加第三方模块,依然需要重新编译,但为了不覆盖你原有的配置,请不要make install,而是直接拷贝可执行文件:
[root@cong11 nginx-1.10.3]#./configure --add-module=…… #你的第三方模块
[root@cong11 nginx-1.10.3]#make 后不要make install,改为手动拷贝,先备份
[root@cong11 nginx-1.10.3]#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
[root@cong11 nginx-1.10.3]#cp objs/nginx /usr/local/nginx/sbin/nginx
2.5、部署web服务器tomcat1
安装JDK
上传需要的软件包
解压JDK
[root@tomcat1 ~]# tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
配置JDK环境变量
[root@tomcat1 ~]# vim /etc/profile
#在文件最后加入一下行
JAVA_HOME=/usr/local/jdk1.8.0_171
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
#使环境变量生效
[root@tomcat1 ~]# source /etc/profile
2.5.1、安装tomcat
解压软件包
[root@tomcat1 ~]# tar -zxvf apache-tomcat-8.5.42.tar.gz -C /usr/local/
重命名目录
[root@tomcat1 ~]# cd /usr/local/
[root@tomcat1 local]# mv apache-tomcat-8.5.42/ tomcat
建立系统服务文件
[root@tomcat1 local]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=tomcat
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/jdk1.8.0_171/
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/etc/init.d/tomcat start
ExecStop=/etc/init.d/tomcat stop
ExecRestart=/etc/init.d/tomcat restart
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#重载service文件
systemctl daemon-reload
启动tomcat
systemctl start tomcat
添加开机自启动
systemctl ena