BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Синхронизация двух cyrus-imapd-2.3.x
СообщениеДобавлено: Вт 15 сен, 2009 5:23 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 23 июл, 2008 7:38 pm
Сообщения: 199
Откуда: Москва
Доброго времени суток всем.

Имеем два хоста:
основоной - FreeBSD 7.2-STABLE amd64, cyrus-imapd-2.3.15 WITH_BDB=true WITH_REPLICATION=true
вторичный - FreeBSD 7.2-STABLE i386, cyrus-imapd-2.3.15 WITH_BDB=true WITH_REPLICATION=true

Делал как написано здесь - http://cyrusimap.web.cmu.edu/imapd/inst ... ation.html
Не заработало.

Что именно сделал я:
1. на основном и вторичном хостах в /etc/services поправил csync 2005/tcp
2. на вторичном хосте в cyrus.conf в секцию SERVICES добавил syncserver cmd="/usr/local/cyrus/bin/sync_server" listen="csync"
3. /usr/local/etc/rc.d/imapd restart
4. на основном хосте в /usr/local/etc/imapd.conf добавил
sync_host: ***.***.***.***
sync_authname: cyrus
sync_realm: cyrus
sync_password: *******
sync_log: 1
5. /usr/local/etc/rc.d/imapd restart

В логах тишина. Хоть бы ругнулся на что-нибудь.

Господа, если кто-то делал подобное, подскажите в чём может быть косяк?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср 16 сен, 2009 6:03 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 23 июл, 2008 7:38 pm
Сообщения: 199
Откуда: Москва
Удалось завести на вторичном хосте sync_server - надо было в cyrus.conf в секцию SERVICES прописать так:
syncserver cmd="sync_server" listen="csync" prefork=1
а не так, как я изначально прописал.
А после старта synсserver начал радостно гадить в лог вот такими вот сообщениями:
Код:
Sep 16 17:41:30 support syncserver[38272]: executed
Sep 16 17:43:31 support syncserver[38272]: accepted connection
Sep 16 17:43:31 support master[38273]: about to exec /usr/local/cyrus/bin/sync_server
Sep 16 17:43:31 support kernel: pid 38272 (sync_server), uid 60: exited on signal 11
Sep 16 17:43:31 support syncserver[38272]: cmdloop(): startup
Sep 16 17:43:31 support master[38008]: process 38272 exited, signaled to death by 11
Sep 16 17:43:31 support master[38008]: service syncserver pid 38272 in BUSY state: terminated abnormally

Удалось завести на основном хосте sync_client - надо было в cyrus.conf в секцию SERVICES прописать так:
syncclient cmd="sync_client -r" listen="csync" prefork=1
а в imap.conf так:
sync_repeat_interval: 10
sync_batch_size: 10
sync_host: support.spectrum.ru
sync_authname: cyrus
sync_password: *******
sync_log: 1
А после старта syncclient также радостно начал гадить в лог вот такими вот сообщениями:
Код:
Sep 16 17:47:32 mail sync_client[86352]: couldn't authenticate to backend server: generic failure

Из сообщений в логе основного хоста понятно, что syncclient не может аутентифицироваться, но вот точно не понятно чего ему не хватает?
Ещё. на вторичном хосте аутентификация в cyrus-е произходит через SASL.
testsaslauthd -u cyrus -p ***** - проходит успешно
synctest -u cyrus -m PLAIN localhost - после ввода пароля вываливается с сообщением:
Код:
S: * SASL PLAIN
S: * OK support.spectrum.ru Cyrus sync server v2.3.15
Please enter your password:
C: AUTHENTICATE PLAIN Y3lydXMAcm9vdABwRGthendvaw==
failure: prot layer failure

Вот как-то так... Буду дальше бороться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт 02 окт, 2009 11:54 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 23 июл, 2008 7:38 pm
Сообщения: 199
Откуда: Москва
Разобрался.

Огромное спасибо Олегу Горохову из Яндекса, который ответил на моё письмо в рассылочный лист info-cyrus@lists.andrew.cmu.edu и поделился оккультными знаниями в области синхронизации cyrus-imapd серверов. Ниже опишу то, как настроить синхронизацию между двумя cyrus-imapd серверами.
Описывать процесс инсталяции cyrus-imapd я не буду, т.к. если вы озадачились синхронизацией, то cyrus-imapd у вас уже установлен, а главное, во всю работает.

Первое что я сделал - это бэкап почты на основном серваке (master server).
Бэкап делал так:
1. su cyrus
2. /usr/local/cyrus/bin/ctl_mboxlist -d > /tmp/mboxlist.txt
3. exit
4. cd /data/spool
5. tar -zcf spool_imap_20091001.tar.gz imap
6. отсылаем получившейся архив и mboxlist.txt на хост, куда будет реплицироваться

