Как запретить ejabberd использовать мнезию

Я пытаюсь установить процедуру восстановления моей базы данных с разбившегося сервера на новый сервер. На моем сервере работает Ejabberd как сервер XMPP, и я настроил его на использование postgresql вместо mnesia — по крайней мере, я так думал.

Моя процедура выглядит примерно так: «выгрузите содержимое исходной БД, запустите новый сервер, восстановите содержимое БД с помощью psql, затем запустите систему». Однако, когда я снова пытаюсь запустить 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 используется Ejabberd, и, поскольку она не синхронизирована с базой данных PGSQL, она не может работать правильно, но, возможно, я здесь совершенно не в курсе, и мне бы хотелось получить какое-то направление.

EDIT: решена одна проблема. Поскольку я использую облако Amazon, мне нужно было жестко закодировать ERLANG_NODE, чтобы он не определялся именем хоста (которое меняется при перезагрузке). Это заставило мой ejabberd работать, но я все же хочу прекратить использовать mnesia, и мне интересно, какая часть ejabberd все еще использует его и как я могу его найти.


person Eldad Mor    schedule 03.12.2010    source источник


Ответы (3)


На прошлой неделе я лично узнал кое-что об ejabberd.

Если вы используете какую-либо другую БД, кроме mnesia, то не все запущенные вами модули будут с ней взаимодействовать.

Например, mod_admin_extra будет продолжать работать с базой данных mnesia даже после того, как вы настроите сервер для работы с postgress. Так что, если вы делаете много добавления/удаления реестра/пользователей с помощью дополнительных команд, которые предоставляет mod_admin_extra (и другие модули), то вам придется найти какой-то другой способ сделать это.

По сути, нет никакого способа заставить ejabberd вообще прекратить использование mnesia db, он всегда будет использовать его для какой-то обработки.

person SynackSA    schedule 08.03.2011

Похоже, вы пропустили один из модулей, которые нужно переименовать с _odbc на них, а именно mod_pubsub _> mod_pubsub_odbc

См. здесь

Возможно, также стоит просмотреть каталог /var/lib/ejabberd и просто посмотреть, какие там файлы DCD/DCL, поскольку, насколько я понимаю, эти файлы являются файлами db для mnesia. Затем вы можете попытаться выяснить, есть ли какие-либо другие модули, которые необходимо настроить так, чтобы они указывали на MySQL.

person SynackSA    schedule 24.02.2011
comment
Спасибо. Действительно, mod_pubsub не является odbc в моей конфигурации. Однако я не смог найти mod_pubsub_odbc в своей установке, поэтому мне интересно, моя установка устарела или я просто что-то упустил. - person Eldad Mor; 25.02.2011

В зависимости от вашего приложения велика вероятность того, что вам не нужны 90% модулей, перечисленных в вашем файле ejabberd.cfg. Самые основные:

  • mod_roster_odbc
  • mod_offline_odbc
  • mod_register

Для получения дополнительных советов по ejabber см.:

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

person nivertech    schedule 26.02.2011