ホームページ  >  記事  >  運用・保守  >  Nginx+Tomcat リバースプロキシ、ロードバランシング、クラスター展開方法

Nginx+Tomcat リバースプロキシ、ロードバランシング、クラスター展開方法

王林
王林転載
2023-05-15 12:37:06724ブラウズ

nginx と他のサーバー間のパフォーマンスの比較:

Tomcat サーバーは Java 言語を指向しており、重量のあるサーバーですが、nginx は軽量のサーバーです。 Apache サーバーは安定しており、オープン ソースであり、クロスプラットフォームです。ただし、Apache サーバーは高い同時実行性をサポートしていません。Nginx は数百万の TCP 接続と 100,000 を超える同時接続の処理をサポートでき、優れたクロスプラットフォーム サーバーです。
nginx の主な利点は、高い同時実行性、シンプルなデプロイメント、低メモリ消費、低コストなどを実現できることです。主な欠点は、書き換え機能が十分強力ではないことと、Apache ほど多くのモジュールがないことです。

この記事では、主に一般的で実用的な nginx tomcat リバース プロキシと負荷分散の導入について説明します。この記事の各部分にはあまり関連性がないため、必要に応じて個別に学習できます。

nginx リバース プロキシ プロセスを見てみましょう:

Nginx+Tomcat リバースプロキシ、ロードバランシング、クラスター展開方法

nginx 負荷分散プロセス (アクセスの負担が少ないサーバーが自動的に選択されます):

Nginx+Tomcat リバースプロキシ、ロードバランシング、クラスター展開方法

#負荷分散はリバース プロキシの原理によって実現されることがわかるため、リバース プロキシ ロード バランシングとも呼ばれます。そこで負荷分散を導入し、リバースプロキシも利用できるようにします。

一般に、負荷分散を実装するにはソフトウェア実装とハードウェア実装の 2 つの方法があり、ハードウェア実装は非常に効率的ですが、それに伴うコストも非常に高くなります。ソフトウェアの実装はハードウェアほど効率的ではありませんが、コストは比較的低くなります。 nginxサーバーを使用して負荷分散を実現する場合、負荷分散はソフトウェアによって実現され、nginx自体が高い同時実行性などをサポートします。したがって、nginx サーバーを使用して負荷分散を実現すると、企業のコストを大幅に節約できます。また、nginx はサーバー ソフトウェアであるため、実行効率も非常に高くなります。この記事の目的は、nginx を使用して負荷分散を実現できるように支援することです。

負荷分散の中核は、サーバー クラスターを確立することです。ユーザーはまずサードパーティのプロキシ サーバー (ここでは nginx を選択します) にアクセスし、次にプロキシ サーバーがクラスター内のサーバーを選択します。次に、選択したサーバー (ここでは Tomcat を選択します) にリクエストを導入します。

以下に示すように、リバース プロキシを通じて次の負荷分散を実現します。ここでは、4 台のサーバーがパブリック IP アドレスを持ち、1 台がプロキシ サーバーとして使用され、3 台が負荷分散下のサーバーとして使用されると仮定します。


Nginx+Tomcat リバースプロキシ、ロードバランシング、クラスター展開方法##全体的なアーキテクチャは基本的に明確になったので、詳細に実装してみましょう:

ヒント: この記事では、基本的に 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 は、検出された場合に「はい」を意味し、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 (マスター プロセス) のメイン プロセス番号をクエリする必要があります。ここでのクエリは 1060 を取得すると仮定します (便宜上)。次のデモ):

# ps -ef|grep nginx

nginx サーバーを停止する方法を見てみましょう。nginx を停止するには 3 つの方法があります:

簡単停止:

# 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 に接続してから、次の操作を実行します (通常、デフォルトの main を変更することは推奨されません)構成ファイル 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 -p

mysql> 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 リバースプロキシ、ロードバランシング、クラスター展開方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。