Далее, идем на хост (replica server), куда будем реплицировать и поднимаем из получившегося выше бэкапа почту.
Я это делал так:
1. /usr/local/etc/rc.d/imapd stop
2. cd /backup/spool
3. tar -zxf spool_imap_20091001.tar.gz
4. cd /backup/imap
5. rm mailboxes.db
6. su cyrus
7. cat mboxlist.txt | /usr/local/cyrus/bin/ctl_mboxlist -u
8. /usr/local/cyrus/bin/reconstruct
9. /usr/local/etc/rc.d/imapd start

Небольшое описание и конфигурационные файлы хоста, куда будет происходить репликация (replica server):
FreeBSD 7.2-STABLE i386
cyrus-imapd-2.3.15 WITH_BDB=true WITH_REPLICATION=true
cyrus-sasl-2.1.23 WITH_AUTHDAEMOND=true WITH_LOGIN=true WITH_PLAIN=true WITH_CRAM=true WITH_DIGEST=true
cyrus-sasl-saslauthd-2.1.23
Всё инсталировал из портов.
Код:
/usr/local/etc/cyrus.conf
START {
   recover      cmd="ctl_cyrusdb -r"
}

SERVICES {
   imap      cmd="imapd" listen="imap" prefork=0
   sieve      cmd="timsieved" listen="sieve" prefork=0
   syncserver   cmd="sync_server" listen="csync" prefork=1 maxchild=64
}

EVENTS {
   checkpoint   cmd="ctl_cyrusdb -c" period=30
   delprune   cmd="cyr_expire -E 3" at=0400
   tlsprune   cmd="tls_prune" at=0400
}

Код:
/usr/local/etc/imapd.conf
configdirectory: /backup/imap
partition-default: /backup/spool/imap
defaultpartition: default
unixhierarchysep: no
altnamespace: yes
allowanonymouslogin: no
allowplaintext: yes
imapidresponse: yes
admins: cyrus
munge8bit: 0
rfc2046_strict: 0
sievedir: /backup/imap/sieve
sendmail: /usr/sbin/sendmail
postmaster: postmaster
annotation_db: skiplist
duplicate_db: berkeley-nosync
mboxlist_db: skiplist
ptscache_db: berkeley
seenstate_db: skiplist
subscription_db: flat
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_log_level: 7
sasl_mech_list: plain cram-md5 digest-md5 login
virtdomains: userid

#
# EOF

Код:
/etc/services
csync           2005/tcp

Код:
/etc/rc.conf
cyrus_imapd_enable="YES"
saslauthd_enable="YES"
saslauthd_flags="-a sasldb"

Небольшое описание и конфигурационные файлы хоста. откуда будет происходить репликация (master server):
FreeBSD 7.2-STABLE amd64
cyrus-imapd-2.3.15 WITH_BDB=true WITH_REPLICATION=true
cyrus-sasl-2.1.23 WITH_AUTHDAEMOND=true WITH_LOGIN=true WITH_PLAIN=true WITH_CRAM=true WITH_DIGEST=true
cyrus-sasl-saslauthd-2.1.23
Всё инсталировал из портов.
Код:
/usr/local/etc/cyrus.conf
START {
   recover      cmd="ctl_cyrusdb -r"
   syncclient      cmd="sync_client -r"
}

SERVICES {
   imap      cmd="imapd" listen="imap" prefork=0
   imaps      cmd="imapd -s" listen="imaps" prefork=0
   pop3      cmd="pop3d" listen="pop3" prefork=0
   pop3s      cmd="pop3d -s" listen="pop3s" prefork=0
   sieve      cmd="timsieved" listen="sieve" prefork=0
   lmtpunix   cmd="lmtpd" listen="/data/imap/socket/lmtp" prefork=0
   smmap      cmd="smmapd" listen="/data/imap/socket/smmap" prefork=1
}

EVENTS {
   checkpoint   cmd="ctl_cyrusdb -c" period=30
   delprune   cmd="cyr_expire -E 3" at=0400
   tlsprune   cmd="tls_prune" at=0400
}

Код:
/usr/local/etc/imapd.conf
configdirectory: /data/imap
partition-default: /data/spool/imap
defaultpartition: default
unixhierarchysep: no
altnamespace: yes
allowanonymouslogin: no
allowplaintext: yes
imapidresponse: yes
admins: cyrus
munge8bit: 0
rfc2046_strict: 0
sievedir: /data/imap/sieve
sendmail: /usr/sbin/sendmail
postmaster: postmaster
annotation_db: skiplist
duplicate_db: berkeley-nosync
mboxlist_db: skiplist
ptscache_db: berkeley
seenstate_db: skiplist
subscription_db: flat
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_log_level: 7
sasl_mech_list: plain cram-md5 digest-md5 login
tls_cert_file: /etc/ssl/imapserver.pem
tls_key_file: /etc/ssl/imapserver.pem
tls_ca_file: /etc/ssl/imapserver.pem
tls_session_timeout: 0
lmtpsocket: /data/imap/socket/lmtp
virtdomains: userid
lmtp_downcase_rcpt: 1
sync_repeat_interval: 5
sync_batch_size: 10
sync_host: ***.***.***.***
sync_authname: cyrus
sync_password: **********
sync_shutdown_file: /data/imap/socket/syncshutdown
sync_log: 1

