Тем не менее, мы успешно используем это в Carnegie
Mellon.
Этот документ предпологает, что Вы успешно установили сервер Cyrus IMAP. Этот сервер будет первым backend-сервером. Так же предпологается, что Вы знакомы с административными и повседневными операциями на сервере Cyrus IMAP и аутентификационной библиотекой SASL. Если Вы чувствуете, что знаний нехватает, то обратитесь в начало всей документации.
Эта диаграмма взаимодействие различных компонентов Cyrus Murder, она может быть полезна для представления "общей картины".
Для настройки mupdate master, Вам необходимо добавить в cyrus.conf строку наботобие приведенной ниже в раздел SERVICES:
mupdate cmd="/usr/cyrus/bin/mupdate -m" listen=3905 prefork=1Обратите внимание на опцию "-m", она запускает mupdate в master-режиме.
Вам нужно настроить хотябы "скелет" imapd.conf который определяет configdirectory, фиктивную partition-default (т.е. только для корректности конфига, такого раздела можен и не быть вообще - Прим. пер.) и admins, которые смогут аутентифицироваться на сервере. Обратите внимание на то, что slave mupdate-сервер так же, как и backend-сервера должен иметь возможность аутентифицироваться как admins на master. Вот очень простой пример imapd.conf для master-сервера:
configdirectory: /imap/conf partition-default: /tmp admins: mupdateslave1 backend1Также Вам потребуется настроить SASL для привильной аутентификации в Вашей среде.
Вам так же необходимо настроить хотябы одного пользователя/группу использующего обцию proxyservers в imapd.conf. Этот пользователь не должен быть администратором, иначе любой, кто сможет получить захватить Ваш прокси получит польный контроль над backend'ом. Пример:
admins: cyrus proxyservers: murderИмейте в виду, что создав пользователя(пользователей) дял прокси надо сделать так, чтобы они могли аутентифицироваться на backend'е.
Обратите внимание на то, что преде запуском ctl_mboxlist -mw вы должны понимать все операции которые выполнит эта команда. Так же необходимо, чтобы все ящики были уникальными во всем пространстве имен murder'а.
Если все настроенно правильно, то БД почтовых ящиков текущего хоста будет отправлена в виде дампа mupdate-master'у. Если возникнут проблемы, то наиболее вероятная проблема заключается в неправильных настройках аутентификационных параметров, или mupdate не запущен как master. Использование mupdatetest может помочь в решении некоторых проблем (эта утилита установит аутентифицированное соединение к mupdate-серверу, если сможет).Также полезно проводить повторную синхронизацию БД ящиков на backend'ах при запуске на master. Это можно реализовать добавив следующую строку в раздел START файла cyrus.conf на backend'е:
mupdatepush cmd="ctl_mboxlist -m"Это заставит осуществлять синхронизацию с mupdate-master'ом каждый раз, когда backend перезапускается, в результате содержание БД mupdate будет обнавлено содержимым с backend'а (и произведет ACTIVATE и DELETES при необходимости).
Предупреждение: Если какой-то ящик существует на двух (или более) backend-серверах, каждый раз когда один из них начнет синхронизацию базы, этот backend-сервер станет авторитетным. Хотя, это не должно случиться при нормальной операции murder'а, это возможно при создании новой БД mupdate или когда присоединяется новый backend-сервер к murder'у.
# mupdate database service - must prefork atleast 1 mupdate cmd="mupdate" listen=3905 prefork=1Обратите внимание, поскольку это thread-служба, то Вы должны запустить(prefork) по крайней мере 1 процесс для того, чтобы БД могла синхронизироваться при запуске. Иначе обслуживание подключений не начнется до тех пор, пока не будет образовано mupdate-соединение клиента со slave'ом.
Вам также неоюходимо изменить все Ваши записи imapd на proxyd, и все записи pop3d на pop3proxyd . Таким образом, Ваш раздел SERVICES будет выглядеть примерно так:
mupdate cmd="/usr/cyrus/bin/mupdate" listen=3905 prefork=1 imap cmd="proxyd" listen="imap" prefork=5 imaps cmd="proxyd -s" listen="imaps" prefork=1 pop3 cmd="pop3proxyd" listen="pop3" prefork=0 pop3s cmd="pop3proxyd -s" listen="pop3s" prefork=0 kpop cmd="pop3proxyd -k" listen="kpop" prefork=0 sieve cmd="timsieved" listen="sieve" prefork=0 lmtp cmd="lmtpproxyd" listen="/var/imap/socket/lmtp" prefork=0Заметьте, что timsieved не нуждается в прокси-демоне, протокол managesieve работает с murder'ом по направлению к backend'ам внутри.
Дополнительно, Вам могут понадобятся записи в imapd.conf с указанием пользователя и пароля для прокси (если Вы используете механизмы SASL, то это может потребоваться) на backend'ы, например, если Ваши backend'ы mail1.andrew.cmu.edu и mail2.andrew.cmu.edu с паролем foo и bar , и пользователем murder:
mail1_password: foo mail2_password: bar proxy_authname: murderЕсли Ваши SASL-механизмы не требуют имени пользователя и пароля (например KERBEROS_V4), это не требуется. Обратите внимание - мы использовали то же самое имя пользователя как и в настройке backend'а выше(строка proxyservers, файл imapd.conf ).
Кагда Вы запускаете master на frontend'е, локальная БД ящиков должна автоматически синхронизировать себя с содержанием БД на mupdate-master'е. Ваши клиенты должны подключаться к frontend'ам, а frontend'ы будут проксировать по направлению к blackend-серверам.
Согласованность в базе данных обеспечивается посредствам помещения текущего статуса backend'ов на master, и имея актуальную БД на frontend'ах (такую же, как на master'е). Начиная с ресинхронизации frontend'а на этапе запуска, простой в синхронизации не должен вызвать проблем. (Пока он функционирует - он должен продолжать получать обновления БД, при потере связи с master'ом, он попытается восстановить связь(reconnect) и ресинхронизировать базу после соединения)
При условии, что пространство имен backend-серверов оставалось дискретным (небыло ящиков расположенного на двох и более серверах), возможна ресинхронизация mupdate-master'а используя ctl_mboxlist -m. Если два сервера имеют один и тот же ящик, то говорить о гарантированной согласованности БД можно только после урегулирования этого вопроса.
На данный момент нет на 100% безошибочного способа сделать это, однако, если вы запустите команду переименования на frontend'е (точно так же, как Вы перемещаете ящики между разделами), и изменете имя раздела на имя нового backend'а, это заставит переместить ящик на указанный backend. Вы так же можете использовать следующий формат: backend.domain.com!partition для перемещения в указанный раздел (иначе будет использован раздел по-умолчанию). В cyradm, это выглядит так:
cyrus.andrew.cmu.edu> rename user.bcyrus user.bcyrus mail2.andrew.cmu.edu!u2Обратите внимание на то, что при перемещении "замеченное состояние" сохранено в пользователе, по этому, возможно, при перемещение разделяемого пользовательского ящика будут иметь место странные эффекты. Общее правило при перемещении заключается в том, что при перемещении INBOX'а перемещается полностью весь пользователь (включая все под-ящики в INBOX'е, его состояние, подписки, sieve-скрипты и т.д.). "Замеченное состояние" объединиться с "замеченным состоянием" на новом backend'е, таким образом никакие данные не бедет потеряны ("замеченное состояние" - это единственная что оснается на старом backend'е). В случае с любым другим ящиком, перемещен будет только индивидуальный ящик. Если это корневая квота, новая корневая квота будет задействована на новом сервере, но квоты могут нарушиться, т.к. каждый backend заботиться только о своих квотах.
Вообще, лучше оставить "деревья" ящиков на том сервере где они и былиr, и не двигать под-ящики и inbox'ы между серверами.
Это делается элементарно, просто настройте пустой backend-сервер и пропишите параметр mupdate_server указывающим на mupdate-master.
xxx, need to write stuff. Нет необходимости делать бэкапы на mupdate-master't или slave'ах, поскольку данные, хранящиеся на них, могут быть сгенерированы напрямую с backend'ов.