IMAP IDLE + NFS (famd?)

Fórumok

IMAP IDLE szolgáltatást szeretnék megvalósítani. Courier-IMAP van, az IDLE működéséhez famd kell.

A famd-t össze is lőttem az NFS-sel (NFS szerver famd-je RPC-n elérhető, NFS kliens famd-je látszólag jól továbbítja a kéréseket a szerver famd-jének) ellenben mocskosul, és használhatatlanul lassú. Gyakorlatilag már néhány IMAP kliens esetében is 100% CPU használatot csinál a famd, és minden IMAP művelet hosszú másodpercekig tart.

Látott már valaki ilyet normálisan működni?

A felállás jelenleg:

- 1 darab NFS szerver (rajta a Maildir-ekkel)
- n darab SMTP szerver gép, ami a Maildir-ekbe kézbesít (NFS kliens) (jelenleg n=2)
- n darab IMAP szerver gép, ami a Maildir-ekből kiszolgál (NFS kliens) (jelenleg n=2)

Minden gépen 64 bites Debian 7.0 (wheezy) van.

Hozzászólások

Most itt megeresztenék egy trollszagu, de hosszú évek tapasztalatán alapú megfigyelést: ha olyan advanced cuccokat akarsz mint IDLE, edge casekben is működő kvóta, stb, akkor válts át Dovecotra és boldogabb ember leszel. Lehet, hogy Courierrel is össze tudod reszelni, de mivel architekturálisan nem lett beletervezve ez a funkcionalitás, inkább több szívás mint kevesebb.

Plusz ha jófej akarsz lenni a mobilos usereiddel, tegyél fel z-push-t.

És a Dovecot hogyan valósítja meg az IDLE-t? Megállás nélkül pollozza a maildirt (ami önmagában sux), vagy szintén famd-t használ, mert akkor meg visszatértünk a topicnyitó problémához?

(Alternatíva lehetne a natív dnotify/inotify implementáció, de ahhoz NFS esetében szintén kliens-szerver megoldás dukálna)

Nem, a Dovecot sajat delivery daemont hasznal, igy pontosan tudja, mikor jott uj level. NFS folott nem probaltam, de lattam a config kommentekben ra utalast. Osszessegeben nagysagrendekkel ertelmesebben van osszerakva mint a Courier, mindenkeppen megneznem.

Update:

mailbox_idle_check_interval = 30
When IDLE command is running, mailbox is checked once in a while to see if there are any new mails or other changes. This setting defines the minimum time in seconds to wait between those checks. Dovecot can also use dnotify, inotify and kqueue to find out immediately when changes occur.

Egyebkent en soha nem mertem maildirt NFS folott uzemeltetni, jo otlet az?

> mailbox_idle_check_interval = 30
> When IDLE command is running, mailbox is checked once in a while to see if there are any new mails or other
> changes. This setting defines the minimum time in seconds to wait between those checks. Dovecot can also use
> dnotify, inotify and kqueue to find out immediately when changes occur.

Jó, tehát ha nincs dnotify/inotify (pl. NFS miatt) akkor marad a periódikus pollozás. Frankó.

> Egyebkent en soha nem mertem maildirt NFS folott uzemeltetni, jo otlet az?

Én szívesen üzemeltetem más felett, ha mondasz jobbat. A helyi fájlrendszer nem opció, mert több gépen kell látni ugyanazt, tehát marad a fájlszerver megoldás, amire eddig (unix és unix-like környezetben) az NFS volt a legpraktikusabb és legjobban támogatható megoldás. Még valami cluster-fs lehet nyerő, de ahhoz előtte kell némi experiment...

Csak úgy kíváncsiságból, ez terhelés-elosztás miatt van így megoldva? Vagy amolyan HA megoldás? Mi van, ha mindkét szerverről mondjuk ugyanazt az imap-mappát piszkálgatják?
A Cyrus IMAP pl. kifejezetten nem ajánlja NFS-re tenni a maildireket.

> Csak úgy kíváncsiságból, ez terhelés-elosztás miatt van így megoldva? Vagy amolyan HA megoldás?

Legfőképp terhelés-elosztás, lásd a topicnyitót, ahol le van írva a topológia.

> Mi van, ha mindkét szerverről mondjuk ugyanazt az imap-mappát piszkálgatják?

Semmi különös. Az IMAP kliens az IMAP parancs kiadásakor a fájlrendszeren található pillanatnyi állapotot kapja, pont ugyanúgy, mintha a levelek nem NFS szerveren, hanem egy helyi fájlrendszeren lennének.

Maildir backend esetén úgysem a mappa az érdekes, hanem az email, mint legkisebb egység (= fájl)
Fájlszintű lockolás pedig létezik helyi fájlrendszeren, és NFS-en keresztül is, ha éppen arra van igény.

Nezd, en az elmult ket honapban probalkoztam valami ertelmes HA megoldast tenni a mailszerver ala, de nem sikerult. Ha csak terheles elosztast akarsz, akkor oszd szet a mailboxokat kulonbozo szerverekre es tegyel ele Dovecot IMAP proxyt.

Ha HA-t akarsz, akkor szoba johet:

  • dbox + GFS2 + DRBD/shared storage
  • Cyrus IMAP + murder

Mindketto munkaigeny-szintje: good luck es messze nem biztos, hogy jobban jarsz vele, mint az elosztott mailstore-okkal es rendszeres backupokkal. (Lasd: dsync.) Ha ez nem eleg, akkor neked valami brutalisan nagy mail setupod lehet.

Nézd, a jelenlegi topológia (az IDLE-t kivéve) nagyszerűen működik 12 éve, és remekül skálázható szükséges számú frontend ki-be kapcsolásával. Az IDLE kedvéért nem fogom decentralizálni az adattárolást, inkább a dnotify/inotify-t kellene megfaragni működőre. (Azt már nem is mondom, hogy az NFS szerveren a Maildir-eken kívül az ügyfelek más adatai is megtalálhatóak, amik jelenleg csoportkvótákkal vannak korláltozva - ez nyilván borul, ha külön fájlrendszerre bontanám az adattárolást)

Cluster fájlrendszer megoldások iránt érdeklődöm, de az érdeklődés önmagában messze van a produktív bevetéstől :)