ホームページ 運用・保守 Nginx NGINX は Linux で高可用性を実現します

NGINX は Linux で高可用性を実現します

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

NGINX は Linux で高可用性を実現します

1. Linux に NGINX をインストールする

Centos では、yum ソースでは nginx のインストールが提供されません。 switch yum ソースメソッドを使用して取得してインストールします。インストール パッケージを直接ダウンロードすることもできます。次のコマンドを実行するには root 権限が必要です: まず、必要なライブラリをインストールします (nginx の gzip モジュールには zlib ライブラリが必要で、書き換えモジュールには pcre ライブラリが必要で、ssl 関数には openssl ライブラリが必要です) )。インストールディレクトリとして /usr/local を選択します。以下の具体的なバージョン番号は実際の状況に応じて変わります。

1.1. PCRE ライブラリをインストールします

$ 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
ログイン後にコピー

./エラー報告を設定します(推奨学習: nginx チュートリアル )

configure: error: You need a C++ compile
r for C++ support.
ログイン後にコピー

解決策: yum install -y gccgcc-c

1.2. zlib ライブラリをインストールします

$ 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
ログイン後にコピー

1.3. ssl

$ 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
ログイン後にコピー

1.3. NGINX のインストール

$ 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
ログイン後にコピー

一般的なインストール エラー:

Nginx 起動プロンプトで libpcre.so.1 ソリューションが見つかりません

32 ビット システムの場合

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib
ログイン後にコピー

64 ビット システムの場合

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib64
ログイン後にコピー

次に、nginx を起動します。 OK

[root@lee ~]# /usr/local/webserver/nginx/sbin/nginx
ログイン後にコピー

1.4. NGINX を起動します

$ /usr/local/nginx/sbin/nginx
ログイン後にコピー

ブラウザを開いて、このマシンの IP にアクセスします。ブラウザに「Welcome to nginx!」と表示されれば、は、Nginx がインストールされ、正常に実行されたことを意味します。

2. 一般的な 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
ログイン後にコピー

3. Nginx Keepalived の開始

3.1. Keepalived とは

Keepalived は、レイヤー 3、レイヤー 4、および 7 スイッチング メカニズムと同様の C で書かれた無料のオープンソース ソフトウェアで、通常話題になるレイヤー 3、レイヤー 4、レイヤー 7 スイッチの機能を備えています。主に loadbalancing (負荷分散) 機能と high-availability (高可用性) 機能を提供します。負荷分散の実装には Linux の仮想サービス カーネル モジュール (ipvs) に依存する必要がありますが、高可用性は実現できません。 VRRP 経由 このプロトコルは、複数のマシン間のフェイルオーバー サービスを実装します。

上の図はKeepalivedの機能アーキテクチャで、大きくユーザー空間とカーネル空間の2層に分かれています。

カーネル空間: 主に、IPVS (ネットワーク サービスの負荷分散を実現するために使用される IP 仮想サーバー) と NETLINK (高度なルーティングおよびその他の関連ネットワーク機能を提供する) の 2 つの部分が含まれます。

ユーザースペース:

  • WatchDog: 負荷監視チェッカーと VRRP プロセスのステータス
  • VRRP スタック: ロードバランサー間の負荷フェイルオーバー, ロード イコライザーを 1 つだけ使用する場合、VRRP は必要ありません。
  • チェッカ: keepalived の主な機能である実サーバーのヘルス チェックを担当します。言い換えれば、VRRP はあり得ません 積み重ねですが、ヘルスチェックは必須です。
  • IPVS ラッパー: ユーザーは、設定したルールをカーネルの ipvs コードに送信します。
  • ネットリンク リフレクター: vrrp の vip アドレスなどを設定するために使用されます。

Keepalived のすべての機能は、keepalived.conf ファイルを構成することによって実装されます。

3.2. Keepalived のインストール

keepalived アドレスをダウンロードします: http://www.keepalived.org/download.html

解凍してインストールします:

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
ログイン後にコピー

3.3. Linux システム サービスとして Keepalived をインストールします

将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,到此我们安装完毕!
ログイン後にコピー

3.4. 一般的な Keepalived コマンド

servicekeepalived start
servicekeepalived stop
ログイン後にコピー

4 . Keepalived 設定

4.1. NGINX のアクティブおよびバックアップの自動再起動を設定します

1. 設定ファイルを変更します:vim /etc / keepalived/keepalived.conf

1) マスター NGINX 構成の変更

<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>
ログイン後にコピー

2) バックアップ NGINX 構成の変更

! 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
    }
}
ログイン後にコピー

3) nginx_check.sh スクリプト

#!/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
ログイン後にコピー

