Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So erreichen Sie eine hohe Verfügbarkeit von Keepalived + Nginx

So erreichen Sie eine hohe Verfügbarkeit von Keepalived + Nginx

PHPz
PHPznach vorne
2023-05-11 21:28:111232Durchsuche

1.Keepalived-Einführung

keepalived wurde ursprünglich für die LVS-Lastausgleichssoftware entwickelt, um den Status jedes Dienstknotens im LVS-Clustersystem zu verwalten und zu überwachen. Später wurde die VRRP-Funktion für Hochverfügbarkeit hinzugefügt. Neben der Verwaltung der LVS-Software kann keepalived auch Hochverfügbarkeitslösungen für andere Dienste unterstützen.

keepalived implementiert die Hochverfügbarkeitsfunktion über das VRRP-Protokoll. vrrp (Virtual Router Redundancy Protocol) Redundanzprotokoll für virtuelle Router. Der Zweck von vrrp besteht darin, das Single-Point-of-Failure-Problem des statischen Routings zu lösen. Es kann sicherstellen, dass beim Ausfall einzelner Knoten das gesamte Netzwerk unterbrechungsfrei laufen kann.

2. Keepalived-Hochverfügbarkeits-Failover-Prinzip

Failover zwischen Keepalived-Hochverfügbarkeitsdiensten wird über vrrp implementiert. Wenn der Keepalived-Dienst funktioniert, sendet der Masterknoten kontinuierlich (Multicast-)Heartbeat-Nachrichten an den Backup-Knoten, um dem Backup-Knoten mitzuteilen, dass er noch aktiv ist.

 Wenn der Master-Knoten ausfällt, können keine Heartbeat-Nachrichten an den Backup-Knoten gesendet werden, wenn der Backup-Knoten den Heartbeat vom Master-Knoten nicht weiterhin erkennen kann. Es ruft sein eigenes Übernahmeprogramm auf, um die IP-Ressourcen und -Dienste des Masterknotens zu übernehmen. Wenn der Primärknoten wiederhergestellt ist, gibt der Standby-Knoten die IP-Ressourcen und Dienste frei, die er übernommen hat, als der Primärknoten ausgefallen ist, und kehrt zu seiner ursprünglichen Standby-Rolle zurück

3. Installieren Sie nginx

3.1. 80.22)

3.1.1. Kompilierungstools und Bibliotheksdateien installieren

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

3.1.3. Nginx installieren

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

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

#进入安装目录
cd pcre-8.38

#检查配置
./configure

#编译、安装
make && make install

#查看pcre版本
pcre-config --version

#进入目录
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. 2. Standby Knoten (192.168.80.21)

Hinweis: Die Installationsmethode ist die gleiche wie beim Nginx-Masterknoten. 4. Installieren Sie keepalived

【vrrp_instance vi_1】{...} Dies ist eine vrrp-Instanz, die den aktiven und Sicherungsstatus, die Schnittstelle, die Priorität, die Authentifizierung und die IP-Informationen von keepalived definiert.

[Status] definiert die Rolle von vrrp

[Schnittstelle] definiert die von meinem Server verwendete Schnittstelle eth1

    [virtual_router_id] ist die ID des virtuellen Routers. In einer Reihe von Keepalived-Konfigurationen sind die Haupt- und Backup-Einstellungen konsistent
  • [priority] ist die Priorität, je größer die Zahl, desto höher die Priorität,

    • [auth_type] ist die Authentifizierungsmethode

    • [auth_pass] ist das Passwort für die Authentifizierung

    • [virtual_ipaddress] {...}Definition der virtuellen IP-Adresse, mehrere IP-Adressen können konfiguriert werden, hier definiere ich sie als 192.168.80.100, die an die Netzwerkschnittstelle von eth1 gebunden ist, virtuelle Schnittstelle eth1:1

    • 4.2. Standby Knoten (192.168.80.21)
    • 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;
          }
      
      
      }

      5. Testen Sie 5.1. Starten Sie den Keepalived-Dienst der aktiven und Backup-Knoten. 192.168.80.100/session-redis-demo/
    • 5.3. Stoppen Sie den Master-Knoten-Keepalive-Dienst
    • #安装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
        }
      }
      ...........................................................

      5.4. Greifen Sie weiterhin über die virtuelle IP auf den Dienst zu
  • http://192.168.80.100/session- redis-demo/

6.keepalived+nginx-Integration

Anweisungen: Schreiben Sie ein Nginx-Daemon-Skript, um den Keepalived-Dienst des aktuellen Knotens zu stoppen, wenn der Nginx-Dienst ausfällt. Wechselt automatisch zum Backup-Knoten.

6.1. Schreiben Sie ein Nginx-Daemon-Skript

Das obige ist der detaillierte Inhalt vonSo erreichen Sie eine hohe Verfügbarkeit von Keepalived + Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen