KubernetesでWebLogicドメイン内またはスタンドアロンのいずれかでCoherenceを実行している場合は、Coherenceがクラスタを形成できるようにするための追加要件がいくつかあります。
SOA Suiteなどの一部のFusion Middleware製品ではCoherenceが使用されるため、これらの要件が適用されることに注意してください。
最初のCoherenceプロセスが開始されると、クラスタが形成されます。 次に起動するCoherenceプロセス(別のポッドなど)は、UDPを使用して上位メンバーへの接続を試行します。
このプロジェクトで提供されているサンプルを使用してCoherenceクラスタを含むWebLogicドメインを作成すると、そのクラスタは正しく構成され、形成できるようになります。追加の手動構成を行う必要はありません。
Coherenceスタンドアロン(WebLogicドメイン外)を実行している場合は、すべてのメンバーが上位メンバーを検索できるように、ユニキャストを使用するようにCoherenceを構成し、ウェル・ノウン・アドレス(WKA)を指定する必要があります。 ほとんどのKubernetesオーバーレイ・ネットワーク・プロバイダは、マルチキャストをサポートしていません。
これを行うには、次の例に示すように、coherence.wka
という名前の変数にCoherenceのウェル・ノウン・アドレスを指定します:
-Dcoherence.wka=my-cluster-service
この例では、my-cluster-service
は、そのCoherenceクラスタのすべてのメンバーを指すKubernetesサービスの名前である必要があります。
WebLogicドメイン外のKubernetesでのCoherenceの実行の詳細は、「Coherenceオペレータ・ドキュメント」を参照してください。
Coherenceクラスタを正しく形成するには、conntrack
ライブラリをインストールする必要があります。 これは、ほとんどのKubernetesディストリビューションで行われます。 クラスタが形成されない問題がある場合は、次のコマンド(または同等のコマンド)を使用して、conntrack
がインストールされていることを確認する必要があります:
$ rpm -qa | grep conntrack
libnetfilter_conntrack-1.0.6-1.el7_3.x86_64
conntrack-tools-1.4.4-4.el7.x86_64
前に示したような出力が表示されます。 そうでない場合は、オペレーティング・システムのツールを使用してconntrack
をインストールする必要があります。
一部のKubernetesディストリビューションでは、Coherenceがクラスタを形成するために必要とする一部のタイプのトラフィックをブロックするiptables
ルールが作成されます。 クラスタを形成できない場合は、次のコマンドを使用してこの問題を確認できます:
$ iptables -t nat -v -L POST_public_allow -n
Chain POST_public_allow (1 references)
pkts bytes target prot opt in out source destination
164K 11M MASQUERADE all -- * !lo 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE all -- * !lo 0.0.0.0/0 0.0.0.0/0
前述の例のような出力が表示される場合、たとえば、このチェーンのエントリが表示された場合は、それらを削除する必要があります。 次のコマンドを使用して、エントリを削除できます:
$ iptables -t nat -v -D POST_public_allow 1
このコマンドは行ごとに実行する必要があることに注意してください。 そのため、前述の例では、2回実行する必要があります。
完了したら、前のコマンドを再度実行して、出力が空のリストになったことを確認できます。
この変更を行った後、ドメインを再起動すると、Coherenceクラスタが正しく形成されます。
再起動後もiptables
の更新を永続的にするには、起動プロセス中に必要な更新を適用するsystemd
サービスを作成することをお薦めします。
次に例を示します。これは、ご使用の環境に合せて調整する必要があります:
systemd
サービスを作成します:$ echo 'Set up systemd service to fix iptables nat chain at each reboot (so Coherence will work)...'
$ mkdir -p /etc/systemd/system/
$ cat > /etc/systemd/system/fix-iptables.service << EOF
[Unit]
Description=Fix iptables
After=firewalld.service
After=docker.service
[Service]
ExecStart=/sbin/fix-iptables.sh
[Install]
WantedBy=multi-user.target
EOF
iptables
を更新するスクリプトを作成します:$ cat > /sbin/fix-iptables.sh << EOF
#!/bin/bash
echo 'Fixing iptables rules for Coherence issue...'
TIMES=$((`iptables -t nat -v -L POST_public_allow -n --line-number | wc -l` - 2))
COUNTER=1
while [ $COUNTER -le $TIMES ]; do
iptables -t nat -v -D POST_public_allow 1
((COUNTER++))
done
EOF
$ echo 'Start the systemd service to fix iptables nat chain...'
$ systemctl enable --now fix-iptables