4) 次に、マスターの keepalived 構成ファイルをマスター マシンの /etc/keepalived/ フォルダーにコピーし (172)、次にバックアップの keepalived 構成ファイルをバックアップ マシンの /etc/keepalived/ にコピーします (173) . フォルダーに移動し、最後に nginx_check.sh スクリプトを 2 つのマシンの /etc/keepalived/ フォルダーにコピーします。

5) nginx_check.sh スクリプトの承認。実行可能権限を付与します: chmod x /etc/keepalived/nginx_check.sh

6) 2 台のマシンで nginx を起動した後。両方のマシンで keepalived

/usr/local/nginx/sbin/nginx
servicekeepalived start
ps -ef | grepnginx
ps -ef | grepkeepalived
ログイン後にコピー

7 を開始しましょう。2 台のマシンの IP アドレスを見てください。コマンドの下に仮想 IP が表示されます。 Keepalived を閉じずにテストし、NGINX を強制終了して、再起動するかどうかを観察します。 Keepalived をオフにして NGINX を終了し、再起動するかどうかを確認します。

#5. クラスター状況におけるセッション共有ソリューション

5.1. クラスター状況におけるセッションの原因は何ですか?

セッション ストレージが原因です。サーバー側では、クラスター内のユーザーが異なるサーバーにアクセスする可能性があるため、セッションが共有されない可能性があります。

5.2、セッション共有ソリューション

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>
ログイン後にコピー

创建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;
    }
}
ログイン後にコピー

初始化Session

//初始化Session配置Public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
  Public SessionInitializer() {
    super(SessionConfig.class);
    }
}
ログイン後にコピー

控制层代码

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;
    }

}
ログイン後にコピー

 六、高并发解决方案

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

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

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

  系统环境 -》 JVM调优

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

  动态资源和静态资源分离

  CDN加速

  服务分布式部署

以上がNGINX は Linux で高可用性を実現しますの詳細内容です。詳細については、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)

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

Apr 16, 2025 pm 07:39 PM

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

vscodeはMacに使用できますか vscodeはMacに使用できますか Apr 15, 2025 pm 07:36 PM

VSコードはMacで利用できます。強力な拡張機能、GIT統合、ターミナル、デバッガーがあり、豊富なセットアップオプションも提供しています。ただし、特に大規模なプロジェクトまたは非常に専門的な開発の場合、コードと機能的な制限がある場合があります。

Linuxアーキテクチャ:5つの基本コンポーネントを発表します Linuxアーキテクチャ:5つの基本コンポーネントを発表します Apr 20, 2025 am 12:04 AM

Linuxシステムの5つの基本コンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。Systemユーティリティ、4。グラフィカルユーザーインターフェイス、5。アプリケーション。カーネルはハードウェアリソースを管理し、システムライブラリは事前コンパイルされた機能を提供し、システムユーティリティはシステム管理に使用され、GUIは視覚的な相互作用を提供し、アプリケーションはこれらのコンポーネントを使用して機能を実装します。

vscodeの使用方法 vscodeの使用方法 Apr 15, 2025 pm 11:21 PM

Visual Studio Code(VSCODE)は、Microsoftが開発したクロスプラットフォーム、オープンソース、および無料のコードエディターです。軽量、スケーラビリティ、および幅広いプログラミング言語のサポートで知られています。 VSCODEをインストールするには、公式Webサイトにアクセスして、インストーラーをダウンロードして実行してください。 VSCODEを使用する場合、新しいプロジェクトを作成し、コードを編集し、コードをデバッグし、プロジェクトをナビゲートし、VSCODEを展開し、設定を管理できます。 VSCODEは、Windows、MacOS、Linuxで利用でき、複数のプログラミング言語をサポートし、マーケットプレイスを通じてさまざまな拡張機能を提供します。その利点には、軽量、スケーラビリティ、広範な言語サポート、豊富な機能とバージョンが含まれます

GITの倉庫アドレスを確認する方法 GITの倉庫アドレスを確認する方法 Apr 17, 2025 pm 01:54 PM

gitリポジトリアドレスを表示するには、次の手順を実行します。1。コマンドラインを開き、リポジトリディレクトリに移動します。 2。「git remote -v」コマンドを実行します。 3.出力と対応するアドレスでリポジトリ名を表示します。

Linuxの主な目的は何ですか? Linuxの主な目的は何ですか? Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

Laravelインストールコード Laravelインストールコード Apr 18, 2025 pm 12:30 PM

Laravelをインストールするには、これらの手順を順番に進みます。コンポーザー(MacOS/LinuxとWindows用)インストールLaravelインストーラーをインストールします。

See all articles