千家信息网

Nginx+Tomcat反向代理、负载均衡、集群部署的方法

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍"Nginx+Tomcat反向代理、负载均衡、集群部署的方法",在日常操作中,相信很多人在Nginx+Tomcat反向代理、负载均衡、集群部署的方法问题上存在疑惑,小编查阅了各式资料,
千家信息网最后更新 2024年09月22日Nginx+Tomcat反向代理、负载均衡、集群部署的方法

这篇文章主要介绍"Nginx+Tomcat反向代理、负载均衡、集群部署的方法",在日常操作中,相信很多人在Nginx+Tomcat反向代理、负载均衡、集群部署的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Nginx+Tomcat反向代理、负载均衡、集群部署的方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

nginx与其他服务器的性能比较:

tomcat服务器面向java语言,是重量级的服务器,而nginx是轻量级的服务器。apache服务器稳定、开源、跨平台,但是apache服务器不支持高并发,nginx能支持处理百万级的tcp连接,10万以上的并发连接,并且是一个很好的跨平台服务器。
nginx主要优点有可以实现高并发、部署简单、内存消耗少、成本低等,主要缺点有rewrite功能不够强大,模块没有apache的多。

本篇主要讲解 nginx + tomcat 反向代理和负载均衡的部署,以通俗实用为主。本篇文章每个部分之间没有太大关系,可根据需求分开学习。

下来看一下nginx反向代理的过程:

nginx负载均衡的过程(会自动选择压力较小的服务器进行访问):

可以看出,负载均衡是通过反向代理的原理实现的,所以也称 反向代理的负载均衡 。所以我们会部署负载均衡,那么反向代理也就会了。

总的来说,负载均衡实现的方式分为软件实现和硬件实现两种,硬件实现运行的效率非常高,但是对应的成本也非常高。软件实现运行效率不如硬件,但是成本相对来说低得多。而使用nginx服务器实现负载均衡,那么就是通过软件的方式来实现负载均衡,并且nginx本身支持高并发等。故而使用nginx服务器实现负载均衡,能大大节约企业的成本,并且由于nginx是服务器软件,其执行效率也是非常高。本篇的目的也就是帮助大家使用nginx实现负载均衡。

负载均衡的核心就是建立一个服务器集群,然后用户首先访问到第三方代理服务器(这里我们选用nginx),然后由代理服务器选择一个集群中的服务器,然后将请求引入选定的服务器(这里我们选用tomcat)。

如下图,通过反向代理我们实现下面的负载均衡,这里我们 假定 四台服务器公网的ip,一台做代理服务器,三台做负载均衡下的服务器:

好了,整体架构已经基本上清晰了,下来我们来具体实现下:

提示:本篇我们基本上都是使用ssh进行相关操作的,windows下可以尝试安装putty,mac下直接使用系统自带的终端工具即可。

1.linux下搭建nginx服务器

我们在 192.168.2.20 这台服务器上搭建nginx服务器:

1)下载nginx

2)上传服务器nginx安装包

$ scp ~/downloads/nginx-1.10.2.tar.gz root@192.168.2.20:/usr/local

3)安装nginx

$ ssh root@192.168.2.20             //ssh连接# yum -y install gcc gcc-c++ autoconf automake  //gcc、gcc-c++的库文件# yum install -y pcre pcre-devel         //安装nginx依赖包# yum install -y zlib zlib-devel

注意:-y表示遇到判断全部yes,autoconf表示自动配置,automake表示自动编译。

# cd /usr/local# tar -zxvf nginx-1.10.2.tar.gz         //解压缩# cd nginx-1.10.2                //切换到该目录下# ./configure                  //配置# make# make install                 //安装

检验是否完成安装:

# cd /usr/local# ls                      //如果存在nginx文件夹,则安装成功

经过上面的安装步骤和目录设置,nginx的启动程序就是/usr/local/nginx/sbin/nginx,默认配置文件是/usr/local/nginx/conf/nginx.conf,但是不建议直接编辑nginx.conf,一般我们都选择新建配置文件,然后在新建的配置文件中修改端口、反向代理路径等。

2.nginx的启动、停止、信号控制

1)启动nginx服务器(格式:nginx可执行文件 -c nginx配置文件):

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2)停止nginx服务器:

停止nginx服务器首先要查询nginx的主进程号(master process),假设此处查询得到1060(方便下面演示使用):

# ps -ef|grep nginx

下来看如何停止nginx服务器,停止nginx有三种方式:

从容停止:

# ps -ef|grep nginx  //查看nginx的主进程号(master process),假设此处查询得到1060# kill -quit 1060

快速停止:

# kill -term 1060

强制停止:

# pkill -9 nginx

