Всем доброго дня.
Решил обновить статью, т.к. пришлось проделать данную операцию ещё раз.
Итак, два сервака: мастер и реплика. Оба сервера 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 апачу для кубика.
И да прибудет с вами сила... Админь...
