2

Postgres データベースを使用して ejabberd クラスターをセットアップできるかどうか知りたいですか? (mnesia DB の ejbberd クラスターのドキュメントしか見つかりませんでした)

この構成を実行しています: ejabberd 2.1.2 (ubuntu パッケージ) Postgres 8.4

4

1 に答える 1

19

ejabberd は他の erlang アプリケーションと同様です。ejabberd をクラスタ化する方法を理解するには、いくつかの erlang クラスタリングの基礎が必要です。mnesia を使用したクラスタリングのセットアップに関するドキュメントしか見つからなかった理由は、いくつかのモジュールを postgres で動作するように構成している場合でも、多くの ejabberd に mnesia を使用しているためです。

Mnesia は、コア セッションとルーティング情報を格納するために使用されます。この情報は、ネイティブの erlang データ形式でクラスター内のどこでも利用できる必要があるため、mnesia を使用します。また、Mnesia は他の mnesia ノードに関する情報をスキーマ テーブルに保持します。これにより、ノードは起動時に他のクラスター メンバーが誰であるかを記憶できます。

ejabberd クラスターを形成する場合でも、次の手順に従って mnesia クラスター関係を形成する必要があります。net_adm:ping('ejabberd@node1') が ejabberd@node2 ノードから機能するように erlang Cookie を既に作成しており、両方のノードに同じ ejabberd.cfg があると想定しています。

  1. /etc/init.d/ejabberctl live新しいノードを「ライブ」モードで開始します。
  2. application:stop(ejabberd).ejabberd アプリケーションを停止します。
  3. mnesia:stop().mnesia アプリケーションを停止します。
  4. mnesia:delete_schema([node()]).ローカル ノードでスキーマを削除します。これにより、ノードがクリーンな状態になり、mnesia ベースのクラスターに参加する準備が整います。
  5. mnesia:start().空でクリーンな mnesia インスタンスを開始します。Mnesia は、次のステップで参加するように依頼したときに、最初の ejabberd ノードによって提供されるテーブル情報を受け入れることができる状態になりました。
  6. mnesia:change_config(extra_db_nodes,['ejabberd@node1']).新しい ejabberd ノードに、そのクラスタ ネイバーを見つける場所を伝えます。
  7. mnesia:change_table_copy_type(schema,node(),disc_copies).「スキーマ」テーブルのローカル コピーを保持することにより、ノードの再起動後も新しいクラスター ネイバーを記憶するように mnesia に指示します。
  8. application:start(ejabberd).ejabberd アプリケーションを開始して、実際に必要な mnesia テーブルのコピーをすべて作成します。
  9. q().erlang vm を終了し、再起動してクラスターが適切に形成されていることを確認します。クラスターのステータスを検証するときはmnesia:info().、running_db_nodes の値を呼び出して確認します。

あなたの質問が PostgreSQL でのクラスタリングに関するものであるのに、なぜ私がそのようなことをしたのか不思議に思われるかもしれません。アプリケーションの状態が mnesia でクラスタリングされたままであるため、ejabberd で PostgreSQL とのクラスタリングのようなものがないためです。ユーザーやオフライン メッセージなどのストレージ バックエンドとして Postgres を使用し、まだ mnesia でクラスタリングしている場合、Postgres を特定のサービスのデータストアとして使用することになります。ejabberd クラスタリングで目にするほとんどのガイドが記憶喪失に対処するだけで、他のデータベース バックエンドについて言及していないのはこのためです。

使用する SQL データベースの詳細は、ejabberd.cfg ファイルの問題です。これは、ejabberd クラスタリング ガイドのほとんどの作成者にとって当然の結論です。

于 2012-02-01T19:13:03.260 に答える