3)重启nginx服务器:

当我们修改了nginx配置文件,需要重启才能生效。我们在重启之前还需要验证配置文件的正确性,然后进行重启操作:

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf   //验证# /usr/local/nginx/sbin/nginx -s reload                  //重启

4)平滑升级nginx服务器

平滑升级不会停掉在运行着的进程,这些进程会继续处理请求,但不会再接受新请求,在这些老进程在处理完还在处理的请求后,停止。此平滑升级的过程中,新开的进程会被处理。这就是平滑升级。

# /usr/local/nginx/sbin/nginx -v       //查看当前版本

下面进行平滑升级:

# cd /usr/local# tar -zxvf nginx-1.11.6.tar.gz       //解压缩 新版本nginx# cd nginx-1.11.6              //切换到该目录下# ./configure                //配置# make# cd /usr/local/nginx/sbin          //打开 旧版本nginx可执行文件位置# cp nginx nginx.old         //备份 旧版本nginx可执行文件,防止升级错误而无法恢复# cp -rfp /usr/local/nginx-1.11.6/objs/nginx /usr/local/nginx/sbin   //复制新版本可执行文件到旧版本处# rm -f /usr/local/nginx-1.11.6.tar.gz    //善后工作 删除压缩文件# rm -rf /usr/local/nginx-1.11.6       //删除文件夹

至此,nginx服务器平滑升级成功。

3.nginx中负载均衡的实现

我们还是先连接ssh,然后进行下面操作(一般不建议修改默认主配置文件nginx.conf,所以我们新建负载均衡配置文件fzjh.conf,保证服务器安全,如下):

# cd /usr/local/nginx/conf# touch fzjh.conf# vi fzjh.conf  //用vi编辑器打开文件,然后按键盘的i

注意:vi编辑器中,键盘按 i 进入 insert 状态,按 esc 退出 insert 状态。

然后输入以下配置代码(注释部分按需开启):

#设置低权限用户,为了安全而设置的user nobody;#工作衍生进程数worker_processes 4;#设置错误文件存放路径#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#设置pid存放路径(pid是控制系统中重要文件)#pid logs/nginx.pid;#设置最大连接数events{  worker_connections 1024;}http{  #主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用额代理服务器,默认负载均衡方式为轮询  upstream tomcat_client {    #设置同一个cookie的两次/多次请求,请求的是同一台服务器    ip_hash;    #weight权重,默认1,权重越大访问概率越大,backup备用服务器,服务器全部崩溃后启动    server 192.168.2.21:8080 weight=5;    server 192.168.2.22:8080 weight=5;    server 192.168.2.23:8080 weight=5 backup;  }  #开启gzip压缩,开启后,访问网页会自动压缩  #gzip on;  #指定服务器的名称和参数  server {    listen 80;    server_name test.nginxtest.net;    #设置字符    #charset koi8-r;    #location / 指用根目录做负载均衡    location / {      proxy_pass http://tomcat_client;      proxy_redirect default;      #设置代理      proxy_set_header host $host;      proxy_set_header x-real-ip $remote_addr;    }  }}

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出负载均衡的配置文件了,下来我们加载我们的配置文件:

# /usr/local/nginx/sbin/nginx                      //启动nginx# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf    //加载配置文件

如果存在端口占用,可以使用如下命令kill掉nginx的程序:

# killall -9 nginx

至此,nginx服务器部署完毕。下面我们开始部署负载均衡下的那三台真实提供数据的服务器。

4.linux下安装jdk

我们在192.168.2.21、192.168.2.22、192.168.2.23这三台服务器安装jdk,以192.168.2.21为例:

1)下载jdk

2)上传服务器jdk安装包

$ scp ~/downloads/jdk-8u112-linux-x64.tar.gz root@192.168.2.21:/usr/local

3)安装jdk

$ ssh root@192.168.2.21         //ssh连接# cd /usr/local# tar -zxvf jdk-8u112-linux-x64.tar.gz //解压缩# mv jdk1.8.0_112/ jdk         //将jdk1.8.0_112重命名为jdk# vi /etc/profile            //用vi编辑器打开文件,然后按键盘的i

下来我们移动光标至最后面,两个回车换行,然后添加下面代码配置java的环境变量:

java_home="/usr/local/jdk"class_path="$java_home/lib:$java_home/jre/lib"path=".:$path:$java_home/bin"catalina_home="/usr/local/tomcat"export java_home catalina_home

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出了。此时我们想让其立即生效,则需要继续输入命令:

# source /etc/profile

此时profile文件就更新了,此时环境变量就配置成功了。下面我们验证一下jdk是否安装配置成功:

# java -version

