ホームページ 運用・保守 Nginx keepalived+nginx の高可用性を実現する方法

keepalived+nginx の高可用性を実現する方法

May 11, 2023 pm 09:28 PM
nginx keepalived

1.Keepalived の概要

keepalived はもともと、lvs クラスター システム内の各サービス ノードのステータスを管理および監視する lvs ロード バランシング ソフトウェア用に設計されました。高可用性 VRRP 機能。 LVS ソフトウェアの管理に加えて、keepalived は他のサービスの高可用性ソリューションもサポートできます。

keepalived は、vrrp プロトコルを通じて高可用性機能を実装します。 vrrp (仮想ルーター冗長プロトコル) 仮想ルーター冗長プロトコル。 vrrp の目的は、静的ルーティングの単一障害点の問題を解決することであり、個々のノードがダウンしても、ネットワーク全体が中断なく実行できるようにすることができます。

2. キープアライブ高可用性フェイルオーバーの原則

キープアライブ高可用性サービス間のフェイルオーバーは、vrrp を通じて実現されます。 keepalived サービスが動作している場合、マスター ノードはハートビート メッセージをバックアップ ノードに継続的に (マルチキャスト) 送信し、バックアップ ノードがまだ生きていることを伝えます。

マスター ノードに障害が発生した場合、バックアップ ノードがマスター ノードからのハートビートを検出し続けることができない場合、ハートビート メッセージをバックアップ ノードに送信できません。独自の引き継ぎプログラムを呼び出して、マスター ノードの IP リソースとサービスを引き継ぎます。プライマリ ノードが回復すると、スタンバイ ノードは、プライマリ ノードの障害時に引き継いだ IP リソースとサービスを解放し、元のスタンバイ ロールに戻ります

#3. nginx## をインストールします。

#3.1. マスターノード (192.168.80.22)

3.1.1. コンパイルツールとライブラリファイルのインストール

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
ログイン後にコピー

3.1.2. pcre のインストール

#进入目录
cd /usr/local/develop/anginx

#上传安装文件并解压
tar -zxvf pcre-8.38.tar.gz

#进入安装目录
cd pcre-8.38

#检查配置
./configure

#编译、安装
make && make install

#查看pcre版本
pcre-config --version
ログイン後にコピー

3.1.3. nginx のインストール

#进入目录
cd /usr/local/develop/anginx

#上传安装文件,并解压
tar -zxvf nginx-1.8.1.tar.gz

#进入安装目录
cd nginx-1.8.1

#检查配置
./configure --prefix=/usr/local/develop/anginx/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/develop/anginx/pcre-8.38

#编译安装
make && make install

#查看nginx版本
 /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v
--------------------------------------------------------
[root@hadoop02 webserver]# /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v
nginx version: nginx/1.8.1

#配置nginx(检查)
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -t

#nginx管理命令
/usr/local/develop/anginx/webserver/nginx/sbin/nginx       # 启动 nginx
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop       # 停止 nginx
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reload      # 重新载入配置文件
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reopen      # 重启 nginx
ログイン後にコピー

3.1.4.nginx の基本設定

vi nginx.conf

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

pid    logs/nginx.pid;


events {
  worker_connections 1024;
}


http {
  include    mime.types;
  default_type application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';

  access_log logs/access.log main;

  sendfile    on;
  #tcp_nopush   on;

  #keepalive_timeout 0;
  keepalive_timeout 65;

  #gzip on;
  
  #添加tomcat列表,真实应用服务器都放在这
  upstream tomcat_pool{
    #server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大;
    server 192.168.80.22:8080 weight=4 max_fails=2 fail_timeout=30s;
    server 192.168.80.22:8081 weight=4 max_fails=2 fail_timeout=30s;
    
  }

  server {
    listen    80;
    server_name tomcat_pool;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
      #root  html;
      #index index.html index.htm;
      proxy_pass http://tomcat_pool;  #转向tomcat处理
      proxy_set_header  host       $host;
      proxy_set_header  x-real-ip    $remote_addr;
      proxy_set_header  x-forwarded-for $proxy_add_x_forwarded_for;
    }

    #error_page 404       /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }


}
ログイン後にコピー

3.2. スタンバイノード (192.168.80.21)

手順: インストール方法はnginxマスターノードと同じです。

4. keepalived のインストール

4.1. マスター ノード (192.168.80.22)

#安装keepalived
yum install keepalived -y

#启动keepalived服务
/etc/init.d/keepalived start
-------------------------------------------
[root@hadoop02 anginx]# /etc/init.d/keepalived start
正在启动 keepalived:                   [确定]
[root@hadoop02 anginx]# ps -ef |grep keepalived
root   15723   1 0 00:59 ?    00:00:00 /usr/sbin/keepalived -d
root   15724 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -d
root   15725 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -d
root   15731 15622 0 00:59 pts/1  00:00:00 grep keepalived
[root@hadoop02 anginx]#

#设置开机自启动
echo "/etc/init.d/keepalived start" >>/etc/rc.local

#关闭keepalived服务
/etc/init.d/keepalived stop

#编辑keepalived配置文件
vi /etc/keepalived/keepalived.conf

