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], Google Feedfetcher


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

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