Skalierbarer IMAP-Server mit dem Cyr
Transcription
Skalierbarer IMAP-Server mit dem Cyr
Skalierbarer IMAP-Server mit dem Cyrus Murder Cluster Entzwei' und gebiete! Tüchtig Wort. Verein' und leite! Bessrer Hort. Johann Wolfgang von Goethe, Sprichwörtliches 3. Mailserver-Konferenz, Berlin, 2./3. Juli 2007 Frank Richter, URZ, TU Chemnitz Ausgangspunkt: Zentraler Mailbox-Server der TU Chemnitz Einordnung: Ein zentraler Mailbox-Server - mailbox.hrz.tu-chemnitz.de Mailboxen und Ordner von ca. 17.000 Benutzern POP / IMAP, wahlweise SSL/TLS: bis 300 Tsd. Zugriffe / Tag SMTP, wahlweise SSL/TLS: 35-80 Tsd. E-Mails / Tag Separat: Webmail-Server: Horde/IMP Gesamt: davon 17781 125 46244 6426768 Mailbox-Größe: Anzahl: % Platz: Mails/Mailbox: Anzahl: Mailboxen, 354.22 GB, Gruppen-Mailboxen, 1.72 Subfolder, 13605 Nutzer Mails, 0 788 0.0% < 10 2074 < 1k 344 0.0% ./. 19921.1 kB / Mailbox GB ./. 2.6 / Mailbox ./. 361.4 / Mailbox < 10k < 100k 517 2145 0.0% 0.0% < 100 6903 < 500 5168 < 1M 2989 0.3% < 1000 1507 Besonderheiten: Gruppen-Mailboxen für Funktions-Mailadressen [email protected] > group.hrz.fax ACLs: Berechtigungen auf Ordner Die Anforderungen steigen ständig ... Alles wächst: Nutzeranzahl, Nutzungsintensität, Speicherplatzbedarf < 10M 4279 5.4% <100M 6038 53.8% < 10000 1422 <1 GB 681 40.4% > 10000 33 >1 GB 0 0.0% Monatliche Zugriffszahlen POP / IMAP 1999: Intel Pentium III, 450 Mhz, 512 MB RAM, 80 GB Arena RAID Red Hat 6.2 Linux, Cyrus, sendmail 2001: AMD Athlon, 1 GHz, 1 GB RAM, 2 x 70 GB EIDE intern Red Hat 6.2 Linux, Cyrus, Exim 2003: 2 x AMD Athlon, 1,8 GHz, 3 GB RAM, RAID System 440 GB Red Hat 7.3 Linux (1 Standby, Kimberlite cluster), Cyrus, Exim Wie weiter? Ziele: Skalierbares System Transparent für Nutzer Höhere Sicherheit vor Ausfällen Perdition: Mail Retrieval Proxy http://www.vergenet.net/linux/perdition/ Perdition is a fully featured POP3 and IMAP4 proxy server. It is able to handle Plain-Text, SSL and TLS connections and connect end-users to a real-server based on a database lookup... Perdition has many uses. Including, creating large mail systems where an end-user's mailbox may be stored on one of several hosts, integrating different mail systems together, migrating between different email infrastructures, and bridging plain-text, SSL and TLS services. It can also be used as part of a firewall. Zuordnung von User zu realem Server anhand des username im Login Kein Zugriff auf shared folders, die auf anderen Servern liegen Mail-Zustellung an reale Server muss separat organisiert werden Cyrus Murder: IMAP Aggregator http://cyrusimap.web.cmu.edu/ag.html The Cyrus IMAP Aggregator transparently distributes IMAP and POP mailboxes across multiple servers. Unlike other systems for load balancing IMAP mailboxes, the aggregator allows users to access mailboxes on any of the IMAP servers in the system ... The Cyrus aggregator takes a murder of IMAP servers and presents a server independent view to the clients. That is, all the mailboxes across all the IMAP servers are aggregated to a single image, thereby appearing to be only one IMAP server to the clients. Frontend-Server: Vermittelt zwischen E-Mail-Klienten und Backend-Servern (IMAP/POP proxy) Optional: Organisiert Mail-Zustellung (LMTP proxy) dataless Backend-Server: Speichert E-Mails und Meta-Daten für Teilmenge der Benutzer An sich voll funktionaler IMAP/POP-Server MUPDATE-Server: Authoritative Daten über alle Mailboxen der Backend-Server Unified murder: Backends sind auch Frontend: Eigene Mailboxen selber, andere per proxy an anderen Backend Replicated murder: Backends haben vollständige replizierte Kopien aller Mailboxen /etc/imapd.conf mupdate_config: unified | replicated Frontend-Server POP/IMAP Kommunikation mit E-Mail-Klienten Authentisierung via SASL POP: Weiterleiten zu entsprechendem Backend IMAP: Protokollanalyse, je nach Request weiter an entsprechenden Backend (Proxy) oder selber: LIST evtl. IMAP REFERRAL: Weiterleiten des Klienten an Backend - ausgeschaltet (patch) Lokalisierung Kontaktiert MUPDATE-Master-Server: Auf welchem Backend liegt welcher Ordner? Speichert lokal (MUPDATE-Slave) SMTP (Exim) Entgegennahme von lokalen Sendern Weiterleiten an Relay, oder lokale Zustellung LMTP Lokalisierung Mailbox (MUPDATE) Zustellung an entsprechenden Backend Auch auslagerbar auf beliebigen SMTP-Server (LTMP proxy) Backend-Server Speichert Mails und Meta-Daten POP/IMAP: Authentisierung von Frontend (auch direkt von Klienten) via SASL IMAP-Operationen bezüglich Ordner (CREATE, DELETE, RENAME, SETACL) in Abstimmung mit MUPDATE-Server LTMP nur authentisiert von LMTP-Proxy (Frontend) Sieve: Ablegen, Weiterleiten, Verwerfen ... Ggf. sichern via /etc/hosts.allow ... # Nur Frontend-Server duerfen LMTP lmtp : 134.109.133.154 134.109.133.156 lmtp : ALL : twist=/bin/echo 221 %H closing connection MUPDATE-Server Besitzt authoritative Daten über alle Mailboxen: Namen, Backend-Server, Partition, ACLs -> mailboxes.db (wiederherstellbar von Backends) user.fri 1 tiberius.hrz.tu-chemnitz.de!d fri lrswipcda group.ub.s4 1 augustus.hrz.tu-chemnitz.de!b hot lrswipcda brantl lrswipd RFC 3656: The Mailbox Update (MUPDATE) Distributed Mailbox Database Protocol Backend-Server stimmen Änderungen (neue/gelöschte Ordner, Änderungen in ACL) ab Informiert MUPDATE-Slave-Server auf Frontends über Änderungen Authentisierung der Frontend-/Backend-/LMTP-Proxy-Server via SASL /etc/cyrus.conf SERVICES { # MUPDATE Master: mupdate cmd="mupdate -m" listen=3905 prefork=1 ... } Authentisierung ... SASL anyon 1. Nutzerauthentisierung Mail-Klienten gegenüber Frontend Kerberos5, Plain: PAM -> Kerberos, user_db Frontend: /etc/imapd.conf sasl_mech_list: PLAIN GSSAPI # via saslauthd -> PAM sasl_pwcheck_method: saslauthd Daemon: saslauthd -a pam /etc/pam.d/imap #%PAM-1.0 auth auth account sufficient required required pam_krb5.so pam_userdb.so db=/etc/can pam_permit.so 2. Proxy-Authentisierung Frontend/LMTP-Proxy gegenüber Backend Hier: Authentisierung via DIGEST-MD5 (sasldb2), nur ein Admin user Frontend: /etc/imapd.conf # So meldet sich der Frontend zum Backend proxy_authname: frontend proxy_password: ********** Backend: /etc/imapd.conf servername: real-host.domain.tld sasl_pwcheck_method: auxprop sasl_mech_list: DIGEST-MD5 admins: cyrus frontend proxyservers: frontend saslpasswd2 -c -u real-host.domain.tld frontend 3. MUPDATE-Authentisierung Frontend/Backend gegenüber MUPDATE-Server Hier: Authentisierung: DIGEST-MD5 (sasldb2), nur ein Admin user Frontend/Backend: /etc/imapd.conf # So wird der MUPDATE master erreicht: mupdate_server: host.domain.tld mupdate_port: 3905 mupdate_username: mupdate mupdate_authname: mupdate mupdate_password: ******** MUPDATE: /etc/imapd.conf servername: generic.domain.tld sasl_pwcheck_method: auxprop sasl_mech_list: DIGEST-MD5 admins: mupdate saslpasswd2 -c -u generic.domain.tld mupdate Realisierung an TU Chemnitz Hardware: 1 Frontend-Server (+ 1 standby): AMD Athlon 64 X2 Dual Core Processor 5200+, 4 GB RAM /etc/cyrus.conf /etc/imapd.conf 2 Backend-Server: AMD Athlon 64 X2 Dual Core Processor 5200+, 4 GB RAM, Fiberchannel -> SAN (Sun StorageTek 6540, z.Z. 1,2 TB, xfs) /etc/cyrus.conf /etc/imapd.conf 1 MUPDATE-Server: AMD Athlon MP 2200+, 3 GB RAM /etc/cyrus.conf /etc/mupdate-master.conf /etc/imapd.conf Betriebssystem: Linux 2.6.X, Scientific Linux 4 Software: Cyrus 2.3.X - cyrus-imap RPM von Simon Matter, invoca.ch Exim 4.X + Virencheck (ClamAV) Selbst gebaut - Admin-Tools: Anlegen/Löschen von Mailboxen, Monitoring, Routine-Arbeiten (Quota, restore), Statistik Migration Vorbereitung: E-Mail-Daten + cyrus.* per rsync auf neue Server (nachts im laufenden Betrieb) Partition a, b -> Backend1 / c, d -> Backend2 Skript zur Aufteilung der Meta-Daten Anpassung eigener Admin-Skripte ...! Umstellung: alter Server: Stop, letztes rsync DNS umstellen (neue IP-Adresse) Metadaten (mailboxes.db, Sieve, seen) per Skript "aufteilen" Start MUPDATE-Server (leer) Start Backend: ctl_mboxlist -m -a synchronize the local mailbox list file with the MUPDATE server. local mailboxes file is authoritiative Start Frontend Denkbar: Bisheriger single Server wird Backend-Server Ergebnis 3 Stunden downtime -> up and running Transparenz für Nutzer ... ok, IP-Adressänderung robust und schnell Load: Frontend 0.5 - 3.0, Backends < 1, MUPDATE << 1 MUPDATE-Server tunen - /etc/imapd.conf: mupdate_connections_max: 1024 mupdate_workers_max: 200 mupdate_workers_minspare: 10 mupdate_workers_maxspare: 30 mupdate_workers_start: 15 Ausfallszenarien: Frontend: Umschaltung auf anderen Frontend (Layer4-Switch) MUPDATE: keine Mail-Zustellung, keine neuen Ordner Backend: Mailboxen weg, Frontend "läuft zu" Probleme: Mailbox auf anderen Backend verschieben kleinere Bugs (x86_64 ...) Sieve: Ablegen in Ordner auf anderem Backend: fileinto "group.anderer.backend"; Goodies: Backup - Restore Verzögertes Löschen: Bei EXPUNGE oder DELE wird Löschwunsch vermerkt: cyrus.expunge Mail-Dateien bleiben stehen: schnell Backend: /etc/imapd.conf expunge_mode: delayed Wirkliches Löschen zeitgesteuert /etc/cyrus.conf EVENTS { ... # expire messages (delayed expunge) and duplicate delivery database entries # Mails verwerfen, die vor 7 Tagen vom Nutzer gelöscht wurden delprune cmd="cyr_expire -E 3 -X 7" at=0403 } Zugriff auf gelöschte Mails durch Admin: /usr/lib/cyrus-imapd/unexpunge ... Restore von Mails bis 7 Tage sehr schnell Außer: Löschen eines gesamten Ordners - da ist alles weg Zusätzlich: rsync auf anderes RAID Todo ... Trennung SMTP (+ Virenchecker) und IMAP/POP via Layer4-Switch redundante Frontends evtl. Synchronisieren: Spiegeln der Backends gegenseitig Gruppen-Management für ACLs notify (VoIP, SMS) Backup mit Snapshots / ISCSI