-----------------------------------------------------------
! configuration file for keepalived

global_defs {
  notification_email {
   acassen@firewall.loc
   failover@firewall.loc
   sysadmin@firewall.loc
  }
  notification_email_from alexandre.cassen@firewall.loc
  smtp_server 192.168.200.1
  smtp_connect_timeout 30
  router_id lb01
}

vrrp_instance vi_1 {
  state master
  interface eth1
  virtual_router_id 55
  priority 150
  advert_int 1
  authentication {
    auth_type pass
    auth_pass server123
  }
  virtual_ipaddress {
    192.168.80.100 dev eth1 label eth1:1
  }
}
...........................................................
ログイン後にコピー
設定手順について:

    [router_id] はルーティング識別子であり、LAN 内で一意である必要があります。
    • [vrrp_instance vi_1]{...}これこれは vrrp インスタンスであり、keepalived のアクティブおよびバックアップのステータス、インターフェイス、優先度、認証および IP 情報を定義します。
    • [state] は vrrp
    • の役割を定義します。

    • [interface] 使用するインターフェイスを定義します。ここでサーバーで使用されるネットワーク カードはすべて eth1
    • [virtual_router_id] は、仮想ルーティング ID 識別子です。キープアライブ設定のセット アクティブ設定とスタンバイ設定は一貫しています
    • [優先順位] は優先順位であり、数値が大きいほど優先順位が高くなります。
    • [auth_type] は認証方法です。

    • [auth_pass] は認証用のパスワードです。

    • [virtual_ipaddress] {..仮想 IP アドレスを定義します。複数の IP アドレスを構成できます。ここでは、192.168.80.100 として定義し、eth1 のネットワーク インターフェイス、仮想インターフェイス eth1:1

  • # にバインドします。 ##4.2. スタンバイ ノード (192.168.80.21 )

    #安装keepalived
    yum install keepalived -y
    
    #启动keepalived服务
    /etc/init.d/keepalived start
    -------------------------------------------
    [root@hadoop02 anginx]# /etc/init.d/keepalived start
    正在启动 keepalived:                   [确定]
    [root@hadoop02 anginx]# ps -ef |grep keepalived
    root   15723   1 0 00:59 ?    00:00:00 /usr/sbin/keepalived -d
    root   15724 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -d
    root   15725 15723 0 00:59 ?    00:00:00 /usr/sbin/keepalived -d
    root   15731 15622 0 00:59 pts/1  00:00:00 grep keepalived
    [root@hadoop02 anginx]#
    
    #设置开机自启动
    echo "/etc/init.d/keepalived start" >>/etc/rc.local
    
    #关闭keepalived服务
    /etc/init.d/keepalived stop
    
    #编辑keepalived配置文件
    vi /etc/keepalived/keepalived.conf
    
    -----------------------------------------------------------------
    ! configuration file for keepalived
    
    global_defs {
      notification_email {
       acassen@firewall.loc
       failover@firewall.loc
       sysadmin@firewall.loc
      }
      notification_email_from alexandre.cassen@firewall.loc
      smtp_server 192.168.200.1
      smtp_connect_timeout 30
      router_id lb02
    }
    
    vrrp_instance vi_1 {
      state backup
      interface eth1
      virtual_router_id 55
      priority 100
      advert_int 1
      authentication {
        auth_type pass
        auth_pass server123
      }
      virtual_ipaddress {
        192.168.80.100 dev eth1 label eth1:1
      }
    }
    .............................................................
    ログイン後にコピー
5. Test

5.1. アクティブ ノードとバックアップ ノードの keepalived サービスを開始しますノード

##

#在节点一执行(192.168.80.22)
/etc/init.d/keepalived start
-------------------------------------
[root@hadoop02 anginx]# ps -ef |grep keepalived
root   15788   1 0 01:09 ?    00:00:00 /usr/sbin/keepalived -d
root   15790 15788 0 01:09 ?    00:00:00 /usr/sbin/keepalived -d
root   15791 15788 0 01:09 ?    00:00:00 /usr/sbin/keepalived -d
root   15807 15622 0 01:33 pts/1  00:00:00 grep keepalived
[root@hadoop02 anginx]#


#在节点二执行(192.168.80.21)
/etc/init.d/keepalived start
---------------------------------------
[root@hadoop01 ~]# ps -ef |grep keepalived
root   11542   1 0 01:30 ?    00:00:00 /usr/sbin/keepalived -d
root   11544 11542 0 01:30 ?    00:00:00 /usr/sbin/keepalived -d
root   11545 11542 0 01:30 ?    00:00:00 /usr/sbin/keepalived -d
root   11550 11512 0 01:33 pts/1  00:00:00 grep keepalived
[root@hadoop01 ~]#
ログイン後にコピー
5.2. 仮想 IP を介したサービスへのアクセス

http://192.168.80.100/session-redis-demo/

5.3. ホスト ノード キープアライブ サービスを停止します

#在节点一执行(192.168.80.22)
/etc/init.d/keepalived stop

#观察备节点变化
ip addr
-------------------------------------------
[root@hadoop01 ~]# ip addr
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state unknown 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: eth1: <broadcast,multicast,up,lower_up> mtu 1500 qdisc pfifo_fast state up qlen 1000
  link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff
  inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1
  inet 192.168.80.100/32 scope global eth1:1
  inet6 fe80::250:56ff:fe38:e546/64 scope link 
    valid_lft forever preferred_lft forever
[root@hadoop01 ~]#
ログイン後にコピー

5.4. 仮想 IP

keepalived+nginx の高可用性を実現する方法http:/ を介してサービスへのアクセスを継続します/192.168.80.100/session-redis-demo/

6.keepalived nginx integration

手順: nginx デーモン スクリプトを作成するnginx サービスが失敗した場合は、現在のノードの keepalived サービスを停止します。自動的にバックアップノードに切り替わります。

keepalived+nginx の高可用性を実現する方法

6.1. nginx デーモン スクリプトを作成します

vi nginx_check.sh

--------------------------------------
#!/bin/bash
while true
do
if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
then
  /etc/init.d/keepalived stop
fi
sleep 2
done

#给脚本授权
chmod u+x nginx_check.sh

#执行脚本
nohup /usr/local/develop/anginx/shell/nginx_check.sh &
ログイン後にコピー

6.2. メイン ノードの nginx サービスを停止します

#停止主节点nginx服务
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop

#查找进程
[root@hadoop02 ~]# ps -ef |grep nginx
root   15915   1 0 01:51 ?    00:00:00 /bin/bash /usr/local/develop/anginx/shell/nginx_check.sh
root   16516 15753 0 01:54 pts/5  00:00:00 grep nginx
[root@hadoop02 ~]#

#观察备用节点变化【服务正常】
ip addr
--------------------------------------
[root@hadoop01 shell]# ip addr
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state unknown 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: eth1: <broadcast,multicast,up,lower_up> mtu 1500 qdisc pfifo_fast state up qlen 1000
  link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff
  inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1
  inet 192.168.80.100/32 scope global eth1:1
  inet6 fe80::250:56ff:fe38:e546/64 scope link 
    valid_lft forever preferred_lft forever
[root@hadoop01 shell]#

#再次重新启动主节点nginx和keepalived服务
/usr/local/develop/anginx/webserver/nginx/sbin/nginx

/etc/init.d/keepalived start
ログイン後にコピー

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windowsでnginxを構成する方法 Windowsでnginxを構成する方法 Apr 14, 2025 pm 12:57 PM

Windowsでnginxを構成する方法は? nginxをインストールし、仮想ホスト構成を作成します。メイン構成ファイルを変更し、仮想ホスト構成を含めます。 nginxを起動またはリロードします。構成をテストし、Webサイトを表示します。 SSLを選択的に有効にし、SSL証明書を構成します。ファイアウォールを選択的に設定して、ポート80および443のトラフィックを許可します。

Dockerによってコンテナを起動する方法 Dockerによってコンテナを起動する方法 Apr 15, 2025 pm 12:27 PM

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。

Dockerコンテナの名前を確認する方法 Dockerコンテナの名前を確認する方法 Apr 15, 2025 pm 12:21 PM

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Docker用のコンテナを作成する方法 Docker用のコンテナを作成する方法 Apr 15, 2025 pm 12:18 PM

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

Nginxバージョンを確認する方法 Nginxバージョンを確認する方法 Apr 14, 2025 am 11:57 AM

nginxバージョンを照会できるメソッドは次のとおりです。nginx-vコマンドを使用します。 nginx.confファイルでバージョンディレクティブを表示します。 nginxエラーページを開き、ページタイトルを表示します。

nginxでクラウドサーバードメイン名を構成する方法 nginxでクラウドサーバードメイン名を構成する方法 Apr 14, 2025 pm 12:18 PM

クラウドサーバーでnginxドメイン名を構成する方法:クラウドサーバーのパブリックIPアドレスを指すレコードを作成します。 NGINX構成ファイルに仮想ホストブロックを追加し、リスニングポート、ドメイン名、およびWebサイトルートディレクトリを指定します。 nginxを再起動して変更を適用します。ドメイン名のテスト構成にアクセスします。その他のメモ:SSL証明書をインストールしてHTTPSを有効にし、ファイアウォールがポート80トラフィックを許可し、DNS解像度が有効になることを確認します。

nginxサーバーがハングした場合はどうすればよいですか nginxサーバーがハングした場合はどうすればよいですか Apr 14, 2025 am 11:42 AM

NGINXサーバーがダウンすると、次のトラブルシューティング手順を実行できます。NGINXプロセスが実行されていることを確認します。エラーメッセージのエラーログを表示します。 nginx構成の構文を確認します。 nginxには、ファイルにアクセスするために必要な権限があることを確認してください。ファイル記述子をチェックして制限を開いてください。 Nginxが正しいポートで聴いていることを確認してください。 nginxトラフィックを許可するために、ファイアウォールルールを追加します。バックエンドサーバーの可用性を含む逆プロキシ設定を確認します。さらなる支援については、テクニカルサポートにお問い合わせください。

See all articles