PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Redundanzlösung für Cyrus-IMAP/MySQL



z0ny
20.08.06, 21:26
Da ich momentan leider hin und wieder Ausfälle bei der Erreichbarkeit meines Servers feststelle, plane ich die Anschaffung eines Redundanzsystems. Mein derzeitiges Mailsystem basiert auf einem Cyrus-IMAP Server (Postfix als SMTPd), der seine Benutzer anhand einer MySQL Datenbank authentifiziert.

Wie lässt sich ein solches System am Besten synchronisieren? Falls es für die Datenbank keine bessere Lösung gibt, würde ich das mit einem simplen Export/rsync/Import-Skript erledigen. Der Cyrus-IMAP Dienst müsste doch theoretisch auch einfach per rsync synchronisierbar sein, wobei ich mir da gegebenenfalls Probleme mit den Mailindizes und Benutzern vorstellen könnte. Welche Verzeichnisse müssen denn zusätzlich zu den Maildateien kopiert werden? Hat jemand ein derartiges System vielleicht im Einsatz und Erfahrungen damit? Danke.

Roger Wilco
20.08.06, 22:37
Cyrus IMAP unterstützt ab Version 2.3.0 nativ Replikation (http://cyrusimap.web.cmu.edu/imapd/install-replication.html) der Mailstores. MySQL unterstützt ebenfalls Replikation (http://mysql.com/doc/refman/5.0/en/replication.html). Ich sehe also kein Problem, das gewünschte zu realisieren.

z0ny
21.08.06, 10:48
Hervorragend, genau was ich gesucht habe. Dank dir!

bla!zilla
21.08.06, 11:01
[QUOTE=Roger Wilco]Cyrus IMAP unterstützt ab Version 2.3.0 nativ Replikation (http://cyrusimap.web.cmu.edu/imapd/install-replication.html) der Mailstores. MySQL unterstützt ebenfalls Replikation (http://mysql.com/doc/refman/5.0/en/replication.html). Ich sehe also kein Problem, das gewünschte zu realisieren.[/QUOTE

Wie sieht das denn nach mit den Clients aus? Kann ich mich einfach zum Replikationsserver verbinden? Ist der Datenbestand dort read-only? Wie läuft das ab?

Roger Wilco
21.08.06, 14:38
Wie sieht das denn nach mit den Clients aus? Kann ich mich einfach zum Replikationsserver verbinden? Ist der Datenbestand dort read-only? Wie läuft das ab?
Ich nehme mir mal die Freiheit, aus der Doku zu zitieren:

The Cyrus replication engine is designed to replicate the mailstore on standalone Cyrus servers or "backend" servers in a Cyrus Murder to provide a high-availability environment. It is NOT intended to replicate "frontend" servers or the "mupdate master" in a Cyrus Murder. Note that load balancing is not possible with the current replication code, but it is intended to be supported in the future.
Darüber hinaus ist dieses (http://www-uxsup.csx.cam.ac.uk/~dpc22/cyrus/replication.html) Dokument noch interessant.

Edith sagt, URL-Tag korrigieren...

bla!zilla
21.08.06, 14:44
Ich nehme mir mal die Freiheit, aus der Doku zu zitieren:

Das habe ich auch gelesen, hat aber meine Frage nicht erfüllend beantwortet. Der von dir gepostete Link ist interessanter, vor allem folgender Hinweis:



Rolling replication of updates in real time to independent hot spare systems (eventually at a remote site) for disaster recovery.


Heißt für mich: Im Fehlerfall melden sich die Leute am zweiten Server an und arbeiten dort weiter, bzw. wenn die Replication in beide Richtungen funktioniert, dann kann man auch einen Loadbalancer bauen.

Roger Wilco
21.08.06, 14:50
Zunächst eines vorneweg: Ich setze die Replikationsfähigkeit von Cyrus nicht ein, kann daher auch nur schreiben, was ich aus der Doku herauslese.

Heißt für mich: Im Fehlerfall melden sich die Leute am zweiten Server an und arbeiten dort weiter, bzw. wenn die Replication in beide Richtungen funktioniert, dann kann man auch einen Loadbalancer bauen.
Soweit ich das verstanden habe, kann der Slave bei einem Ausfall des Masters schnell als neuer Master eingesetzt werden. Dass beide Server gleichzeitig Master und Slave sind (also eine beidseitige Replikation), ist aber nicht möglich. Für das Load-Balancing ist außerdem Cyrus Murder zuständig, aber das funktioniert wohl laut Doku noch nicht richtig mit der Replikation.

bla!zilla
21.08.06, 14:55
Ich sehe schon, ich werde das mal teste müssen. :)

Roger Wilco
21.08.06, 14:55
Ich sehe schon, ich werde das mal teste müssen. :)
Fühle dich hiermit aufgefordert, uns das Ergebnis mitzuteilen. :D

bla!zilla
21.08.06, 15:07
Erstmal zwei performate VMware Gäste auftreiben. :)

