ホームページ  >  記事  >  運用・保守  >  本番環境で Nginx 高可用性を実装する方法

本番環境で Nginx 高可用性を実装する方法

WBOY
WBOY転載
2023-05-23 09:25:121342ブラウズ

準備作業:

192.168.16.128

192.168.16.129

2 台の仮想マシン。 nginxのインストール

nginxのインストール

yumソースファイルの更新:

rpm -ivh http://nginx.org/packages/centos/7/noarch/rpms/nginx-release-centos-7-0.el7.ngx.noarch.rpm
wget -o /etc/yum.repos.d/centos-base.repo http://mirrors.aliyun.com/repo/centos-7.repo

nginxのインストール:

yum -y install nginx

操作コマンド:

systemctl start nginx; #启动nginx
systemctl stop nginx; #停止nginx

高可用性とは何ですか?

高可用性 HA (高可用性) は、分散システム アーキテクチャの設計において考慮する必要がある要素の 1 つであり、通常、システムがサービスを提供できない時間を短縮することを指します。デザイン。システムが常にサービスを提供できる場合、可用性は 100% ですが、予期しない状況が発生することがあります。したがって、サービスの障害を可能な限り減らすように努めることしかできません。

問題は解決しましたか?

実稼働環境では、外部サービスを提供するリバース プロキシとして nginx がよく使用されますが、nginx にはいつかサーバーのダウンタイムなどの障害が発生することは避けられません。 nginx がダウンすると、外部から提供されたすべてのインターフェイスにアクセスできなくなります。

サーバーが 100% 利用可能であることを保証することはできませんが、この悲劇を回避する方法を見つける必要があります。現在、私たちは keepalived を使用して nginx

の高可用性を実現しています。

デュアル マシン ホット バックアップ ソリューション

このソリューションは、国内企業の間で最も一般的な高可用性ソリューションです。デュアル マシン ホット バックアップとは、実際には1 台のサーバーはサービスを提供しており、もう 1 台は特定のサービスを待機状態にあり、一方のサーバーが利用できない場合、もう一方のサーバーが代わりにサービスを提供します。

キープアライブとは何ですか?

keepalived ソフトウェアは元々、LVS クラスタ システム内の各サービス ノードのステータスを管理および監視する LVS 負荷分散ソフトウェア用に設計されましたが、その後、高可用性を実現するために vrrp (仮想ルーター) が追加されました。プロトコル、仮想ルーター冗長化プロトコル)機能。したがって、キープアライブは、LVS ソフトウェアを管理できるだけでなく、他のサービス (nginx、haproxy、mysql など) の高可用性ソリューション ソフトウェアとしても使用できます。メカニズム

keepalived 高可用性サービス間のフェイルオーバー転送は、vrrp を通じて実装されます。

keepalived サービスが正常に動作している場合、メイン マスター ノードは継続的に (マルチキャスト) ハートビート メッセージをバックアップ ノードに送信し、バックアップ ノードがまだ生きていることを伝えます。 、ハートビート メッセージを送信できず、スタンバイ ノードはマスター ノードからのハートビートを検出し続けることができないため、独自の引き継ぎプログラムを呼び出して、マスター ノードの IP リソースとサービスを引き継ぎます。プライマリ マスター ノードが回復すると、バックアップ ノードはプライマリ ノードの障害時に引き継いだ IP リソースとサービスを解放し、元のバックアップの役割に戻ります。

実装プロセス

keepalived のインストール

yum を使用して直接インストールでき、依存関係が自動的にインストールされます:

yum -y install keepalived

ホスト (192.168.16.128) keepalived 設定ファイルを変更する

yum インストールにより、/etc/keepalived に設定ファイルが生成されます:

vi keepalived.conf

keepalived.conf:

