Heim Betrieb und Instandhaltung Nginx NGINX erreicht unter Linux eine hohe Verfügbarkeit

NGINX erreicht unter Linux eine hohe Verfügbarkeit

Nov 25, 2019 pm 04:01 PM
linux nginx 高可用

NGINX erreicht unter Linux eine hohe Verfügbarkeit

1. Installieren Sie NGINX unter Linux

Unter Centos bietet die Yum-Quelle keine Nginx-Installation, Sie können dies tun switch it Beziehen und installieren Sie es mit der Yum-Source-Methode. Sie können das Installationspaket auch direkt herunterladen. Für die Ausführung der folgenden Befehle sind Root-Berechtigungen erforderlich: Installieren Sie zunächst die erforderlichen Bibliotheken (das gzip-Modul in nginx erfordert die zlib-Bibliothek, das Rewrite-Modul erfordert die pcre-Bibliothek und die SSL-Funktion erfordert die openSL-Bibliothek). ). Wählen Sie /usr/local als Installationsverzeichnis. Die folgenden spezifischen Versionsnummern ändern sich je nach den tatsächlichen Bedingungen.

1.1. Installieren Sie die PCRE-Bibliothek

$ cd /usr/local/
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
$ tar -zxvf pcre-8.36.tar.gz
$ cd pcre-8.36
$ ./configure
$ make
$ make install
Nach dem Login kopieren

./configure error (empfohlenes Lernen: nginx-Tutorial )

configure: error: You need a C++ compile
r for C++ support.
Nach dem Login kopieren

Lösung: yum install -y gccgcc-c++

1.2. Installieren Sie die zlib-Bibliothek

$ cd /usr/local/ 
$ wget http://zlib.net/zlib-1.2.8.tar.gz
$ tar -zxvf zlib-1.2.8.tar.gz
$ cd zlib-1.2.8
$ ./configure
$ make
$ make install
Nach dem Login kopieren

1.3, SSL installieren

$ cd /usr/local/
$ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
$ tar -zxvf openssl-1.0.1j.tar.gz
$ ./config
$ make
$ make install
Nach dem Login kopieren

1.3, NGINX installieren

$ cd /usr/local/
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz
$ tar -zxvf nginx-1.8.0.tar.gz
$ cd nginx-1.8.0  
$ ./configure --prefix=/usr/local/nginx
$ make
$ make install
Nach dem Login kopieren

Häufige Fehler bei der Installation:

Nginx-Startaufforderung kann libpcre.so.1-Lösung nicht finden

Wenn es ein 32-Bit-System ist

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib
Nach dem Login kopieren

Wenn es ein 64-Bit-System ist

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib64
Nach dem Login kopieren

Dann starten Sie nginx. Es ist in Ordnung

[root@lee ~]# /usr/local/webserver/nginx/sbin/nginx
Nach dem Login kopieren

1.4. Starten Sie NGINX

$ /usr/local/nginx/sbin/nginx
Nach dem Login kopieren

Öffnen Sie den Browser, um auf die IP dieses Computers zuzugreifen. Dies bedeutet, dass Nginx erfolgreich installiert und ausgeführt wurde.

2. Allgemeine Befehle von NGINX

重启:
$ /usr/local/nginx/sbin/nginx 启动命令
重启:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
测试配置文件是否正常:
$ /usr/local/nginx/sbin/nginx –t 
强制关闭:
$ pkillnginx
Nach dem Login kopieren

3. Starten Sie Nginx + Keepalived

3.1 Keepalived

Keepalived ist eine in C geschriebene kostenlose Open-Source-Software, die dem Layer-3-, Layer-4- und Layer-7-Switching-Mechanismus ähnelt. Es bietet hauptsächlich Lastausgleich (Lastausgleich) und Hochverfügbarkeit (Hochverfügbarkeit). Die Implementierung des Lastausgleichs erfordert das Virtual Service Kernel-Modul (ipvs) von Linux und hohe Verfügbarkeit erfolgt über VRRP. Das Protokoll implementiert Failover-Dienste zwischen mehreren Maschinen.

 

