高可用性のためのbeanstalkdの複製


15

タイトルがすべてを語っています。

beanstalkサーバーがダウンした場合に他のスレーブが引き継ぐことができるようにbeanstalkdを複製する方法を知っている人はいますか?

私が考えたアプローチの1つを次に示します。beanstalkに(-bを使用して)binlogを共有場所に書き込み、プライマリサーバーで障害が発生した場合にセカンダリサーバーまたはバックアップサーバーでbeanstalkdを起動させることができます。

しかし、もっと良い方法があるはずです。

回答:


5

:それはビンログ介してディスクに書き込みを行っているので、私はあなたがMySQLが通常行う管理者のと似たような行うことができると思うだろうハートビートを / wのDRBD例えば、ここに)。

ただし、前回ハートビートを使用しようとしたとき、ノード間の非マルチキャストチェックはサポートされていませんでした。つまり、クラウド/ VPSインフラストラクチャ(AWS、Linode、Slicehostなど)で実行することはほぼ不可能でした。実際、ほとんどのクラスタリングサービスはマルチキャストを使用しています。これはもはや当てはまらないかもしれませんが、注意する必要があります。keepalivedを使用してIPベースのフェールオーバーを提供できる場合があります。これはマルチキャストのみをサポートしますが、ユニキャストサポート追加するために Willy Tarreau(HAProxyの著者)を介して利用可能なパッチがあります。Linode VPSサーバーのペアでこれを個人的にテストしましたが、マスターサーバーに障害が発生した場合、keepalivedは共有IPアドレスをフェイルオーバーできます。

おそらく最適ではない可能性のあることの1つは、多数のbeanstalkdサーバーにジョブを書き込むことです(パーティション分割とも呼ばれます)。それらのいずれかがダウンした場合、アプリにこれを検出させ、代わりに他のインスタンスに書き込みます。ワーカーは、beanstalkdの各インスタンスをインテリジェントにポーリングし、デッドインスタンスを無視できるようにする必要があります。binloggingしているので、インスタンスを再起動するのはインスタンスを再起動するのと同じくらい簡単で、アプリ/ワーカーはこれを検出して通常どおり続行します(そして新しく開始されたインスタンスでジョブの処理を開始します)。私は明らかにプロセスを単純化していますが、それはそれを処理するもう1つの方法です。


1
Corosyncはユニキャストをサポートし、Redhatベースのディストリビューションのデフォルトのクラスタリングツールです。
テレンス・ジョンソン

ありがとう、Corosyncを知らなかった。将来のプロジェクトのために心に留めておきます。
アンドリュー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.