Linux
RabbitMQ
RabbitMQ - Введение
RabbitMQ - Урок 1. Hello world!
RabbitMQ - Урок 2. Распределенные очереди
RabbitMQ - Урок 3. Рассылка публикаций
RabbitMQ - Урок 4. Селективная рассылка
RabbitMQ - Урок 5. Рассылка по шаблону
RabbitMQ - Урок 6. Реализация RPC шаблона
XMPP
Git
Полезные ссылки
Использование модуля mod_archive_odbc
2013-03-02
В данной статье пойдет речь о ejabberd модуле mod_archive_odbc. Этот модуль является логическим продолжением развития модулей mod_archive и mod_archive_sql, которые, в свою очередь, являются реализацией протокола расширения XEP-0136. Модуль mod_archive_sql - это улучшенный mod_archive с переносом хранилища из mnesia на PostgreSQL. В модуле mod_archive_odbc появилась поддержка работы с базой данных через драйвер odbc, поддержка репликаций, а также исправлена работа RMS фильтрации:
RMS фильтрация выполнялась после выборки всех значений из базы, удовлетворяющих запросу
Запрос к коллекции кроме того выполнял также выбрку самих сообщений, что приводило к заполнению памяти лишними данными
На сайте
автора модуля
говорится, что в версии mod_archive_odbc оба пункта исправлены.
Ниже будет рассмотрено подключение модуля mod_archive_odbc с использованием MySQL.
Установка модуля mod_archive(XEP-0136)
Для возможности использования модуля mod_archive необходимо, чтобы сервер ejabberd был установлен с поддержкой библиотеки odbc. Если вы устанавливали сервер из репозитория, то в директории установки (/usr/lib/ejabberd/ebin) проверьте наличие файлов
ejabberd_odbc.beam
ejabberd_odbc_sup.beam
В противном случае, если сервер собирается из
исходников
компиляцию необходимо выполнить с ключом --enable-odbc. На странице с исходниками даны перечень необходимого ПО и подробные инструкции по установке сервера. В кратце, если все необходимое ПО установлено, выполняем команды
$ sudo ./configure --enable-odbc
$ sudo make && make install
Далее скачиваем модули ejaaberd
отсюда
. В связи с обновлением прасширения XEP-0136, в исходниках модуля необходимо изменить namespace с http://xmpp.org/extensions/xep-0136.html#ns на urn:xmpp:archive. Для этого переходим в папку ejabberd-modules/mod_archive/tunc/srс и в файлах mod_archive_*.erl заменяем строки с определением NS_ARCHIVE_* на следующие
-define(NS_ARCHIVE, "urn:xmpp:archive").
-define(NS_ARCHIVE_AUTO, "urn:xmpp:archive:auto").
-define(NS_ARCHIVE_MANAGE, "urn:xmpp:archive:manage").
-define(NS_ARCHIVE_PREF, "urn:xmpp:archive:pref").
-define(NS_ARCHIVE_MANUAL, "urn:xmpp:archive:manual").
И собственно выполняем саму установку модуля. Для этого, находясь в директории ejabberd-modules/mod_archive/tunc, запускаем
$ ./build.sh
копируем полученные файлы *.beam из директории ejabberd-modules/mod_archive/tunc/ebin в директорию ebin с установленным ejabberd
cp ejabberd-modules/mod_archive/tunc/ebin/*.ebin /usr/lib/ejabberd/ebin/
И перезапускаем ejabberd сервер
$ sudo service ejabberd restart
Импортирование SQL дампа
Теперь необходимо импортировать таблички необходимые для работы модуля в вашу базу данных.
$ mysql -uroot -p -h192.168.130.81 < ejabberd-modules/mod_archive/trunc/src/mod_archive_odbc_mysql.sql
создать пользователя для работы с этой базой и назначить ему права
mysql> CREATE USER 'ejabberd'@'localhost' IDENTIFIED BY 'ejabberd';
mysql> GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost';
Установка odbc драйвера
Для возможности соединения сервера ejabberd с базой данныйх через odbc драйвер устанавливаем unixodbc драйвер
$ sudo aptitude install iodbc
устанавливаем MySql odbc драйвер
$ sudo aptitude install libmyodbc
Если все было сделано правильно, то при вводе команды odbcinst -j должно появится сообщение наподобие этого
unixODBC 2.2.11
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
USER DATA SOURCES..: /home/kam/.odbc.ini
В файле /etc/odbcinst.ini прописываем путь к MySQL драйверу
[MySQL]
Description = MySQL driver
Driver = /usr/lib/odbc/libmyodbc.so
Setup = /usr/lib/odbc/libodbcmyS.so
В файле /etc/odbc.ini прописываем параметры подключения к базе данных
[ejabberd]
Description = Mysql database
Driver = MySQL
Server = localhost
Database = ejabberd
UID = ejabberd
PWD = ejabberd
OPTION = 3
charset = utf8
Здесь Server - это сервер, на котором находится база данных.
Теперь соединение с базой через драйвер odbc можно протестировать следующим образом
$ odbcinst -q -s
[ejabberd]
$ odbcinst -q -d
[MySQL]
isql ejabberd
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Конфигурация ejabberd
Теперь, когда все необходимое ПО установлено, можно добавить инструкции в конфигурационный файл /etc/ejabberd/ejabberd.cfg.
{mod_archive_odbc, [{database_type, "mysql"},
{default_auto_save, true},
{enforce_default_auto_save, false},
{default_expire, infinity},
{enforce_min_expire, 0},
{enforce_max_expire, infinity},
{replication_expire, 31536000},
{session_duration, 1800},
{wipeout_interval, 86400}]},
{odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "ejabberd"}}.
{odbc_keepalive_interval, 3600}.
Возможно, что при прямом способе подключения к базе данных сервер ejabberd будет крешиться, тогда можно попробовать подключение через DSN, т.е. заменить
{odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "ejabberd"}}.
на
{odbc_server, "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"}.
Примечание
Возможно также потребуется установка модуля mysql_conn. Его можно взять в той же директории с модулями, ссылка на которую была дана в начале статьи.