Das obige Bild zeigt die funktionale Architektur von Keepalived, die grob in zwei Schichten unterteilt ist: Benutzerraum und Kernelraum.

Kernelraum: Beinhaltet hauptsächlich zwei Teile: IPVS (virtueller IP-Server, der zur Realisierung des Lastausgleichs von Netzwerkdiensten verwendet wird) und NETLINK (Bereitstellung erweiterter Routing- und anderer verwandter Netzwerkfunktionen).

Userspace :

  • WatchDog: Lastüberwachungsprüfer und der Status des VRRP-Prozesses
  • VRRP Stack: Last zwischen Load Balancern FailOver, VRRP ist nicht erforderlich, wenn nur ein Lastausgleicher verwendet wird.
  • Prüfer: Verantwortlich für die Gesundheitsprüfung des realen Servers, was die Hauptfunktion von keepalived ist. Mit anderen Worten: Es kann kein VRRP geben Stack, aber eine Gesundheitsprüfung ist ein Muss.
  • IPVS-Wrapper: Der Benutzer sendet die festgelegten Regeln an den Kernel-IPVS-Code
  • Netlink Reflector: Wird zum Festlegen der VIP-Adresse von vrrp usw. verwendet.

Alle Funktionen von Keepalived werden durch die Konfiguration der Datei keepalived.conf implementiert.

3.2. Keepalived installieren

Keepalived-Adresse herunterladen: http://www.keepalived.org/download.html

Entpacken und installieren:

tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
yum install -yopensslopenssl-devel(需要安装一个软件包)
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
make&& make install
Nach dem Login kopieren

3.3. Keepalived als Linux-Systemdienst installieren

将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作:
首先创建文件夹,将keepalived配置文件进行复制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/
然后复制keepalived脚本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
可以设置开机启动:chkconfigkeepalived on,到此我们安装完毕!
Nach dem Login kopieren

3.4. Allgemeine Keepalived-Befehle

servicekeepalived start
servicekeepalived stop
Nach dem Login kopieren

4 . Keepalived-Konfiguration

4.1. Konfigurieren Sie die aktiven und Backup-Neustarts

1. Ändern Sie die Konfigurationsdatei: vim /etc / keepalived/keepalived.conf

1) Master-NGINX-Konfiguration ändern

<span style="color: #000000;">! Configuration File for keepalived
global_defs {
    router_id bhz005 ##标识节点的字符串,通常为hostname
}
## keepalived会定时执行脚本并且对脚本的执行结果进行分析,动态调整vrrp_instance的优先级。这里的权重weight 是与下面的优先级priority有关,如果执行了一次检查脚本成功,则权重会-20,也就是由100 - 20 <br/>变成了80,Master 的优先级为80 就低于了Backup的优先级90,那么会进行自动的主备切换。
如果脚本执行结果为0并且weight配置的值大于0,则优先级会相应增加。
如果脚本执行结果不为0 并且weight配置的值小于0,则优先级会相应减少。
vrrp_scriptchk_nginx {
    script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
    interval 2 ##检测时间间隔
    weight -20 ## 如果条件成立则权重减20(-20)
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
state MASTER   ## 主节点为MASTER,备份节点为BACKUP
## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth6)
interface eth6  
virtual_router_id 172  ## 虚拟路由ID号
mcast_src_ip 192.168.1.172  ## 本机ip地址
priority 100  ##优先级配置(0-254的值)
Nopreempt  ## 
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {  
auth_type PASS
auth_passbhz ## 真实生产环境下对密码进行匹配
    }

track_script {
chk_nginx
    }

virtual_ipaddress {
        192.168.1.170 ## 虚拟ip(vip),可以指定多个
    }
}</span>
Nach dem Login kopieren

2) Backup-NGINX-Konfiguration ändern

! Configuration File for keepalived

global_defs {
router_id bhz006
}

vrrp_scriptchk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}

vrrp_instance VI_1 {
state BACKUP
interface eth7
virtual_router_id 173
mcast_src_ip 192.168.1.173
priority 90 ##优先级配置
advert_int 1
authentication {
auth_type PASS
auth_passbhz
    }

track_script {
chk_nginx
    }

virtual_ipaddress {
        192.168.1.170
    }
}
Nach dem Login kopieren

