アクティブ/アクティブ構成のCentOS7でHAProxy用のPCSをセットアップしようとしています。以前にアクティブ/アクティブを実行したことがありますが、制約と依存関係グループに精通していません。
ここまでは順調ですね:
2 nodes configured
4 resources configured
Online: [ Host1 Host2 ]
Full list of resources:
Clone Set: VIPHA-clone [VIPHA] (unique)
VIPHA:0 (ocf::heartbeat:IPaddr2): Started Host2
VIPHA:1 (ocf::heartbeat:IPaddr2): Started Host1
Clone Set: haproxy-clone [haproxy]
Started: [ Host2 Host1 ]
ただし、ここで、IPがホストによって提供されるためにHAPRoxyが実行されている必要があるという制約を追加したいと思います。
pcs制約順序haproxy-clone、次にVIPHA-clone
これに伴う問題は、HAProxyが最初に開始されない限り、IPにバインドできないため、HAProxyが開始されないことです。
これを次のように設定するにはどうすればよいですか。
ヘルスチェック(つまり、haproxyプロセスの実行)が失敗した場合、PCはホスト上でIPをオフラインにしますか?
pCは、ヘルスチェック(つまり、haproxyプロセスの実行)が成功した場合にのみIPを起動しますか?
ご意見をいただければ幸いです。ありがとうございました!
Haproxy.cfgのワイルドカードをリッスンします
bind *:443
の代わりに
bind myvip:443
このようにして、ノードにVIPリソースがあるかどうかに関係なく、haproxyリソースを常に実行できます。ノードがVIPを取得すると、haproxyはすぐに応答します。
明らかな副作用は、haproxyがVIPだけでなくすべてのIPアドレスをリッスンすることです。
ポート番号が競合する場合(たとえば、別のIPまたはVIPで別の構成のポート443が必要な場合)、それをbind *:9443
として定義し、DNATの背後に配置します。
ペースメーカー/ corosyncに縛られていない場合は、以下のサービス構成ファイルを使用して、opensvc
で説明する動作を実現できます。
[DEFAULT]
id = 84327b87-13f6-4d32-b90a-a7fad87a8d92
nodes = server1 server2
flex_min_nodes = 2
topology = flex
orchestrate = ha
monitor_action = freezestop
[ip#vip]
ipname@server1 = 192.168.100.240
ipname@server2 = 192.168.100.241
ipdev = br0
monitor = true
[app#haproxy]
type = simple
start = /sbin/haproxy -f /etc/haproxy/haproxy.cfg
restart = 1
monitor = true
説明:
[DEFAULT
セクションはグローバル構成設定です:
id = ....
一意のサービスID。サービスの作成時に自動的に生成されます(svcmgr -s myservice create
、次にsvcmgr -s myservice edit config
)
nodes = server1 server2
は、2ノードを実行していることを意味しますopensvc
クラスター
flex_min_nodes = 2
サービスが少なくとも2つのインスタンスを実行することを期待していることを伝えます。この2ノードのクラスターでは、ノードごとに1つのインスタンスがあります。
topology = flex
アクティブ/アクティブサービストポロジを実行していることを指定します
orchestrate = ha
は、サービスをopensvc
デーモンによって自動的に管理する必要があることを示しています
monitor_action = freezestop
は、重要なリソースがダウンしたときの動作を強制するために使用されます(haproxyプロセスのクラッシュや強制終了など)。これが発生した場合、opensvc
デーモンが決定を下す必要があります。 3つの可能なパラメータ:
freezestop
:ローカルサービスインスタンスが停止され、フリーズ状態になります。reboot
:ノードが再起動されます。crash
:ノードがクラッシュしました。[ip#vip]
:サービスvipを宣言するために使用されます:
server1
では、IP 192.168.100.240
はサービス開始時にインターフェースbr0
で構成されます。server2
では、IP 192.168.100.241
は、サービス開始時にインターフェイスbr0
で構成されます。monitor = true
はopensvc
エージェントにこのリソースが重要であることを通知します(リソースがダウンした場合は、サービスをトリガーしますmonitor_action
)[app#haproxy]
:アプリケーションに関する説明:
type = simple
サービスが単一プロセスアプリケーション(非フォークデーモン)を管理することを指定しますstart = /sbin/haproxy -f /etc/haproxy/haproxy.cfg
は、サービスの開始時に実行するコマンドです。restart = 1
は、opensvc
デーモンに、このリソースがダウンした場合に1
時間を再起動するように指示します。monitor = true
haproxyは重要なリソースです。ダウンした場合は、前のパラメーターが原因で1回再起動を試み、失敗した場合は、monitor_action
をトリガーします。サービスはvipに依存しているため、*:443をバインドする必要はなく、サービスvipのみをバインドする必要があります。
Haproxyがダウンした場合の再起動/ストニスに関する質問については、restart = 1
に[app#haproxy]
を入力して再起動を試み、DEFAULT
セクションにmonitor_action = crash
を入力してください。このようにして、1回の再起動が試行され、これが機能しない場合、ノードがクラッシュします。
お役に立てれば。