VIPの転送を実現keepalivedのもとに、LVS、nginxの高可用性

VIPの転送を実現keepalivedのもとに、LVS、nginxの高可用性

A、keepalivedの高可用性クラスタソリューション

二、VRRP有限状態マシン

第三に、使用はVIPからの切り替えを実現keepalivedの

第四には、カスタム通知を状態遷移実装します

第五に、負荷分散を達成するために

6:高可用性を実現するnginxの

A、keepalivedの高可用性クラスタソリューション

183501583.png

オリジナルの出生IPVSは自動的に、自分のipvsadmのコマンド生成規則をすることができます呼び出すだけでなく、ルールIPVSマスターノードのVIPを「引き継ぐ」ことができkeepalivedの、RealServerのバックエンドでは、マスタノード以外の情報を受け取った後、高い可用性を提供しますノードからのアプリケーションは、顧客サービスに進みます。また、テストのないRealServerのバックエンドの健康状態を有効にします。

一つのノード上のkeepalivedの開始後、マスター主プロセスが生成され、メイン処理は、VRRPスタック(VRRPプロトコルを達成する)チェッカー(ヘルスチェックは、RealServerのバックエンド検出をIPVS)が二つのサブプロセスを生成します

二、VRRP有限状態マシン

183601870.png

初期状態は、次に優先度の高い、MASTERに変換され、他のノードと同様に、その優先度情報、に通知を送信、BACKUPのとき両側後VRRPノードは、まだ始まったばかり、状態遷移を実装し始めていますそうでない場合、またはBACKUP、状態のこの時間はユーザーのためのサービスを提供し、マスターノードでサービスを開始するには、ノードがハングアップした場合、そのバックアップに変換、優先度が低減され、優先順位を上昇、別のノードMASTERに変換、サービスは、このノードから始まり、VIP、VMACは、ユーザーにサービスを提供し、ノードに転送されます

実験環境:

バージョンのWebホスティング:

CentOS6.4-i686の

二つのノード:

node1.limian.com 172.16.6.1

node2.limian.com 172.16.6.10

レディ

1、ノード:

時刻同期:

[ルート@ノード1〜]#ntpdateを172.16.0.1

インストールkeepalivedの

[ルート@ノード1〜]#yumを-y keepalivedのインストール

2、2つのノードが同じ仕事をします

第三に、使用はVIPからの切り替えを実現keepalivedの

3.1今後の修正keepalivedの設定ファイルを:

[ルート@ノード1〜]#のCDの/ etc / keepalivedの/ 
[ルート@ node1のkeepalivedの]#cpはkeepalived.conf keepalived.conf.back //設定ファイルのバックアップを与える何
[ルート@ node1のkeepalivedの]#vimの keepalived.conf

3.2グローバルステージ

{global_defs 
   メールサービスの{//定義notification_email 
        ローカルホスト@ルート//本明細書機に、受信者を定義するが、テスト用途
   } 
   notification_email_from kaadmin @ // localhostの定義された差出人、
   SMTP_SERVER定義//メールサーバ127.0.0.1 、あなたは外部アドレスを使用することはできません
   タイムアウト30 // smtp_connect_timeout 
   LVS_DEVELのROUTER_ID                        
}

VRRP段階の定義3.3

 

VI_1 {仮想ルーティング、VI_1仮想経路識別子、独自の定義の名前の//定義vrrp_instance 
    オープン状態MASTER //、ノードの優先順位が他のノードよりも高い優先度で、マスタ状態に
    インターフェースeth0 //すべての通知およびその他の情報このインターフェースeth0から出
    仮想ルーティングのvirtual_router_id 7 // ID、およびこの仮想MAC IDはまた、最後の段落の源であり、このID番号は、一般的に255以下であり、かつIDがない競合しなければならない
    優先順位100 //初期優先順位
    番号advert_int 1 //アドバタイズ
    認証{//認証機構
        AUTH_TYPEのPASS //認証タイプ
        1111 //パスワード、ランダムな文字列auth_passべき
    } 
    virtual_ipaddress {//仮想アドレス、すなわち、VIP 
        172.16.6.100    
    } 
}

