11

同期を維持する必要があるサーバーの小さなクラスターがあります。これに関する私の最初の考えは、1 つのサーバーを「マスター」にして、redis の pub/sub 機能を使用して更新を公開し (既にストレージに redis を使用しているため)、クラスター内の他のサーバー (スレーブ) に更新をポーリングさせることでした。長時間実行されるタスク。これは、すべてを同期させるための簡単な方法のように思えましたが、「マスター」がダウンしたらどうなるかという明らかな問題について考えました。そこで、マスターが常に存在するようにするためのテクニックを調べ始め、リーダー選挙のようなアイデアについて読むようになりました。最後に、私はApache Zookeeperに出くわしました (python バインディングを通じて、" pettingzoo")、どうやら多くのフォールト トレランス ロジックを処理してくれるようです。私は自分のリーダー選択コードを書くことができるかもしれませんが、証明およびテストされたものほど優れているとは思えません。 、Zookeeper のように。

Zookeeper を使用する際の私の主な問題は、単純なものでうまくいく場合に、セットアップに不必要に追加する可能性のある別のコンポーネントにすぎないことです。誰もこの方法で redis を使用したことがありますか? または、達成しようとしているタイプの機能を取得するために使用できる他の簡単な方法はありますか?

ペッティングズーの詳細 (スライドシェア)

4

1 に答える 1

18

残念ながら、高可用性を実現する簡単な方法はありません。これは通常、セットアップとテストが難しいものです。HA を実現する方法は複数あり、物理クラスタリングと論理クラスタリングの 2 つのカテゴリに分類されます。

物理クラスタリングとは、ハードウェア、ネットワーク、および OS レベルのメカニズムを使用して HA を実現することです。Linux では、すべてのエンタープライズ ディストリビューションに付属する本格的なオープン ソース ソリューションであるPacemakerを見ることができます。アプリケーション (C) にクラスタリング機能を直接組み込みたい場合は、Corosync クラスター エンジン(Pacemaker でも使用されます) を確認することをお勧めします。商用ソフトウェアの使用を計画している場合、Veritas Cluster Serverは十分に確立された (ただし高価な) クロスプラットフォーム HA ソリューションです。

論理クラスタリングとは、特殊な分散アルゴリズム (リーダー選挙、PAXOS など) を使用して、特定の低レベルのメカニズムに依存せずに HA を実現することです。これは、Zookeeper が提供するものです。

Zookeeper は、ZAB プロトコル (PAXOS と非常によく似ています) の上に構築された、一貫性のある順序付けられた階層ストアです。これは非常に堅牢で、一部の HA 機能の実装に使用できますが、簡単ではなく、すべてのノードに JVM をインストールする必要があります。良い例として、いくつかのレシピと Netflix の優れたCuratorライブラリをご覧ください。最近では、Zookeeper は純粋な Hadoop コンテキストをはるかに超えて使用されており、IMO では、これが HA 論理インフラストラクチャを構築するための最良のソリューションです。

Redis pub/sub メカニズムは、未読メッセージが失われるため、論理クラスターを実装するには十分な信頼性がありません (pub/sub を使用したアイテムのキューイングはありません)。Redis インスタンスのコレクションの HA を実現するには、Redis Sentinelを試すことができますが、独自のソフトウェアには拡張できません。

C でプログラミングする準備ができている場合、しばしば忘れられる (しかし非常に便利な IMO になる可能性がある) HA フレームワークがBerkeleyDBに付属しています。これは非常に基本的なものですが、既製のリーダー選挙をサポートし、あらゆる環境に統合できます。ドキュメントはここここにあります。注: HA メカニズムを利用するためにデータを BerkeleyDB に保存する必要はありません (トポロジ データのみ - Zookeeper に入れるデータと同じです)。

于 2013-03-22T10:08:41.167 に答える