3) nginx_check.sh-Skript

#!/bin/bash
A=`ps -C nginx–no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killallkeepalived
fi
fi
Nach dem Login kopieren

4) Kopieren Sie dann die Keepalived-Konfigurationsdatei des Masters in den Ordner /etc/keepalived/ des Master-Computers (172) und kopieren Sie dann die Keepalived-Konfigurationsdatei des Backups in den Ordner /etc/keepalived/ des Backup-Computers (173). .-Ordner und kopieren Sie schließlich das Skript nginx_check.sh in den Ordner /etc/keepalived/ der beiden Maschinen.

5) nginx_check.sh-Skriptautorisierung. Erteilen Sie ausführbare Berechtigungen: chmod +x /etc/keepalived/nginx_check.sh

6) Nach dem Start von nginx auf 2 Maschinen. Wir starten keepalived auf beiden Maschinen

/usr/local/nginx/sbin/nginx
servicekeepalived start
ps -ef | grepnginx
ps -ef | grepkeepalived
Nach dem Login kopieren

7) Sehen Sie sich die IP-Adressen der beiden Maschinen an. Eine virtuelle IP wird unter dem Befehl a angezeigt. Testen Sie, ohne Keepalived zu schließen, beenden Sie NGINX und beobachten Sie dann, ob es neu startet. Schalten Sie Keepalived aus, beenden Sie NGINX und prüfen Sie dann, ob es neu startet.

5. Sitzungsfreigabelösung in einem Cluster

Was verursacht Sitzungen in einem Cluster?

Aufgrund der Sitzungsspeicherung Serverseitig können Benutzer im Cluster auf verschiedene Server zugreifen, sodass Sitzungen möglicherweise nicht gemeinsam genutzt werden.

5.2, Lösung zur Sitzungsfreigabe

1)NGINX做的负载均衡可以绑定ip_hash,从而使同一个IP访问同一个服务器 ------------------该方案使得集群失去意义。

2)利用数据库同步session----------------------太过复杂

3)利用cookie同步session(保存一个session到本地,再次访问将其带到服务器端)----------------------安全性差、http请求都需要带参数增加了带宽消耗

4)使用session集群,存放到redis中(spring-session)

5.3、spring-session项目,解决session共享问题

<!--spring boot 与redis应用基本环境配置 -->
<dependency> 
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
    </dependency>
    <!--spring session 与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
    <dependency>  
    <groupId>org.springframework.session</groupId>  
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
Nach dem Login kopieren

创建SessionConfig

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
//这个类用配置redis服务器的连接
//maxInactiveIntervalInSeconds为SpringSession的过期时间(单位:秒)
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
Public class SessionConfig {    
// 冒号后的值为没有配置文件时,制动装载的默认值
    @Value("${redis.hostname:localhost}")
    String HostName;
    @Value("${redis.port:6379}")    int Port;
    @Bean
    Public JedisConnectionFactory connectionFactory() {
        JedisConnectionFactory connection = new JedisConnectionFactory();
        connection.setPort(Port);
        connection.setHostName(HostName);        return connection;
    }
}
Nach dem Login kopieren

初始化Session

//初始化Session配置Public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
  Public SessionInitializer() {
    super(SessionConfig.class);
    }
}
Nach dem Login kopieren

控制层代码

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestControllerpublic class SessionController {

    @Value("${server.port}")    
    private String PORT;

    @RequestMapping("/index")    
    public String index() {        
        return "index:" + PORT;
    }    
    /**
     * @methodDesc: 功能描述:(往session存放值)     
     */
    @RequestMapping("/setSession")    
    public String setSession(HttpServletRequest request, String sessionKey, String sessionValue) {
        HttpSession session = request.getSession(true);
        session.setAttribute(sessionKey, sessionValue);        
        return "success,port:" + PORT;
    }    
    /**
     * @methodDesc: 功能描述:(从Session获取值)     
     */
    @RequestMapping("/getSession")    
    public String getSession(HttpServletRequest request, String sessionKey) {
        HttpSession session =null;        
        try {
         session = request.getSession(false);
        } catch (Exception e) {
        e.printStackTrace();
        }
        String value=null;        
        if(session!=null){
            value = (String) session.getAttribute(sessionKey);
        }        
        return "sessionValue:" + value + ",port:" + PORT;
    }

}
Nach dem Login kopieren

 六、高并发解决方案

   业务数据库  -》 数据水平分割(分区分表分库)、读写分离

  业务应用 -》 逻辑代码优化(算法优化)、公共数据缓存

  应用服务器 -》 反向静态代理、配置优化、负载均衡(apache分发,多tomcat实例)

  系统环境 -》 JVM调优

  页面优化 -》 减少页面连接数、页面尺寸瘦身

  动态资源和静态资源分离

  CDN加速

  服务分布式部署

Das obige ist der detaillierte Inhalt vonNGINX erreicht unter Linux eine hohe Verfügbarkeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

VSCODE kann die Erweiterung nicht installieren VSCODE kann die Erweiterung nicht installieren Apr 15, 2025 pm 07:18 PM

Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

Kann VSCODE für MAC verwendet werden Kann VSCODE für MAC verwendet werden Apr 15, 2025 pm 07:36 PM

VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

Wofür ist VSCODE Wofür ist VSCODE? Wofür ist VSCODE Wofür ist VSCODE? Apr 15, 2025 pm 06:45 PM

VS Code ist der vollständige Name Visual Studio Code, der eine kostenlose und open-Source-plattformübergreifende Code-Editor und Entwicklungsumgebung von Microsoft ist. Es unterstützt eine breite Palette von Programmiersprachen und bietet Syntax -Hervorhebung, automatische Codebettel, Code -Snippets und intelligente Eingabeaufforderungen zur Verbesserung der Entwicklungseffizienz. Durch ein reiches Erweiterungs -Ökosystem können Benutzer bestimmte Bedürfnisse und Sprachen wie Debugger, Code -Formatierungs -Tools und Git -Integrationen erweitern. VS -Code enthält auch einen intuitiven Debugger, mit dem Fehler in Ihrem Code schnell gefunden und behoben werden können.

So führen Sie Java -Code in Notepad aus So führen Sie Java -Code in Notepad aus Apr 16, 2025 pm 07:39 PM

Obwohl Notepad den Java -Code nicht direkt ausführen kann, kann er durch Verwendung anderer Tools erreicht werden: Verwenden des Befehlszeilencompilers (JAVAC), um eine Bytecode -Datei (Dateiname.class) zu generieren. Verwenden Sie den Java Interpreter (Java), um Bytecode zu interpretieren, den Code auszuführen und das Ergebnis auszugeben.

Was ist der Hauptzweck von Linux? Was ist der Hauptzweck von Linux? Apr 16, 2025 am 12:19 AM

Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

VSCODE Vorheriger nächster Verknüpfungsschlüssel VSCODE Vorheriger nächster Verknüpfungsschlüssel Apr 15, 2025 pm 10:51 PM

VS Code One-Step/Nächster Schritt Verknüpfungsschlüsselnutzung: Einschritt (rückwärts): Windows/Linux: Strg ←; macOS: CMD ← Nächster Schritt (vorwärts): Windows/Linux: Strg →; macos: cmd →

So verwenden Sie VSCODE So verwenden Sie VSCODE Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCODE) ist ein plattformübergreifender, Open-Source-Editor und kostenloser Code-Editor, der von Microsoft entwickelt wurde. Es ist bekannt für seine leichte, Skalierbarkeit und Unterstützung für eine Vielzahl von Programmiersprachen. Um VSCODE zu installieren, besuchen Sie bitte die offizielle Website, um das Installateur herunterzuladen und auszuführen. Bei der Verwendung von VSCODE können Sie neue Projekte erstellen, Code bearbeiten, Code bearbeiten, Projekte navigieren, VSCODE erweitern und Einstellungen verwalten. VSCODE ist für Windows, MacOS und Linux verfügbar, unterstützt mehrere Programmiersprachen und bietet verschiedene Erweiterungen über den Marktplatz. Zu den Vorteilen zählen leicht, Skalierbarkeit, umfangreiche Sprachunterstützung, umfangreiche Funktionen und Versionen

See all articles