nginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法
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 または 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 圧縮パッケージをアップロードして解凍します
[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 ファイルのサポートが有効になります (メモリ使用量を求めるための時間ベースのオフセット ファイルを提供します)
インストール<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>[root@mufeng41 nginx-1.12.2]# make && make install</pre><div class="contentsignin">ログイン後にコピー</div></div>
実行が成功したかどうかを確認するにはどうすればよいですか?
答え:
エコー $?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设置成分发器,实现动静分离
配置如下图:
配置分发器
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配置文件最后一行}前添加一下内容:
代码如下:
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/ 进行测试
测试转发动态页面:
浏览器输入 http://192.168.1.41/test.php
以上がnginx を使用して動的および静的に分離された負荷分散クラスターを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Tomcat サーバーが外部ネットワークにアクセスできるようにするには、以下を行う必要があります。 外部接続を許可するように Tomcat 構成ファイルを変更します。 Tomcat サーバー ポートへのアクセスを許可するファイアウォール ルールを追加します。 Tomcat サーバーのパブリック IP を指すドメイン名を指す DNS レコードを作成します。オプション: リバース プロキシを使用して、セキュリティとパフォーマンスを向上させます。オプション: セキュリティを強化するために HTTPS を設定します。

Nginx の開始コマンドと停止コマンドは、それぞれ nginx と nginx -s quit です。 start コマンドはサーバーを直接起動し、stop コマンドはサーバーを正常にシャットダウンして、現在のすべてのリクエストを処理できるようにします。その他の使用可能な停止信号には、停止およびリロードがあります。

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

「nginx へようこそ!」エラーを解決するには、仮想ホスト構成を確認し、仮想ホストを有効にし、Nginx をリロードする必要があります。仮想ホスト構成ファイルが見つからない場合は、デフォルト ページを作成して Nginx をリロードすると、エラー メッセージが表示されます。が消え、ウェブサイトは通常のショーになります。

Web サイトにアクセスすると nginx が表示されます。その理由としては、サーバーのメンテナンス、サーバーのビジー状態、ブラウザーのキャッシュ、DNS の問題、ファイアウォールのブロック、Web サイトの構成ミス、ネットワーク接続の問題、Web サイトのダウンなどが考えられます。次の解決策を試してください: メンテナンスが終了するまで待つ、オフピーク時間にアクセスする、ブラウザのキャッシュをクリアする、DNS キャッシュをフラッシュする、ファイアウォールまたはウイルス対策ソフトウェアを無効にする、サイト管理者に連絡する、ネットワーク接続を確認する、または検索エンジンを使用するWeb アーカイブを使用して、サイトの別のコピーを見つけます。問題が解決しない場合は、サイト管理者にお問い合わせください。

phpMyAdmin に登録するには、まず MySQL ユーザーを作成して権限を付与し、次に phpMyAdmin をダウンロード、インストール、構成し、最後に phpMyAdmin にログインしてデータベースを管理する必要があります。

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。

Docker 環境でのコンテナ通信には、共有ネットワーク、Docker Compose、ネットワーク プロキシ、共有ボリューム、メッセージ キューの 5 つの方法があります。分離とセキュリティのニーズに応じて、Docker Compose を利用して接続を簡素化するか、ネットワーク プロキシを使用して分離を強化するなど、最も適切な通信方法を選択します。
