負荷を分散する別の方法について説明したいと思います。 PacemakerとIPaddr(リソースエージェント)およびアクティブ/パッシブクラスター用の設定については、すでに多くの情報がありますが、このモジュールを使用した本格的なアクティブ/アクティブクラスターの編成に関する情報はほとんど見つかりませんでした。 この状況を修正しようとします。
まず、このようなバランス調整方法がどのように優れているかについて詳しく説明します。
- 外部バランサーの欠如 -クラスター内のすべてのノードで、1つの共通仮想IPアドレスが構成されます。 すべての要求がそれに送信されます。 ノードは、このアドレスへの要求にランダムに応答し、ノード間の合意によって応答します。
- 高可用性 -あるノードがドロップすると、その責任は別のノードに引き継がれます。
- 簡単なセットアップ -セットアップはわずか3〜5チームで行われます。
入力データ
記事の冒頭の写真を見てみましょう。次のデバイスが表示されます。
- ゲートウェイ -IP:192.168.100.1
- HostA -IP:192.168.100.101
- HostB -IP:192.168.100.102
- HostC -IP:192.168.100.103
クライアントはゲートウェイの外部アドレスに連絡し、すべての要求をクラスターの3つのノードすべてで構成される仮想IP 192.168.100.100にリダイレクトします。
準備する
まず、すべてのノードが単一のホスト名を使用して相互にアクセスできることを確認する必要があります。信頼性のために、ノードのアドレスを/etc/hosts
にすぐに追加することをお勧めし/etc/hosts
。
192.168.100.101 hostA 192.168.100.102 hostB 192.168.100.103 hostC
必要なすべてのパッケージをインストールします。
yum install pcs pacemaker corosync #CentOS, RHEL apt-get install pcs pacemaker corosync #Ubuntu, Debian
pcsがhacluster
と、 hacluster
ユーザーが作成hacluster
ます。パスワードを設定してみましょう。
echo CHANGEME | passwd --stdin hacluster
1つのノードでさらに操作が実行されます。
認証を構成します。
pcs cluster auth HostA HostB HostC -u hacluster -p CHANGEME --force
3つのノードの「クラスター」クラスターを作成して起動します。
pcs cluster setup --force --name Cluster hostA hostB hostC pcs cluster start --all
結果を見てみましょう:
pcs cluster status
Cluster Status: Last updated: Thu Jan 19 12:11:49 2017 Last change: Tue Jan 17 21:19:05 2017 by hacluster via crmd on hostA Stack: corosync Current DC: hostA (version 1.1.14-70404b0) - partition with quorum 3 nodes and 0 resources configured Online: [ hostA hostB hostC ] PCSD Status: hostA: Online hostB: Online hostC: Online
彼のおかげで、いくつかのステップはLelik13aから取られました。
特定のケースでは、クォーラムもストニスもクラスタに必要ないため、両方を安全に無効にできます。
pcs property set no-quorum-policy=ignore pcs property set stonith-enabled=false
将来、必要なリソースがある場合は、 Silvarの 記事を参照できます。
MACアドレスについて一言
開始する前に、すべてのノードが要求に応じて同じIPと同じMACアドレスで構成され、それらに交互に回答することを理解する必要があります。
問題は、各スイッチが、動作中に各MACアドレスが特定の物理ポートに関連付けられている独自のスイッチングテーブルをコンパイルするように機能することです。 スイッチングテーブルは自動的にコンパイルされ、「不要な」L2パケットからネットワークをオフロードします。
そのため、mac-addressがスイッチングテーブルにある場合、パケットは1つのポートにのみ送信され、このmac-addressはそれに割り当てられます。
残念ながら、これは私たちには適していないため、クラスター内のすべてのホストがこれらすべてのパケットを同時に「見る」ようにする必要があります。 そうしないと、この回路は機能しません。
まず、使用するMACアドレスがマルチキャストアドレスであることを確認する必要があります。 つまり、範囲は01:00:5E:00:00:00
01:00:5E:7F:FF:FF
です。 このようなアドレスのパケットを受信すると、スイッチは送信元ポートを除く他のすべてのポートにパケットを送信します。 さらに、一部の管理スイッチでは、特定のMACアドレスに対して複数のポートを構成および定義できます。
また、スイッチでサポートされている場合、ホストからのarp応答をブロックする可能性があるため、 ダイナミックARPインスペクション機能を無効にする必要があります。
iPadリソースの構成
だから、私たちは最も興味深いことになりました。
現在、クローン作成をサポートするiPadには2つのバージョンがあります。
IPaddr2 (
ocf:heartbeat:IPaddr2
)-仮想IPアドレスを作成および操作するための標準リソースエージェント。 通常、標準のresource-agents
パッケージと共にインストールされます。
- IPaddr3 (
ocf:percona:IPaddr3
)ocf:percona:IPaddr3
の改良バージョン。
このバージョンには、クローンモードで動作するように修正された修正が含まれています。
個別のインストールが必要です。
IPaadr3をインストールするには、各ホストで次のコマンドを実行します。
curl --create-dirs -o /usr/lib/ocf/resource.d/percona/IPaddr3 \ https://raw.githubusercontent.com/percona/percona-pacemaker-agents/master/agents/IPaddr3 chmod u+x /usr/lib/ocf/resource.d/percona/IPaddr
1つのノードでさらに操作が実行されます。
仮想IPアドレスのリソースを作成します。
pcs resource create ClusterIP ocf:percona:IPaddr3 \ params ip="192.168.100.100" cidr_netmask="24" nic="eth0" clusterip_hash="sourceip-sourceport" \ op monitor interval="10s"
clusterip_hash-ここでは、要求の配信の希望するタイプを指定する必要があります。
次の3つのオプションがあります。
-
sourceip
送信元IPアドレスのみによる配信。これにより、同じ送信元からのすべての要求が常に同じホストに送信されます。 -
sourceip-sourceport
送信元IPアドレスと発信ポートによる配布。 新しい接続はそれぞれ新しいホストに送られます。 最適なオプション。 -
sourceip-sourceport-destport
発信ポートと宛先ポートのソースIPアドレスによる配布。 最適な配布を提供します。異なるポートで複数のサービスを実行している場合は重要です。
IPaddr2には、マルチキャスト範囲のMACアドレスでパラメーターmac=01:00:5E:XX:XX:XX
を指定する必要があります。 IPadr3は自動的にインストールします。
次に、リソースのクローンを作成します。
pcs resource clone ClusterIP \ meta clone-max=3 clone-node-max=3 globally-unique=true
このアクションにより、 iptables
次のルールが作成されます。
Chain INPUT (policy ACCEPT) target prot opt source destination all -- anywhere 192.168.100.100 CLUSTERIP hashmode=sourceip-sourceport clustermac=01:00:5E:21:E3:0B total_nodes=3 local_node=1 hash_init=0
ご覧のとおり、ここではCLUSTERIP
モジュールが使用されています。
次のように機能します。
すべてのパケットは3つのノードに到着しますが、3つのLinuxカーネルはすべて、パケットを受信するノードの数を知っており、3つのカーネルはすべて単一のルールに従って受信したパケットに番号を付け、合計ノードとそのノード番号の数を知って、各サーバーはパケットの一部のみ、残りのパケットを処理しますサーバーによって無視されます-それらは他のサーバーによって処理されます。
もう一度クラスターを見てみましょう。
pcs cluster status
Cluster Status: Cluster name: cluster Last updated: Tue Jan 24 19:38:41 2017 Last change: Tue Jan 24 19:25:44 2017 by hacluster via crmd on hostA Stack: corosync Current DC: hostA (version 1.1.14-70404b0) - partition with quorum 3 nodes and 0 resources configured Online: [ hostA hostB hostC ] Full list of resources: Clone Set: ClusterIP-clone [ClusterIP-test] (unique) ClusterIP:0 (ocf:percona:IPaddr3): Started hostA ClusterIP:1 (ocf:percona:IPaddr3): Started hostB ClusterIP:2 (ocf:percona:IPaddr3): Started hostC PCSD Status: hostA: Online hostB: Online hostC: Online
IPアドレスが正常に開始されました。 外部から連絡を取ります。
すべてが正常に機能する場合、この設定では完了と見なすことができます。