私たちは、適切な変更を使用する準備ができない、あなたはノードからコピーする必要があり、ノードの構成ファイルがよく変更されたマスター

[ルート@ node1のkeepalivedの]#scpのkeepalived.conf 172.16.6.1:/etc/keepalived/

ノードへの3.4ログイン。

[ルートノード2 @〜]#CDの/ etc / keepalivedの/ 
[ルート@ node2のkeepalivedの]#Vimのkeepalived.conf 
vrrp_instance VI_1 { 
    国家//ノードからバックアップのステータスを変更し、マスターにマスターノードが、それはバックアップからノード
    インターフェースeth0を
    virtual_router_id 7 
    優先99 //優先順位を変更し、優先度の注意が少ないマスターノードがノードよりもなければならない
    advert_int。1つの
    認証{ 
        AUTH_TYPE PASS 
        AUTH_PASS 1111 
    } 
    virtual_ipaddress { 
        172.16.6.100 
    } 
}

3.5マスターノードは、サービスを開始します

[ルート@ node1のkeepalivedの]#サービスはkeepalivedのスタート
[ルート@ノード1〜]#IP addrはショー//チェックアウト私たちの定義のVIP

184053712.png

3.6は、サービスノードを開始します

[ルート@ node2のkeepalivedの]#サービスが開始keepalivedの

プライマリノードが停止した上でのサービスは、VIPはノードに見ていないだろう

[ルート@ノード2〜]のaddrには、show ip#

184225729.png

3.7プライマリノード上のサービスを開始

 

[ルート@ノード1〜]#[スタート] -サービスがkeepalivedの
[ルート@ノード1〜] //#ショーIP addrの検出結果がVIPはマスターノードに転送しました

注意:

 

あまりにもあなたの優先順位か、「ノンプリエンプティブモード」の下であれば、「プリエンプティブモード」でのデフォルトARRPの作業によって、あなたは、ノードが停止したサービスを見つけた場合、別のノードすぐにVIPとVMACは、「それを引き継ぎます」このノードがハングアップしない限り高は、サービスノードを停止し、別のノードが「グラブ」VIPとVMACませんが、2つのノードは意志「グラブ」。

 

第四には、カスタム通知を状態遷移実装します

 

4.1完全にスクリプトに頼るこの必要性

 

マスターノード

 

[ルート@ノード1〜]#のCDの/ etc / keepalivedの/ 
[ルート@ node1のkeepalivedの]#vimのnotify.sh //编写脚本
#!/ binに/ bashの
VIP = 172.16.6.100 
接触= 'ルート@ localhost'の
thisip = `ifconfigコマンドeth0の| awkの/のinet addrの:/ {$ 2印刷} '| awkの-F: ` '{$ 2印刷}' 
{)(通知
    mailsubject = "BI $のVIPのマスターにあるthisip $" 
    mailbody = "$ VIPがthisipは$浮かべVRRPトランザクション、" 
    |エコー$ mailbodyを メール-s "$ mailsubject" $接触
} 
場合には"$ 1"の
    マスター)は
        、マスタ通知
        出口0 
    ;; 
    バックアップ)
            バックアップ通知
        終了0を
    ;;
    *)
        エコー'使用法: `ベース名$ 0' {マスター|バックアップ|障害}' 
        1番出口
    ;; 
ESAC 
[ルート@ node1のkeepalivedの]#chmodの+ X notify.sh 
[ルート@ node1のkeepalivedの]#./notify.shマスター
[ルート@ node1のkeepalivedの]#メール//查看有没有收到通知
家宝Mailバージョン12.4 7/29 / 08。タイプ?助けを求めます。
"は/ var /スプール/メール/ルート":1つのメッセージ1新
> N 1ルート水曜日9月25日午前14時54 668分の18 "172.16.6.10は双方向172.16.6.100 MASにあります" 