#
# EOF

Код:
/etc/services
csync           2005/tcp

Код:
/etc/rc.conf
cyrus_imapd_enable="YES"
saslauthd_enable="YES"
saslauthd_flags="-a sasldb"

Вот и всё. Это рабочая конфигурация, ну, по крайней мере, у меня так заработало.
Ещё раз спасибо Олегу.


Последний раз редактировалось OldMan Вт 13 окт, 2009 7:45 pm, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 13 окт, 2009 6:39 pm 
Не в сети

Зарегистрирован: Вт 13 окт, 2009 6:21 pm
Сообщения: 1
Спасибо, тема интересная.
Хотелось добавить, судя по документу: Cyrus replication, для master server, в файле /usr/local/etc/cyrus.conf, для запуска sync_client используется секция START, а не SERVICES.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 13 окт, 2009 7:32 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 23 июл, 2008 7:38 pm
Сообщения: 199
Откуда: Москва
pol писал(а):
Спасибо, тема интересная.
Хотелось добавить, судя по документу: Cyrus replication, для master server, в файле /usr/local/etc/cyrus.conf, для запуска sync_client используется секция START, а не SERVICES.

Действительно. Спасибо. Поправил в конфиге на серваке - работает. Сейчас исправлю в посте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация двух cyrus-imapd-2.3.x
СообщениеДобавлено: Ср 30 авг, 2017 1:17 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 23 июл, 2008 7:38 pm
Сообщения: 199
Откуда: Москва
Всем доброго дня.

Решил обновить статью, т.к. пришлось проделать данную операцию ещё раз.
Итак, два сервака: мастер и реплика. Оба сервера FreeBSD 11, Cyrus-imapd 3.0.3. Cyrus пришлось пересобирать из портов, т.к. в пакетах он собран без поддержки репликации. Написал письмо мэйнтейнеру порта с просьбой включить по умолчанию опции порта MURDER and REPLICATION, но ответа не получил. В этот раз я не делал бекапа почты на мастере, чтобы потом перенести на реплику, как я это делал тогда, потому что объём почты у меня сейчас 650 Г.

К делу.

На обеих серверах установлены следующие пакеты:
Код:
cyrus-imapd30-3.0.3
cyrus-sasl-2.1.26_12
cyrus-sasl-saslauthd-2.1.26_3

На обеих серверах в /etc/rc.conf
Код:
cyrus_imapd_enable="YES"
saslauthd_enable="YES"
saslauthd_flags="-a sasldb"

Мастер:
Изменяем строку в /etc/services на:
Код:
csync           2005/tcp

Не забываем сделать services_mkdb -q
Конфиги Cyrus-imapd:
/usr/local/etc/cyrus.conf
Код:
START {
        recover         cmd="ctl_cyrusdb -r"
        syncclient      cmd="sync_client -r -l"
}

SERVICES {
        imap            cmd="imapd" listen="imap" prefork=0
        imaps           cmd="imapd -s" listen="imaps" prefork=1
        pop3            cmd="pop3d" listen="pop3" prefork=0
        pop3s           cmd="pop3d -s" listen="spop3" prefork=1
        managesieve     cmd="timsieved" listen="sieve" prefork=0
        lmtpunix        cmd="lmtpd" listen="/data/imap/socket/lmtp" prefork=0
        smmapunix       cmd="smmapd" listen="/data/imap/socket/smmap" prefork=1
        smmap           cmd="smmapd" listen="***.***.***.***:10026" prefork=1
}

EVENTS {
        checkpoint      cmd="ctl_cyrusdb -c" period=30
        delprune        cmd="cyr_expire -v -E 3" at=0400
        tlsprune        cmd="tls_prune" at=0400
        squatter        cmd="squatter -i" at=0100
}

DAEMON {
        idled           cmd="idled"
}

