ホームページ  >  記事  >  運用・保守  >  nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

WBOY
WBOY転載
2023-05-22 22:52:411356ブラウズ

1. 実験環境

1.1 システムとサービス

今回使用したオペレーティングシステムとサービス:

この実験では、合計 3 台のサーバーが必要です。負荷分散ディストリビュータと動的・静的分離のディストリビュータとして2台のApacheサーバーを使用し、バックエンドサーバーとして2台のApacheサーバーを使用し、2台のApacheサーバーの負荷分散と静的・動的分離を実現するためにnginxを使用します。

オペレーティング システム: centos7.6
nginx バージョン: 1.22 バージョン
apache バージョン: デフォルトでシステムに付属する 2.4.6
php バージョン: 5.4.16

Apache と php の両方のバージョンは、公式 Web サイトからダウンロードしてインストールできる最新バージョンにアップグレードできます。

1.2 今回実装するアーキテクチャ図

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

#一般的に弊社のサーバーはファイルサーバー、画像サーバー、データベースサーバーなど多くの種類に分かれています。 。

その他にもさまざまなサービスがあります:

  • 静的ファイル処理: nginx または apache を使用できます

  • 動的ファイル処理: apache、tomcat

  • 画像ファイル処理:squid

この記事では、nginx を使用して、動的と静的分離を備えた負荷分散クラスターを実装します。 。

2. nginx 負荷分散の詳細説明

2.1 負荷分散とは何ですか?

サーバー負荷分散とは、システムのパフォーマンスを向上させ、システムの信頼性を高め、単一障害点を回避するために、クライアントからのリクエストを複数のサーバーに割り当てるテクノロジーを指します。

負荷分散により、複数のサーバーがクライアント要求を共同で処理できるため、システム全体のパフォーマンスと可用性が向上します。

ロード バランシングでは、通常、複数のサーバーがサーバー クラスターに形成されます。クライアントはロード バランサーにリクエストを送信します。ロード バランサーは、特定の条件に基づいてリクエストをサーバー クラスター内の 1 つ以上のサーバーに割り当てます。アルゴリズム。複数のサーバーで処理されます。負荷分散アルゴリズムは多数あり、一般的なアルゴリズムには、ポーリング、ランダム、最小接続数などが含まれます。

負荷分散戦略は、たとえばセッション永続性、ヘルスチェック、動的な重み調整などの高度な機能を使用して、より洗練される可能性があります。実際のニーズを構成および調整することで、負荷分散システムの柔軟性と効率を向上させることができます。

2.2 負荷分散の 5 つの方法

Nginx のアップストリーム負荷の 5 つの方法、現在最も一般的に使用されている上位 3 つの方法は次のとおりです:
1) ポーリング (デフォルト)
すべてのリクエストは次のとおりです。時系列に1台ずつ異なるバックエンドサーバーに割り当てられており、バックエンドサーバーがダウンした場合には自動的に削除することができます。
2)weight
ポーリング確率を指定します。重みはアクセス率に比例し、バックエンドサーバーのパフォーマンスが不均一な場合に使用されます。
3) ip_hash
各リクエストは、アクセスされた IP のハッシュ結果に従って割り当てられるため、各訪問者はバックエンド サーバーに固定的にアクセスでき、セッションの問題を解決できます。
4) air (サードパーティ)
リクエストはバックエンドサーバーの応答時間に応じて割り当てられ、応答時間の短いリクエストが最初に割り当てられます。
5) url_hash (サードパーティ)
アクセスした URL のハッシュ結果に応じて、同じ URL が同じバックエンド サーバーに送信されるようにリクエストを振り分けます。はキャッシュされています

Three . nginx をトラフィック ディストリビュータとしてインストールします

3.1 nginx をインストールする前に依存ツールをインストールする準備をします

[root@mufeng41 ~]#  yum -y install gcc gcc-c++ autoconf automake

[root@mufeng41 ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

Mu Feng Xiaoyue がこのインストール手順を実行したとき、彼女は忘れていましたイメージをマウントするには時間がかかるため、事前にイメージをマウントして yum ソースを設定する必要があります。

nginx 圧縮パッケージをアップロードして解凍します

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

[root@mufeng41 ~]# ll nginx-1.12.2.tar.gz 
-rw-r--r--. 1 root root 981687 8月  27 2019 nginx-1.12.2.tar.gz
[root@mufeng41 ~]# tar xf nginx-1.12.2.tar.gz  -C /usr/local/src/

ログインして表示

root@mufeng41 ~]# cd !$
cd /usr/local/src/
[root@mufeng41 src]# ls
nginx-1.12.2
[root@mufeng41 src]# cd nginx-1.12.2/
[root@mufeng41 nginx-1.12.2]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@mufeng41 nginx-1.12.2]#

3.2 コンパイルを開始

./configure --prefix=/usr/local/nginx  --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

Yes パラメータの説明:

  • –with-http_dav_module は、ngx_http_dav_module のサポートを有効にします (PUT、DELETE、MKCOL: コレクションの作成、COPY、および MOVE メソッドを追加します)。デフォルトでは閉じられているため、必要がありますコンパイルして有効にする

  • –with-http_stub_status_module ngx_http_stub_status_module サポートを有効にする (最後の起動以降の nginx の動作ステータスを取得する)

  • –with-http_addition_module ngx_http_addition_module サポートを有効にする (出力フィルターとして機能し、不完全なバッファリングをサポートし、リクエストに部分的に応答します)

  • ##–with-http_sub_module ngx_http_sub_module サポートを有効にする (一部の他のテキストを含む nginx 応答 Text)

  • –with-http_flv_module ngx_http_flv_module サポートを有効にする (メモリ使用量を求める時間ベースのオフセット ファイルを提供する)

  • #–-http_mp4_module を使用すると、mp4 ファイルのサポートが有効になります (メモリ使用量を求めるための時間ベースのオフセット ファイルを提供します)