#检测脚本
vrrp_script chk_http_port {
 script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
 interval 2       #(检测脚本执行的间隔,单位是秒)
 weight 2       #权重
}
#vrrp 实例定义部分
vrrp_instance vi_1 {
 state master   # 指定keepalived的角色,master为主,backup为备
 interface ens33   # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
 virtual_router_id 66 # 虚拟路由编号,主从要一直
 priority 100   # 优先级,数值越大,获取处理请求的优先级越高
 advert_int 1   # 检查间隔,默认为1s(vrrp组播周期秒数)
 #授权访问
 authentication {
  auth_type pass #设置验证类型和密码,master和backup必须使用相同的密码才能正常通信
  auth_pass 1111
 }
 track_script {
  chk_http_port   #(调用检测脚本)
 }
 virtual_ipaddress {
  192.168.16.130   # 定义虚拟ip(vip),可多设,每行一个
 }
}

Virtual_ipaddress は vip で構成でき、vip を通じてサービスにオンラインでアクセスできます。

#サーバーのネットワーク カードに応じてインターフェイスを設定する必要があります。通常の表示方法は ip addr です。


認証設定バックアップ マシンへの認可アクセスにも同じ設定が必要です。

バックアップ マシン (192.168.16.129) のキープアライブ構成ファイルを変更します。

#keepalived.conf:

#检测脚本
vrrp_script chk_http_port {
 script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
 interval 2       #(检测脚本执行的间隔)
 weight 2       #权重
}
#vrrp 实例定义部分
vrrp_instance vi_1 {
 state backup      # 指定keepalived的角色,master为主,backup为备
 interface ens33      # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
 virtual_router_id 66    # 虚拟路由编号,主从要一直
 priority 99       # 优先级,数值越大,获取处理请求的优先级越高
 advert_int 1      # 检查间隔,默认为1s(vrrp组播周期秒数)
 #授权访问
 authentication {
  auth_type pass #设置验证类型和密码,master和backup必须使用相同的密码才能正常通信
  auth_pass 1111
 }
 track_script {
  chk_http_port     #(调用检测脚本)
 }
 virtual_ipaddress {
  192.168.16.130     # 定义虚拟ip(vip),可多设,每行一个
 }
}

検出スクリプト:

#!/bin/bash
#检测nginx是否启动了
a=`ps -c nginx --no-header |wc -l`  
if [ $a -eq 0 ];then #如果nginx没有启动就启动nginx      
  systemctl start nginx    #重启nginx
  if [ `ps -c nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行vip转移
    killall keepalived     
  fi
fi

スクリプト認証:chmod 775 check_nginx_pid.sh

説明: スクリプトは承認されている必要があります。承認されていない場合は、アクセス権限がありません。ここでは、2 つのサーバーが実行されています。

vip(virtual_ipaddress:192.168.16.130),

vip を通じてサービスに直接アクセスします。本番環境で。

nginx の失敗をシミュレートする:

2 つのサーバーがデフォルトでアクセスする nginx html ページを変更します。

最初に

192.168.16.130

にアクセスし、VIP 経由でアクセスすると、ページには

192.168.16.128

が表示され、サービスが現在メイン サーバーによって提供されていることを示します。

この時点で192.168.16.128メインサーバーは次のコマンドを実行します:

systemctl stop nginx; #停止nginx

vipに再度アクセスし(

192.168.16.130)、この時点ではまだページが表示されます: 192.168.16.128

、これはスクリプトの自動再起動です。

ここで、192.168.16.128 サーバーを直接閉じ、ここで vip (192.168.16.130

) にアクセスすると、ページに

192.168.16.129## が表示されることがわかります。 # その時点で、keepalived は自動的にフェイルオーバーし、エンタープライズ レベルの実稼働環境向けの高可用性ソリューションが確立されます。 keepalived にはメールによるリマインダーなどの多くの機能がありますが、それらは利用できません。ドキュメントを読むには公式 Web サイトにアクセスしてください。

以上が本番環境で Nginx 高可用性を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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