如果返回java版本号则安装成功。

5.linux下搭建tomcat服务器

我们在192.168.2.21、192.168.2.22、192.168.2.23这三台服务器搭建tomcat服务器,以192.168.2.21为例:

1)下载tomcat

2)上传服务器tomcat安装包

$ scp ~/downloads/apache-tomcat-8.5.9.tar.gz root@192.168.2.21:/usr/local

3)安装tomcat

$ ssh root@192.168.2.21         //ssh连接# cd /usr/local# tar -zxvf apache-tomcat-8.5.9.tar.gz //解压缩# mv apache-tomcat-8.5.9/ tomcat    //将apache-tomcat-8.5.9重命名为tomcat

4)设置tomcat网页文件目录

tomcat默认网页文件的路径是 /usr/local/tomcat/webapps/root,但是一般我们不在这里存放,我们在linux根目录新建 data/wwwroot 目录:

# mkdir /data             //新建目录# mkdir /data/www# mkdir /data/www/root# cd /usr/local/tomcat/conf# vi server.xml            //用vi编辑器打开server.xml配置文件,打开后键盘按i

我们找到host节点下的appbase="webapps",修改为:appbase="/data/www"

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出配置文件了,然后重启tomcat即可生效,此时tomcat的网页文件目录就变成了 /data/www/root 了。

配置tomcat环境变量,我们在配置jdk的时候已经配置好了,可以回头看一下。

6.tomcat的启动、停止

1)启动tomcat服务器

# /usr/local/tomcat/bin/startup.sh

2)停止tomcat服务器:

# /usr/local/tomcat/bin/shutdown.sh

到此,nginx + tomcat 负载均衡 集群 已经部署完毕了。不过有了服务器,肯定也少不了数据库,下面拓展一下linux下安装mysql数据库的方法。

7.linux下安装mysql数据库

我们重新找了 192.168.2.30 这台服务器上mysql数据库:

1)下载mysql数据库

2)上传mysql数据库安装包

$ scp ~/downloads/mysql-5.1.51.tar.gz root@192.168.2.30:/usr/local

3)安装mysql

$ ssh root@192.168.2.30         //ssh连接# groupadd mysql            //建立mysql的组# useradd mysql -g mysql        //增加用户mysql到mysql的组中# yum list|grep ncurses# yum -y install ncurses-devel# yum install ncurses-devel# cd /usr/local# tar -zxvf mysql-5.1.51.tar.gz     //解压缩# cd mysql-5.1.51# ./configure --prefix=/usr/local/mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-readline --with-sll //配置,设置安装路径,设置编译mysql不带共享库,设置编译client不带共享库,设置要以rmp的方式安装tar包,设置以rmp的方式安装opensll# make# make install             //安装,在make[4]的时候等待时间比较长,几分钟到十几分钟,都是正常现象# /usr/local/mysql/bin/mysql_install_db --user    //对安装好的mysql进行初始化# cp ./support-files/mysql.server /etc/init.d/mysql //将mysql启动服务复制到系统中并重命名为mysql# cp ./support-files/my-medium.cnf /etc/my.cnf    //复制规则文件# chmod 755 /etc/init.d/mysql            //更改文件权限//文件权限由三个数字组成,第一位:文件拥有者的权限,第二位:文件拥有者同组的人的权限,第三位:文件拥有者非同组人的权限//7:可读可写可执行,5:可读可执行# cd /usr/local/mysql# chown -r mysql .                  //将 /usr/local/mysql 的拥有者更改为mysql# chgrp -r mysql .                  //将 /usr/local/mysql 归到mysql组中# ps -ef|grep mysql# kill -9 3632          //将mysql所有进程号依次杀死,这里假定是3632# /usr/local/mysql/bin/mysql_install_db --user=mysql    //再次初始化# service mysql start                   //启动mysql# /usr/local/mysql/bin/mysqladmin -u root password '123456' //设置mysql密码

到此mysql就安装成功了,下来我们测试一下:

# /usr/local/mysql/bin/mysql -u root -p

如果输入密码后可以登进mysql,那么就测试成功。下面我们设置mysql允许开启远程连接:

# /usr/local/mysql/bin/mysql -u root -pmysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;//创建用户用于远程连接(root:用户名,%:所有电脑都可以连接,也可以设置某个ip地址运行连接,123456:密码)mysql> flush privileges;      //立即生效

下面我们查询一下数据库的用户:

mysql> select distinct concat('user: ''',user,'''@''',host,''';') as query from mysql.user;mysql> \q              //登出

找一台电脑测试一下,使用navicat远程登录mysql,登进成功。

到此,关于"Nginx+Tomcat反向代理、负载均衡、集群部署的方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0