遷移状態を通知するかどうかを確認してください

 

[ルート@ node1のkeepalivedの]#./notify.shバックアップ
[ルート@ node1のkeepalivedの]#./notify.sh障害
[ルート@ node1のkeepalivedの]#メール
家宝Mailバージョン12.4 7/29/08。タイプ?助けを求めます。
"は/ var /スプール/メール/ルート":3つのメッセージ2新
    1つのルート水曜日9月25日午後2時54分679分の19 "172.16.6.10は双方向172.16.6.100 MASにある" 
> N 2ルート水曜日9月25日14時57 18 / 668「172.16.6.10は双方向172.16.6.100 MASにある」
 N 3ルート水曜日9月25日午後02時57分668分の18「172.16.6.10は双方向172.16.6.100 MASにあります」

仕事への説明スクリプトは、構成ファイルを編集するために行きます

 

[ルート@ node1のkeepalivedの]#vimのkeepalived.conf

世界の舞台に追加

 

vrrp_script chk_mantaince_down {//手動制御スクリプト定義することができる
   スクリプトを"[[-fの/ etc / keepalivedの/下] &&終了終了。1 || 0" 
   の時間間隔間隔1つの//チェック
   重量-2 //テストが失敗した場合、 -2の優先
}

VRRPの段階で、次の行を追加します。

 

track_script {//引用定义的脚本
       chk_mantaince_down 
    } 
  "/etc/keepalived/notify.shマスター" notify_master 
   "/etc/keepalived/notify.shバックアップ" notify_backup 
   "/etc/keepalived/notify.sh障害" notify_fault

 

4.2は、別のノードにスクリプトをコピーし、

 

[ルート@ node1のkeepalivedの]#scpのnotify.sh 172.16.6.1:/etc/keepalived/

そして、同じ内容に対応する位置には、設定ファイルに追加されます

 

どちらも、サービスを再起動するノード

 

4.3マスターノードがスレーブノードになりましょう

ルート@ノード1 keepalivedの]#タッチダウン

監視することにより、直ちにノードからマスターノードになり、電子メールを受け取ることがわかっ

 

[ルート@ node1のkeepalivedの]#テール-fの/ var / log / messagesに
あなたがの/ var /スプール/メール/ルートに新しいメールを持っています

第五に、負荷分散を達成するために

 

5.1編集設定ファイル

 

[ルート@ノード1 keepalivedの]#VIM keepalived.conf 
#####負荷が#################ステージをバランス
172.16.6.100 80 {// VIPとポート指定VIRTUAL_SERVER 
    delay_loop 6 //サービスを再起動遅延、サービス実行検出何サイクル
    lb_algo RRロードバランス負荷バランスアルゴリズムは
    DRタイプはlb_kind 
    255.255.0.0マスクをnat_mask 
    0持続的な接続時間persistence_timeout 
    //プロトコルプロトコルTCP 
    後端172.16.6.11 80 {//定義real_server RealServerの属性
        重量1 
HTTP_GET {//方法定義する
            URLのURL {//検出された
              パス/ 
STATUS_CODE結果200が取得されるステータスコード// 
            } 
            接続時間CONNECT_TIMEOUT。3つの// 
            nb_get_retry 3つの//試み
            各接続を試みる前に//待機delay_before_retry 3 
        } 
} 
172.16.6.12 80 {//後端のRealServerで定義された属性real_server 
        重量1 
検出方法のHTTP_GET {//定義
            URLを{// URLの検出
              パス/ 
// 200 STATUS_CODEを取得結果のステータスコード
            } 
            接続時間CONNECT_TIMEOUT。3つの// 
            nb_get_retry 3つの//試みが
            各接続を試みる前に3 //待機をdelay_before_retry 
        } 
    } 
}

5.2、同じ修正を行ってから、ノード上の

 

