ホームページ  >  記事  >  バックエンド開発  >  nginx + keepalived は HA マスター/スレーブ モードを実装します

nginx + keepalived は HA マスター/スレーブ モードを実装します

WBOY
WBOYオリジナル
2016-08-08 09:22:37977ブラウズ
1. keepalived をインストールします

最新バージョンを公式ダウンロードします:

keepalived-1.2.17.tar.gz

tar -zxvf keepalived-1.2.17.tar.gz

cd keepalived-1.2.17 を解凍します。

事前にツールをインストールしてください yum install -y popt-devel 他のものは、nginx のインストール中にすでにインストールされています。

次に:

./configure
make && make install

keepalived が開始されると、デフォルトで指定されたディレクトリ内のファイルを読み取ります。サービスを使用して開始できます)

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/etc/sysconfig/keepalived /etc/ sysconfig /
chmod +x /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on
mkdir /etc/keepalived
#このディレクトリ内の設定ファイルを変更するには
cp /usr/local/ etc/ keepalived/keepalived.conf /etc/keepalived/
ln -s /usr/local/sbin/keepalived /usr/sbin/


2. nginx をインストールするには、ドキュメントを参照してください。 nginx のインストール用 (nginx 複数の Tomcat に対応)

注: nginx は 2 台のマシンにそれぞれインストールする必要があります。同時に、設定ファイル内のserver_name が対応するマシンの IP に対応している必要があります。このようにして、1 台のマシンがクラッシュした後でも、別のマシンを見つけることができます。 上流に相当するマシン。

nginx を個別に起動し、異なるアクセス方法を使用して、2 つの nginx サービスが正常かどうかをテストします。


3. keepalived を設定する (マスター/スレーブ モードを使用) この場合、仮想ホスト IP を変更するだけで済み、keepalived は自動的にローカル マシンの IP にアクセスします。

vi

/etc/keepalived/keepalived.conf

編集ファイル(マスター):

! keepalivedの設定ファイル