/usr/local/etc/imapd.conf
Код:
admins: cyrus
allowanonymouslogin: no
allowplaintext: yes
altnamespace: yes
annotation_db: skiplist
auditlog: 1
chatty: 0
configdirectory: /data/imap
debug: 0
defaultpartition: default
imapidresponse: yes
imapmagicplus: 0
lmtp_downcase_rcpt: 1
lmtpsocket: /data/imap/socket/lmtp
mboxlist_db: skiplist
munge8bit: 0
partition-default: /data/spool/imap
postmaster: postmaster
rfc2046_strict: 0
sasl_auxprop_plugin: sasldb
sasl_log_level: 1
sasl_mech_list: plain cram-md5 digest-md5 login
sasl_pwcheck_method: auxprop
seenstate_db: skiplist
sendmail: /usr/sbin/sendmail
sievedir: /data/imap/sieve
sync_authname: cyrus
sync_batch_size: 8192
sync_host: ***.***.***.***
sync_log: 1
sync_log_chain: 0
sync_password: ***************
sync_repeat_interval: 300
sync_shutdown_file: /data/imap/socket/syncshutdown
sync_try_imap: 0
tls_server_ca_file: /data/imap/certs/imapserver.pem
tls_server_cert: /data/imap/certs/imapserver.pem
tls_server_key: /data/imap/certs/imapserver.pem
tls_session_timeout: 1440
unixhierarchysep: no
virtdomains: userid

Реплика.
Помним про то, что в базу SASL надо добавить пользователя и пароль, те, что мы указали на мастере в sync_authname и sync_password.
Код:
saslpasswd2 -c cyrus

Изменяем строку в /etc/services на:
Код:
csync           2005/tcp

Не забываем сделать services_mkdb -q
Конфиги Cyrus-imapd:
/usr/local/etc/cyrus.conf
Код:
START {
        recover         cmd="ctl_cyrusdb -r"
}

SERVICES {
        syncserver      cmd="sync_server" listen="csync" prefork=1 maxchild=32 proto=tcp4
}

/usr/local/etc/imapd.conf
Код:
admins: cyrus
allowanonymouslogin: no
allowplaintext: yes
altnamespace: yes
auditlog: 1
chatty: 0
configdirectory: /data/imap
debug: 0
defaultpartition: default
imapidresponse: yes
imapmagicplus: 0
lmtp_downcase_rcpt: 1
lmtpsocket: /data/imap/socket/lmtp
munge8bit: 0
partition-default: /data/spool/imap
postmaster: postmaster
rfc2046_strict: 0
sasl_auxprop_plugin: sasldb
sasl_log_level: 1
sasl_mech_list: plain cram-md5 digest-md5 login
sasl_pwcheck_method: auxprop
sendmail: /usr/sbin/sendmail
sievedir: /data/imap/sieve
unixhierarchysep: no
virtdomains: userid

Перезапускаем мастер, запускаем реплику и смотрим в лог мастера tail -f /var/log/all.log | grep sync_client.
Если в логе появится что-то вроде:
Код:
Aug 29 14:18:49 mail sync_client[868]: *******.ru!user.akimenko: missing guid for record 1 -- needs 'reconstruct -G'?
Aug 29 14:18:49 mail sync_client[868]: Error in do_sync(): bailing out! Operation is not supported on mailbox
Aug 29 14:18:49 mail sync_client[868]: Processing sync log file /data/imap/sync/log-run failed: Operation is not supported on mailbox

Это говорит о том, что на этом репликация заткнулась и нужно отремонтировать этот почтовый ящик. Практика показала, что не надо упражняться с reconstruct -G, а надо сразу идти в этот ящик и удалять там файлы: cyrus.annotations, cyrus.index, cyrus.header и cyrus.cache, а cyrus.seen можно не трогать, а то у пользователя все письма в этой папке станут непрочитанными и он расстроится. После удаления запускаем реконструкцию и радуемся результату.
Командами это выглядит так (пути могут отличаться, я пишу свои):
Код:
cd  /data/spool/imap/domain/*******.ru/user/akimenko
rm cyrus.annotations cyrus.index cyrus.header cyrus.cache
su cyrus
/usr/local/cyrus/sbin/reconstruct -f user.akimenko@*******.ru
/usr/local/cyrus/sbin/squatter user.akimenko@*******.ru

Хочу сразу предупредить, что подобное делается исключительно для резервного копирования, а не для распределения нагрузки между серверами. У меня реплика догнала мастер за 6 дней, учитывая, что несколько раз затыкалась на битых и забытых ящиках. Зато вычистил кучу мусора с сервака. Нашёл забытый ящик, в котором набралось аж 39 Гиг хлама. Оба сервака живут на одном гигабитном свиче. Квоты не использую - специфика фирмы. У народа в ящиках по 30К писем и всё нужное.

P.S. К Cyrus прекрасно прикручивается веб-морда в виде Roundcube. У меня работает и востребована пользователями, только не забудьте прикрутить SSL апачу для кубика.

И да прибудет с вами сила... Админь... :D


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика