<div dir="ltr"><div>Hello,  i have some question about NFS, dovecot director, and imap settings.<br><br>I was reading all dovecot documentation ad mail lists, but some aspect  are not clear to me.<br><br>I am looking for performance / tunning my infra to work in a more efficient way because we experiences some issues some days ago.<br><br>This is my infra:<br><br>I got an infra with 2 dovecot-directors and 3 imap backend. <br>I got all the emails stored in a common NFS share filer to all the imap nodes. ( Index are locally stored in each imap node.)<br><br><br>My NFS mount options:<br><br>(0)#: nfsstat -m<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">/data/mail from myipaddress:/export/mail/maildirs<br> Flags:      rw,nosuid,noexec,noatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nordirplus,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.0.205,mountvers=3,mountport=20048,mountproto=tcp,local_lock=none,addr=10.0.0.205<br></blockquote><br><br><b>Questions</b>:  ( <a href="https://wiki.dovecot.org/PerformanceTuning">https://wiki.dovecot.org/PerformanceTuning</a> , <a href="https://doc.dovecot.org/configuration_manual/nfs/">https://doc.dovecot.org/configuration_manual/nfs/</a>  >> i am following these steps )<br><br>1) Is my NFS correct setup with the mount options well optimized ?  Not sure if someone is using the same flags that me or got a better recomendation to used.<br><br>2) Set <b>mmap_disable = yes ???  </b> >>  This must be set to yes if you store indexes to shared filesystems. In my case i got them locally in each imap node not in NFS share folder.<br><br><div>I got setup  mmap_disable = no , is this correct?  I think no is the correct option here with indexes locally.</div><div><br></div><div>because i can read here:</div><div><br></div><div>  <a href="https://wiki1.dovecot.org/NFS">https://wiki1.dovecot.org/NFS</a> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>>> High performance NFS setup with indexes on local disk (see below for benefits):<br><br>mmap_disable = no<br></blockquote><br><br>3) Set<b> mail_fsync = always  ???</b><br><br>Documentation: <a href="https://wiki.dovecot.org/PerformanceTuning">https://wiki.dovecot.org/PerformanceTuning</a><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">always<br><br>    Use fsync after all disk writes.<br><br>    Recommended for NFS to make sure there aren’t any delayed write()s.<br></blockquote> <br>3.a) where i can setup this option <b>mail_fsync = always , </b>because i run  doveconf -n in director,  and imap nodes, and they are not showing nothing.<br><br>3.b) <b>In which node ? </b>Do i need to add  the setting in dovecot.conf in <b>director node or in imap node or in both ?</b>  Not sure if this is the correct way:<br><br><div>This is an attemp of setup, not sure if is correct?<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">0)#: doveconf -n<br># 2.3.13 (89f716dc2): /etc/dovecot/dovecot.conf<br># Pigeonhole version 0.5.13 (cdd19fe3)<br># OS: Linux 5.10.0-20-amd64 x86_64 Debian 11.6 <br><br>mail_debug = yes<br>mail_fsync = always<br>mail_max_userip_connections = 20<br>mail_nfs_storage = yes<br>mail_plugins = " notify mail_log"<br>mail_privileged_group = mail<br><br><br><br>protocol lmtp {<br>  mail_fsync = always<br>  mail_plugins = " notify mail_log sieve mail_lua push_notification push_notification_lua"<br>  plugin {<br>   ...<br>  }<br></blockquote><br><br>4) Do not set <b>mail_nfs_index </b>or <b>mail_nfs_storage</b> (i.e. keep them as no)   ?????<br><br>First option make sense but the second one not.<br><br><a href="https://doc.dovecot.org/settings/core/#core_setting-mail_nfs_storage">https://doc.dovecot.org/settings/core/#core_setting-mail_nfs_storage</a><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">mail_nfs_storage<br><br>        Default: no<br><br>        Values: Boolean<br><br>    Flush NFS caches whenever it is necessary to do so.<br></blockquote></blockquote><br>    This setting should only be enabled if you are using multiple servers on NFS.<br></blockquote><br>So should be possible to enable this option   <b>mail_nfs_storage = yes ?????</b><br><br><br><br><br>4) I got this setting in <b>dovecot-sql.conf  ( director )  </b><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">driver = mysql <br>connect = host=myserver.X dbname=maildb user=dovecot password=XXXXXXXXXXXXXXXX<br>default_pass_scheme = SHA <br>password_query = select login as user, crypt_sha1 as password, home as userdb_home, uid AS userdb_uid, gid AS userdb_gid, concat(maildir,':INDEX=/data/indexes/',login) as userdb_mail from mailbox left join aliases on aliases.systemid = aliasid where login = '%u' and inactive = 0;<br>user_query = select home, maildir as mail, uid, gid from mailbox left join aliases on aliases.systemid = aliasid where login = '%u' and inactive = 0;<br>iterate_query = select distinct login as user from mailbox;<br></blockquote><br><br>I would like to implement <b> ITERINDEX</b>  and probably <b>VOLATILEDIR </b>but not sure if this is the correct change or if i need to change something into the database.<br><br>from:<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">password_query = select login as user, crypt_sha1 as password, home as userdb_home, uid AS userdb_uid, gid AS userdb_gid, concat(maildir,':INDEX=/data/indexes/',login) as userdb_mail from mailbox left join aliases on aliases.systemid = aliasid where login = '%u' and inactive = 0;<br></blockquote><br>to:</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">password_query = select login as user, crypt_sha1 as password, home as userdb_home, uid AS userdb_uid, gid AS userdb_gid, concat(maildir,':INDEX=/data/indexes/',login,':ITERINDEX',':VOLATILEDIR=/tmp/%2.256Nu/%u',login) as userdb_mail from mailbox left join aliases on aliases.systemid = aliasid where login = '%u' and inactive = 0;<br></blockquote><div><div><div><br><br>But not sure if is working correctly,  <b> i checked debuging</b> in my imap node in this way:<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">auth_verbose = yes<br>auth_verbose_passwords = no<br>auth_debug = yes<br>auth_debug_passwords = yes<br>mail_debug = yes<br>verbose_ssl = yes<br></blockquote><br>This is the output log:<br><blockquote><br>Feb 15 09:32:53 my-imap-server dovecot: auth: Debug: sql(manolo1@mydomain,10.X.X.109,<eWEh7bj09N4KAjxt>): cache hit: {SHA}8376922a27e83b9eadcdec3596a70bf6c4db5730#011user=manolo1@mydomain#011userdb_home=/data/mail/tmydomain/users/manolo1#011userdb_uid=700#011userdb_gid=700#011userdb_mail=/data/mail/mydomain/users/manolo1/Maildir/:INDEX=/data/indexes/manolo1@mydomain:ITERINDEX:VOLATILEDIR=/tmp/3a/manolo1@mydomain<b><br></b></blockquote><b>Not sure if is correct the output or should i need to change something into the database or this change only afect locally?</b><br><br><br>5) <b>mailbox_list_index = yes  ???</b><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Mailbox list indexes can be used to optimize IMAP STATUS commands. They are<br>also required for IMAP NOTIFY extension to be enabled.<br></blockquote><b><br>It is this option necesary to add?  in order to work with ITERINDEX option ?</b>  <a href="https://www.mail-archive.com/dovecot@dovecot.org/msg75035.html">https://www.mail-archive.com/dovecot@dovecot.org/msg75035.html</a>  ( i see your answer to this post )<br><br>6) <b>What is the best way to do a maintenance in a backend?</b><br><br>The last time i flushed all the user  in a director  from a backend node to do a maintenance, after the maintenance done i rebalanced the director cluster, but the next day <br>when user started tp connect we got high peak I/O , etc with a lot of problems,  because new users in this backend node were re-indexes o creating new indexes. <br></div><div><b>Are there any way to do in a safer way? </b>Without loosing the hashed for the directors nodes.  <br></div><div><br></div><div>Thanks in advance!!!!!!!<br></div><div><br><br></div></div></div></div>