web-dev-qa-db-ja.com

keepalived nopreemptオプションが機能しない

Keepalived vrrp設定でnopreemptオプションを使用して、マスターがダウンしてネットワークに再び戻ったときにバックアップノードをマスターとして実行したい。

両方のサーバーでnopreemptオプションを設定し、両方のサーバーで状態をバックアップとして設定しましたが、優先度が高いため、nopreemptは機能しません。

それを解決するためにガイドしてください?

  Master Machine: 
  ! Configuration File for keepalived
   vrrp_instance VI_1 {
   state BACKUP
   nopreempt
   interface eth0
   virtual_router_id 1
   priority 250
   advert_int 1
   virtual_ipaddress {
    192.168.1.2/24
    } 
  }

  Backup Machine :
  ! Configuration File for keepalived
   vrrp_instance VI_1 {
   state BACKUP
   nopreempt
   interface eth0
   virtual_router_id 1
   priority 200
   advert_int 1
   virtual_ipaddress {
     192.168.1.2/24
   }

}

よろしく、ベン

7
Ben

両方のサーバー状態をBACKUPに変更しました。プライマリが優先度が高く、プリエンプトがなく、どちらも同じルータIDを持っています。これでうまくいきます。

3
Lahiru

まず第一に、私はCentOS 6とkeepalived 1.2.7を使用しています(2013年2月21日)

私もnopreemptを試してみましたが、いくつかのテストの後、期待どおりに機能します。

同じVRRP優先度でマスターとバックアップを実行することは悪い考えです。バグ(AFAICT)が発生し、キープアライブされたサーバーがVIPを開始するという状況につながるためです。 http://tools.ietf.org/html/rfc5798#page-26 によると、最高のIPを持つキープアライブはとどまる/マスターになるはずです。この行動は観察できませんでした!

(再びAFAICT)nopreemptが機能することを確認する場合は、構成ファイルからステートメント「state」を削除する必要があります。設定ファイルで「state MASTER」を使用してkeepalivedが起動すると、マスターとして起動し、そのように自己をアドバタイズします=悪い。構成ファイルに「状態」ステートメントがない場合、keepalivedは状態BACKUPで開始し、vrrpを待機します。 「nopreempt」のため、最高の優先度で実行されてもMASTERにはなりません。これは、man 5 keepalived.confページとは逆であり、状態はあまり問題になりません。

Prio 255を使用したkeepalivedは、nopreemptオプションのオン/オフに関係なく常にマスターになります。

Keepalivedをテストする場合は、ファイアウォール/ NATルールをよく確認してください。 tcpdumpのようなものを実行して、vrrpアドバタイズが通過し、正しい送信者IP(他のkeepalivedからのもの、標準のgwではない)があるかどうかを確認することは常に良い考えです!これは、kvm /を使用する場合に特に当てはまります。 vrrpアドバタイズを変更するデフォルトのNATルールがあるため、qemuゲスト。

nopreemptは、状態がBACKUPのkeepalivedに対してのみ機能します。 (RTFM)keepalived(1.2.7)が実行されており、ネットワークリンクがダウンした場合、keepalivedの変更は状態FAULTになります。ネットワークリンクが戻ったとき、prioが十分に高い場合、keepalivedはMASTERになります。これがバグかどうかはわかりませんが、何とかしてpreemptが役に立たなくなります。メーリングリストに質問を送ります。

楽しんで!よろしく

ステファン・カースト

2
StefanKaerst

これは正しい解決策かもしれませんし、そうでないかもしれませんが、私にはkeepalivedサーバーが2つしかありません。

一方のサーバーが他方を横取りしたくない場合、私のような2つのサーバーのシナリオでは、一方のサーバーがもう一方のサーバーよりも優先度が高いことは問題になりません。 nopreemptを有効にし、両方のサーバーを同じ優先度に設定すると、うまくいきます。

[〜#〜]更新[〜#〜]

リクエストに応じた設定例:

vrrp_sync_group VRRP_SYNCS {
    group {
        public_http_ips
    }
}

vrrp_instance public_http_ips {
    state MASTER
    interface eth0
    virtual_router_id 18
    priority 100
    advert_int 1
    nopreempt
    virtual_ipaddress {
        192.168.0.254/24 dev eth0
    }
}

バックアップはまったく同じですが、「state BACKUP」と表示されています。

0
jwbensley

私はこれを達成するために多くの構成を試しました、そして機能する唯一のものは両方のサーバーをstate BACKUPに設定することでしたpriority 51を持つ1つのサーバー5および設定nopreempt。次に設定例を示します。

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 51
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass XXXXXXXX
    }
    virtual_ipaddress {
        192.168.69.100/28
    }
}

2番目のサーバーで優先度を50に設定するだけで、すべてが機能するはずです。

0

Vrrpスクリプトで「fall」および「rise」オプションを設定する必要があります。実行構成の例:

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 1
    fall 2
    rise 2
}

vrrp_instance VI_1 {
    interface eth0

    track_interface {
        eth0
        eth1
    }

    state BACKUP # same as other node
    priority 101 # your choice
    virtual_router_id 53
    advert_int 1
    nopreempt

    authentication {
        auth_type PASS
        auth_pass 8CHARPASS
    }

    unicast_src_ip 172.31.10.11 # other node: 172.31.10.12
    unicast_peer {
        172.31.10.12 # other node: 172.31.10.11
    }

    virtual_ipaddress {
        172.31.20.20 dev eth1
    }

    track_script {
        chk_haproxy
    }
}
0
Ramazan T.