web-dev-qa-db-ja.com

Pacemakerアクティブ/アクティブhaproxyロードバランシング

Haproxyを使用して、複製されたmysqlマスターサーバーの負荷を分散しています。また、Webサーバーの高可用性のために2つのロードバランサーで2つの仮想IPを使用したアクティブ/アクティブIPフェイルオーバーにHeartbeatとPacemakerを使用しています。ペースメーカーの場所を使用して、各ロードバランサーにVIPを1つずつ配置し、VIPを指すラウンドロビンDNSドメインを使用して、ロードバランサーの負荷を分散しています。これまでのところすべてが順調に見えます!

| LB1:|ラウンドロビン-> | 1.2.3.4 |ハートビートペースメーカー| Haproxy | 192.168.1.1

          |           |           |             |         |

| LB2:|ラウンドロビン-> | 5.6.7.8 |ハートビートペースメーカー| Haproxy | 192.168.1.2

crm configure show

node $id="394647e0-0a08-451f-a5bf-6c568854f8d1" lb1
node $id="9e95dc4f-8a9a-4727-af5a-40919ac902ba" lb2
primitive vip1 ocf:heartbeat:IPaddr2 \
    params ip="1.2.3.4" cidr_netmask="255.255.255.0" nic="eth0:0" \
    op monitor interval="40s" timeout="20s"
primitive vip2 ocf:heartbeat:IPaddr2 \
    params ip="5.6.7.8" cidr_netmask="255.255.255.0" nic="eth0:1" \
    op monitor interval="40s" timeout="20s"
location vip1_pref vip1 100: lb1
location vip2_pref vip2 100: lb2
property $id="cib-bootstrap-options" \
    dc-version="1.0.8-042548a451fce8400660f6031f4da6f0223dd5dd" \
    cluster-infrastructure="Heartbeat" \
    stonith-enabled="false" \
    no-quorum-policy="ignore" \
    expected-quorum-votes="1"

ロードバランサーのHaproxyが破損した場合でも、別のlbでhaproxyを使用するか、両方のvipsを動作中のhaproxylbノードに移動するようにPacemakerを構成する方法。 mysqlリクエストに応答する両方のlbsでhaproxyを実行するため、アクティブ/パッシブではなくアクティブ/アクティブ構成が必要です。

ペースメーカーで行うことは可能ですか?誰か知ってる?

どんな助けでも大歓迎です!ありがとう!

アップデート1

これは、cloneを使用した@Arek B.による素晴らしいヒントでした。ペースメーカーの構成に以下の行を追加しましたが、実際に必要なものを正確に取得できませんでした。両方のLBでhaproxyを停止することを確認しましたが、ペースメーカーによって自動的に開始されますが、永続的に停止することを確認すると(/etc/defaults/haproxy, enabled=0)、haproxyを開始できませんでした。その場合、haproxyを開始できませんでした。リソース(ipaddr2)を別の実行中のhaproxy lbに移動したい。これ以上のヒントはありますか?

primitive mysql_proxy lsb:haproxy \
        op monitor interval="10s"
clone clone_mysql_proxy mysql_proxy \
        meta clone-max="2" clone-node-max="1"
location mysql_proxy_pref1 clone_mysql_proxy 100: lb1
location mysql_proxy_pref2 clone_mysql_proxy 50: lb2
6
user53864

アクティブ-アクティブ2 * virtIPクラスターがあります

CRM構成の場合:
2つの仮想IPをprimitiveIPaddr2サービスとして使用しています
および両方のノードで実行する必要があるサービスの場合:

  1. そのためのプリミティブを作成し、次にそのIDを使用します
  2. それから「クローン」を次のように作成します。
    clone any_name_of_the_clone your_primitive_service_id \
    meta clone-max="2" clone-node-max="1"

orderを追加できます(クローンの開始後にvirt IPを開始するには-プリミティブではありません。クローンを作成した後は、その子のIDを使用しないでください)

それは機能しており、フェイルオーバーは機能しています(他のノードが失敗したときに1つのノードに2つのIPを割り当てます)。
しかし、colocationの作成方法に問題があります-つまり、サービスを制限しているということです。 サブサービスが失敗したノードでvirtIPを使用できません
サービスがダウンしていても問題ありません-クラスターはサービスを起動しますが、起動に失敗した場合(サービスの構成が壊れているなど)-クラスターはエラーを記録しますが、IPは起動します。

誰もが原因を知っていますか?
-それは悪い監視/開始/停止制御の問題ですか、それとも制約の構成の問題ですか?

編集:
'opstart'にPrimitiveオプションを追加しました:on-fail="standby"。私のサービス(クローン内の唯一のプリミティブ)がノードを開始できない場合、virtIPも失われます
これで私の問題は解決したようです。

1
Arek B.