3.3 nginx

Use ## のコンパイルとインストールを開始します#make && make install

インストール<pre class="brush:bash;">[root@mufeng41 nginx-1.12.2]# make &amp;&amp; make install</pre>実行が成功したかどうかを確認するにはどうすればよいですか?

答え:

エコー $?

3.4 実行中の nginx ユーザーを生成する

[root@mufeng41 nginx-1.12.2]# useradd -u 8000 -s /sbin/nologin  nginx
[root@mufeng41 nginx-1.12.2]# id nginx
uid=8000(nginx) gid=8000(nginx) 组=8000(nginx)
[root@mufeng41 nginx-1.12.2]#

3.5 nginx を起動してテスト

nginx 構成ファイルと起動スクリプトがどこにあるかわからない場合は、

find / -name nginx.conf

.サービスを開始します

[root@itlaoxin163 ~]# find / -name nginx.conf
/usr/local/nginx/conf/nginx.conf

# 启动
[root@mufeng41 nginx-1.12.2]# /usr/local/nginx/sbin/nginx 

[root@mufeng41 nginx-1.12.2]# netstat -antup |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      25286/nginx: master 
udp        0      0 0.0.0.0:58076           0.0.0.0:*

効果を確認します

[root@mufeng41 nginx-1.12.2]# systemctl stop firewalld.service
[root@mufeng41 nginx-1.12.2]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 24 Mar 2023 11:06:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 24 Mar 2023 11:01:53 GMT
Connection: keep-alive
ETag: "641d8321-264"
Accept-Ranges: byte

四. 配置nginx成为分发器

4.1 先备份配置文件

[root@mufeng41 conf]# pwd
/usr/local/nginx/conf
[root@mufeng41 conf]# cp nginx.conf nginx.conf.bak
[root@mufeng41 conf]#

4.2 把nginx设置成分发器,实现动静分离

配置如下图:

配置分发器

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

location / {
            root   html;
            index  index.html index.htm;


        if ($request_uri ~* \.html$){
                   proxy_pass http://htmlservers;
           }
        if ($request_uri ~* \.php$){
                   proxy_pass http://phpservers;
           }
                   proxy_pass http://picservers;

        }

注释:
location 的作用是根据请求的 URI,将请求转发到不同的后端服务器上进行处理。具体解释如下:

  • location /:表示所有请求(URI)都会被这个 location 块所匹配。

  • root html:表示当访问的 URI对应的文件不存在时,会在 nginx 安装目录下的 html 目录中查找对应的文件。

  • index index.html

  • index.htm:表示当访问的 URI 对应的目录中没有指定的默认文件时,会尝试访问 index.html 或 index.htm 文件。

  • if ($request_uri ~* .html$):表示如果请求的 URI 包含 .html,则执行下面的语句。

  • proxy_pass http://htmlservers:表示将请求转发到名为 htmlservers 的后端服务器处理。

  • if ($request_uri ~* .php$):表示如果请求的 URI 包含 .php,则执行下面的语句。

  • proxy_pass http://phpservers:表示将请求转发到名为 phpservers 的后端服务器处理。

  • proxy_pass http://picservers:表示将请求转发到名为 picservers 的后端服务器处理,这个语句没有条件限制,如果以上两个if 语句都不匹配,则会执行这个语句。

接下来设置负载均衡对应的IP

定义负载均衡设备的IP

在nginx配置文件最后一行}前添加一下内容:

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

代码如下:

 upstream  htmlservers {  
         server 192.168.1.42:80;   
         server 192.168.1.43:80;
 }
 upstream  phpservers{
         server 192.168.1.42:80;
         server 192.168.1.43:80;
 }
 upstream  picservers {
         server 192.168.1.42:80;
         server 192.168.1.43:80;
 }

配置文件是否有错误

[root@mufeng41 conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启nginx

[root@mufeng41 conf]# /usr/local/nginx/sbin/nginx -s reload

五. 配置两台http服务器

接下来,需要在 mufeng42和mufeng43上操作

5.1 配置mufeng42服务器 配置web服务器:

[root@mufeng42 ~]# yum install httpd  php -y

生成静态测试文件

[root@mufeng42 ~]# echo 192.168.1.42  > /var/www/html/index.html

在创建一个php文件:

[root@itlaoxin162 ~]# vim /var/www/html/test.php

写入内容:

echo "我是42服务器";echo "我是沐风晓月"<?phpphpinfo();?>

启动apache

[root@mufeng42 ~]# systemctl  restart httpd

5.2 配置mufeng43服务器

安装http并生成静态文件

[root@mufeng43 ~]# yum install httpd php -y
[root@mufeng43 ~]# echo 192.168.1.43 > /var/www/html/index.html

建立php文件

[root@mufeng43 ~]# cd /var/www/html/

[root@mufeng43 html]# vi mufeng.php
[root@mufeng43 html]# cat mufeng.php 
echo "我是43服务器";
<?php
phpinfo();
?>

启动配置文件

[root@mufeng43 html]# systemctl restart httpd

5.3 测试

到目前为止,nginx负载均衡就结束了,接下来就可以测试了:

测试静态页面

浏览器输入: http://192.168.1.41/ 进行测试

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

测试转发动态页面:

浏览器输入 http://192.168.1.41/test.php

nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法

以上がnginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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