5.3サービスは、コマンドipvsadmの持つルールかどうかを生成し、検出し、再起動します

 

[ルート@ node1のkeepalivedの]#サービスkeepalivedの再起動
[ルート@ node1のkeepalivedの]#ipvsadmの-L -n 
IP仮想サーバーのバージョン1.2.1(サイズ= 4096)
ProtのをlocalAddress:ポートスケジューラ旗
  - > [リモート:ポートフォワード重ActiveConn InActConn 
TCP 172.16.6.100:80 RR 
[ルート@ node1のkeepalivedの]#

しかし、なぜ我々はそれを定義するのRealServerなし2?つまり、仮想マシンを起動しなかったため、ヘルスチェックをパスしなかった、それは表示されません、我々は仮想マシンを起動するために行ってきましたし、サービスを開始しています。

 

そして、次のコマンドを実行DRモデルをロードバランシングLVS行います

 

LO #ifconfig:最大0 172.16.6.11 172.16.6.11放送ネットマスク255.255.255.255 
#route追加172.16.6.11のdevのLO -host:0 
#echo 1>は、/ proc / sys / net / IPv4の/ confに/ LO / arp_ignore 
#echo 1 >は、/ proc / sys / net / IPv4の/ confに/すべて/ arp_ignore 
#echo 2>は、/ proc / sys / net / IPv4の/ confに/すべて/ arp_announce 
#echo 2>は、/ proc / sys / net / IPv4の/ confに/ LO / arp_announce

注意:

 

1、数倍RealServerの後端部を添加してもよいが、マスタノード内の構成において適切な構成ファイルを必要とRealServerを追加するために、関連するコマンドを実行します

 

2は、keepalivedのIPVSは、負荷分散を独自のルールを追加することができますが、静的および動的な分離を達成することはできませんが、本番環境では、我々は、シーンに応じて最適なソリューションを選択する必要があります。

 

6:高可用性を実現するnginxの

 

6.1前提条件

 

両方のノードでnginxのサービスをインストールし、そして確かにhttpdを有効にしていないことを確認します

 

#Netstatの-tunlp //ポート80が占有されていないことを確認してください

 

#サービスnginxの開始

 

6.2 nginxの編集ノードの各ページ、より直感的に行うために、

 

[ルート@ノード1〜]#vimの /usr/share/nginx/html/index.html // ノード。1 
172.16.6.10 
[ルートノード2 @〜] //ノード#Vimの/usr/share/nginx/html/index.html 2 
172.16.6.1

6.3通常のアクセスを確保nginxの

 

184735882.png

 

6.4は、サービスを停止し、

 

[ルート@ node1のkeepalivedの]#vimの notify.sh // スクリプトを変更するには、nginxのサービスを監視したり、サービスの有効化または無効化することができ
################## 
ケース「$ 1 「中
    )マスター
        マスター通知
        /etc/rc.d/init.d/nginxスタート
        出口0 
    ;; 
    )バックアップを
        バックアップ通知
        /etc/rc.d/init.d/nginx STOP 
        出口0 
    ;; 
    )障害を
        障害通知
        など/ STOPの/rc.d/init.d/nginxの
        出口0 
    ;; 
################################### ###

ノード6.5同期スクリプト2

 

[ルート@ node1のkeepalivedの]#scpのnotify.sh 172.16.6.1:/etc/keepalived/

6.6プライマリノード

 

[ルート@ node1のkeepalivedの]#タッチダウン
#SS -tunl [ノード1 keepalivedの@ルート]は、80 //ポートがリッスンされていない見つけ
、[ルート@ node1のkeepalivedの]#RM -fダウン
[ルート@ node1のkeepalivedの] #SS -tunl //を80ポートは、リスニングを発見されました
オリジナルの記事は、0を発表 ウォンの賞賛0 ビュー529

おすすめ

転載: blog.csdn.net/qingdao666666/article/details/104805486
おすすめ