global_defs {
router_id nginx_master
}
#Monitoring service.NGINX mysqlなど
vrrp_スクリプト chk_nginx {
スクリプト "/usr/local/nginx/check_nginx.sh"
間隔 2
重み 2
}
vrrp_instance VI_1 {
状態 MASTER
インターフェース eth0
virtual_router_id 51
優先度 101
advert_int 1
認証 {
auth_type PASS
auth_pass 1111

virtual_ipaddress track_script


vi etc/keepalived/
keepalived.conf

編集ファイル (From):

! keepalived の設定ファイル

global_defs { router_id nginx_backup}#Monitoring service.NGINX mysql など. vrrp_script chk_nginx {

スクリプト "/usr/local/nginx/check_nginx.sh"

間隔 2

重み 2}vrrp_instance VI_1 {

状態 BACKUP

インターフェース eth0

virtual_router_id 51

ad vert_int 1
authentication {
pass 1111
}
virtual_ipaddress {
192.168.1.254
}
track_script {
chk_nginx #検出スクリプト
}
}








スクリプト

/usr/local/nginx上記で設定した /check_nginx.sh": 実行権限を変更することを忘れないでください

#!/bin/bash
if [ "$( ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
/usr/local/nginx/sbin/nginx

sleep 5if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]

thenkillall keepalivedfi

fi

4. 開始してテストします:

最初に2台のマシンでnginxを起動し、

次に2台のマシンでキープアライブを起動します

サービスキープアライブ開始(停止)

コマンドを使用します現時点でのアドレス仮想 IP バインディングを確認すると、マスターにはバインドされているがスレーブにはバインドされていないことがわかります。ホストのキープアライブをオフにすると、vip がスレーブにバインドされていることがわかります。他のマシンを使用してアクセスし、wget を使用してアクセスします。

wget http://192.168.1.254/recommend/api/recommend/p2l?userid=20003829

アクセスできるかどうかを確認し、ローカル nginx をオフにして、引き続き wget を使用して確認してくださいアクセスできるかどうか。アクセスできる場合、HA 構成は成功します。

5. キープアライブ関連パラメータの説明 (参考のみ)

 ! Configuration File for keepalived

global_defs {
   notification_email {
     admin@lvtao.net             #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的<span>sendmail</span>服务
   }
   notification_email_from  admin@lvtao.net        #设置邮件的发送地址
   smtp_server 127.0.0.1                                #设置smtp server地址
   smtp_connect_timeout 30                              #设置连接smtp server的超时时间
   router_id LVS_DEVEL                                  #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}

vrrp_instance VI_1 {
    state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
    interface eth0            #指定HA监测网络的接口
    virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    priority 100              #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
    advert_int 1              #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {          #设置验证类型和密码
        auth_type PASS        #设置验证类型,主要有PASS和AH两种
        auth_pass 1111        #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        10.0.0.148
    }
}

virtual_server 10.0.0.148 80 {      #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 6                    #设置运行情况检查时间,单位是秒
    lb_algo rr                      #设置负载调度算法,这里设置为rr,即轮询算法
    lb_kind DR                      #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
    persistence_timeout 50          #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                                    #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                                    #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作,
                                    #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
    protocol TCP                    #指定转发协议类型,有TCP和UDP两种

    real_server 10.0.0.137 80 {     #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
        weight 3                    #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                                    #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
        TCP_CHECK {                 #realserver的状态检测设置部分,单位是秒
            connect_timeout 10      #表示3秒无响应超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 80
        }
    }
    real_server 10.0.0.139 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

また、サービスの信頼性を確保するために、各ノードでシェル スクリプトを実行して、ローカル サービスが正常であるかどうかを確認する必要があります。サービス例外が検出された場合は、ローカル マシンのキープアライブを停止します。これにより、たとえば、接続が検出されなかった場合、ローカル マシンのサービス ステータスが 3 秒ごとに検出されます。場合によっては、キープアライブ インスタンスが停止します。同時に、ローカル サービスが正常であるにもかかわらず、keepalived が開始されていない場合 (障害回復後)、障害回復を達成するために keepalived が開始されます。 check_service.sh ファイルの内容

#!/bin/bash

pidfile=/var/lock/subsys/`basename $0`.pid

if [ -f $pidfile ] && [ -e /proc/` cat $pidfile` ] ; then

exit 1

fi

trap "rm -fr $pidfile ; exit 0" 1 2 3 15

echo $$ > $pidfile

maxfails=3

fails=0

success=0

while [ 1 ]

do

/usr/bin/wget --timeout=3 --tries=1 http://127.0.0.1/ -q -O /dev/null

if [$? -NE 0];; 次に

失敗 = $ [$ 失敗+1]

成功 = 0

それ以外の場合

失敗 = 0

成功 = $ [$ SUCTSS+1] とします

FI

if [ $fails -ge $maxfails ] ; then

failed=0

success=0

# keepalived が実行中であることを確認します

サービスの keepalived ステータスを実行します

if [ $? eq 0 | if [$success-gt $maxfails ] ; then

サービスキープアライブ開始

Fi

成功 = 0

Fi」

スリープ3

完了

2つのノードがこれを実行する必要がありますスクリプトを作成するには、このスクリプトを CRON ミッションに追加してください (このプログラムには、単一インスタンスの実行メカニズムが実装されています。スケジュールされたタスクを追加する目的は、スクリプトが予期せず中断された後に検出機能が失敗するのを防ぐことです:

)。ローカル サービスが 3 回連続して検出に失敗した場合は、keepalived サービスを停止してみます (keepalived が実行中の場合))

ローカル サービス接続が 3 回正常に検出されたにもかかわらず、keepalived が開始されていない場合は、起動の主要な実行ポイントがシステムログ (/var/log/messages) に記録されています

crontab -e を実行し、次の内容を追加します:

*/1 * * * * /root/check_service.sh

これで keepalived を停止しますしばらくすると、keepalived サービスが自動的に開始されます (これは、ローカル サービスの検出が正常であるためです)

しばらくすると、keepalived サービスも停止していることがわかります。その後、nginx を起動すると、keepalived も正常に起動し、正しい仮想 IP がバインドされていることがわかります。

上記では、HA マスター/スレーブ モードを実装するための nginx + keepalived について、その側面も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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