Roger Wilco
23.08.06, 14:14
Ich habe ein wenig Zeit gefunden, um mit der neuen Cyrus IMAP Version (2.3.7) und dem Replikationsfeature herumzuspielen.

Das Replikationssetup an sich ist recht schnell und stressfrei eingerichtet (http://cyrusimap.web.cmu.edu/imapd/install-replication.html). Sobald die Cyrus-Instanzen gestartet wurden, werden die Mailstores (bei Rolling Replication) synchronisiert. Die Benutzerdatenbanken müssen separat repliziert werden, da diese nicht Teil der Cyrus-Datenbank sind (z. B. wenn die Benutzerdaten in einem LDAP-Verzeichnis oder einer *SQL-Datenbank liegen).

Wenn eine neue Mail eingeht und beim Master eingetütet wird, sorgt der sync_client dafür, dass die Mail auch auf die anderen Cyrus-Instanzen repliziert wird. Das funktioniert nur in eine Richtung: Master -> Slave. Wenn man eine Mail auf einem der Slaves löscht, fehlt sie nur dort und wird nicht automatisch auf allen anderen Mailstores gelöscht. Mit sync_client kann man auch nur einzelne Benutzer oder einzelne Mailboxen replizieren, was je nach Setup sehr praktisch ist.
Jeder Slave-Server kann problemlos in einen Master-Server umgebaut werden, sollte der vorige Master einmal ausfallen.
Die Replikation bei Cyrus IMAP dient also wirklich nur der Replikation und lässt sich (noch) nicht als Loadbalancing-Lösung mißbrauchen. Im Zusammenspiel mit Cyrus Murder ist aber schon ein Setup möglich, das sich sehen lassen kann. Sowohl im Hinblick auf Datensicherheit (wg. Replikation) und Performanz (durch Loadbalancing über Murder).

EDIT: Eins möchte ich noch hinzufügen: Die Verbindung zwischen Master und Slave sollte nicht ungesichert über das Internet erfolgen, da das Protokoll die Daten unverschlüsselt überträgt.

z0ny
27.08.06, 14:49
Woran kann es liegen, dass bei 'synctest' das Passwort nicht akzeptiert und eine Verschlüsselung erzwungen wird? Die Authentifizierung erfolgt über MySQL.


master # synctest -a cyrus -m LOGIN slave
S: * STARTTLS
S: * OK slave Cyrus sync server v2.3.7-Gentoo
C: AUTHENTICATE LOGIN
S: NO encryption needed to use mechanism
Authentication failed. generic failure
Security strength factor: 0
C: EXIT
Connection closed.

master # synctest -a cyrus -m LOGIN -t "" slave
S: * STARTTLS
S: * OK slave Cyrus sync server v2.3.7-Gentoo
C: STARTTLS
S: OK Begin TLS negotiation now
verify error:num=18:self signed certificate
TLS connection established: TLSv1 with cipher AES256-SHA (256/256 bits)
S: * SASL PLAIN LOGIN
S: * OK slave Cyrus sync server v2.3.7-Gentoo
C: AUTHENTICATE LOGIN
S: + ABCD
Please enter your password:
C: ABCD
S: + ABCD
C: ABCD
S: NO authentication failure
Authentication failed. generic failure
Security strength factor: 256
C: EXIT
Connection closed.

Der Test mit 'imtest' funktioniert unverschlüsselt wie verschlüsselt ohne Probleme:


master # imtest -a cyrus slave
S: * OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS] slave Cyrus IMAP4 v2.3.7-Gentoo server ready
C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE IDLE LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH
S: C01 OK Completed
Please enter your password:
C: L01 LOGIN cyrus {13}
S: + go ahead
C: <omitted>
S: L01 OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE IDLE LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH] User logged in
Authenticated.
Security strength factor: 0


Meine imapd.conf auf dem Master sieht wie folgt aus:


master # grep ^[^#] /etc/imapd.conf
configdirectory: /var/imap
partition-default: /var/spool/imap
sievedir: /var/imap/sieve
tls_ca_path: /etc/ssl-cert
tls_ca_file: /etc/ssl-cert/ssl.pem
tls_cert_file: /etc/ssl-cert/ssl.pem
tls_key_file: /etc/ssl-cert/ssl.pem
admins: cyrus
hashimapspool: yes
allowanonymouslogin: no
allowplaintext: yes
sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN LOGIN
unixhierarchysep: yes
sasl_sql_user: mail
sasl_sql_passwd: blup
sasl_sql_database: mail
sasl_sql_hostnames: localhost
sasl_sql_select: SELECT clear FROM users WHERE email = '%u@%r'
sync_host: slave
sync_authname: cyrus
sync_password: blup
master #

Am Slave wurde wie in der Anleitung beschrieben der Syncserver in die cyrus.conf eingetragen. Die imapd.conf ist dieselbe wie am Master, lediglich ohne die sync_*-Einstellungen. Ideen?