2

クラッシュしたサーバーから新しいサーバーにデータベースを復元する手順を確立しようとしています。私のサーバーは XMPP サーバーとして Ejabberd を実行しており、mnesia の代わりに postgresql を使用するように構成しました。

私の手順は、「元のDBの内容をダンプし、新しいサーバーを実行し、psqlを使用してDBの内容を復元してから、システムを実行する」のようなものです。ただし、Ejabberd を再度実行しようとすると、クラッシュが発生します。

=CRASH REPORT==== 3-Dec-2010::22:05:00 ===
  crasher:
    pid: <0.36.0>
    registered_name: []
    exception exit: {bad_return,{{ejabberd_app,start,[normal,[]]},
                                 {'EXIT',"Error reading Mnesia database"}}}
      in function  application_master:init/4

ここで、システムは PostgreSQL で実行されていると考えていましたが、まだ Mnesia を使用しているようです。いくつか質問があります:

  1. 記憶喪失が使用されていないことを確認するにはどうすればよいですか?
  2. すべての ejabberd アクティビティを PGSQL に転送するにはどうすればよいですか?

これは、私の ejabberd.cfg ファイルのモジュール部分です。

{modules,
 [
  {mod_adhoc,    []},
  {mod_announce, [{access, announce}]}, % requires mod_adhoc
  {mod_caps,     []},
  {mod_configure,[]}, % requires mod_adhoc
  {mod_ctlextra, []},
  {mod_disco,    []},
  {mod_irc,      []},
  {mod_last_odbc,     []},
  {mod_muc,      [
      {access, muc},
      {access_create, muc},
      {access_persistent, muc},
      {access_admin, muc_admin},
      {max_users, 500}
     ]},
  {mod_offline_odbc,  []},
  {mod_privacy_odbc,  []},
  {mod_private_odbc,  []},
  {mod_pubsub,   [ % requires mod_caps
      {access_createnode, pubsub_createnode},
      {plugins, ["default", "pep"]}
     ]},
  {mod_register, [
      {welcome_message, none},
      {access, register}
     ]},
  {mod_roster_odbc,   []},
  {mod_stats,    []},
  {mod_time,     []},
  {mod_vcard_odbc,    []},
  {mod_version,  []}
 ]}.

私は何が欠けていますか?

クラッシュの原因は mnesia DB が Ejabberd によって使用されているためだと思います.PGSQL DB と同期していないため、正しく動作しません.

編集:1つの問題が解決しました。私は Amazon クラウドを使用しているため、ERLANG_NODE をハードコーディングして、ホスト名 (再起動時に変更される) で定義されないようにする必要がありました。これで ejabberd が動作するようになりましたが、mnesia の使用をやめたいと思っています。

4

3 に答える 3

2

私は先週、ejabberdについて個人的にいくつか学びました。

mnesia以外のDBを実行している場合、実行しているすべてのモジュールが実際にDBと通信するわけではありません。

たとえば、postgressで動作するようにサーバーを構成した後でも、mod_admin_extraは引き続きmnesiadbで動作します。したがって、mod_admin_extraが提供する追加のコマンド(および他のモジュール)を介して名簿/ユーザーの追加/削除を大量に行う場合は、他の方法を見つける必要があります。

基本的に、ejabberdにmnesia dbの使用を停止させる方法はありません。常に、何らかの処理に使用されます。

于 2011-03-08T08:07:27.757 に答える
0

アプリケーションによっては、ejabberd.cfg ファイルにリストされているモジュールの 90% が不要になる可能性が高くなります。最も基本的なもの:

  • mod_roster_odbc
  • mod_offline_odbc
  • mod_register

ejabberd に関するその他のヒントについては、次を参照してください。

http://www.quora.com/What-are-some-tricks-to-scale-ejabberd

于 2011-02-26T17:41:20.723 に答える
0

_odbc で名前を変更する必要があるモジュールの 1 つ、つまり mod_pubsub _> mod_pubsub_odbc を見逃したようです

こちらをご覧ください

/var/lib/ejabberd ディレクトリを調べて、そこにある DCD/DCL ファイルを確認することも価値があるかもしれません。私が理解している限り、これらのファイルは mnesia の db ファイルです。次に、MySQL を指すように構成する必要がある他のモジュールがあるかどうかを試してみることができます。

于 2011-02-24T10:19:52.520 に答える