Multiple ISPConfig servers Only for Mail services

Discussion in 'General' started by emaddaou, Jun 5, 2024.

  1. emaddaou

    emaddaou Member

    Dear ISPConfig members,

    I have around 3TB dovecot mail server running as master-master, main server on one site and another dovecot mail server is located on different site;

    The dovecot was configured poorly and hosted on a single physical server which eventually running out of space;

    1) my aim is to slowly migrate one mail-box at a time to a New ISPConfig Multiple Server setup, dedicated only for mail Services; I believe we can have both mail servers running at the same time;

    2) Or, if you recommend Migrating everything one shot, that would be great, however, the following article below is scary if migration was not done using the right tool; https://doc.dovecot.org/admin_manual/migrating_mailboxes/ frankly, I don't like to rush and migrate everything one shot, I prefer to migrate one mail-box at a time and allow testing;

    3) Is it possible to use the automation script mentioned below to setup multiple ISPConfig servers only for mail services, if not, is there an article on howtoforge you recommend for Multiple setup but dedicated only for Mail services?

    4) FYI - PFA is being used to manage User accounts;

    So basically, what am looking for is only the following only, am not interested in Web hosting, Webmail, or DNS Management;

    Code:
    host       FQDN                   IP
    panel      panel.example.com      10.0.64.12
    mx1        mx1.example.com        10.0.64.14
    mx2        mx2.example.com        10.0.64.15
    

    I am aware of the following articles, but would like to know from you if you have other recommended options / best practices you would like to share;

    https://www.howtoforge.com/ispconfig-autoinstall-debian-ubuntu/
    https://www.howtoforge.com/tutorial/ispconfig-multiserver-setup-debian-ubuntu/
    https://forum.howtoforge.com/threads/ispconfig-3-autoinstaller.86078/

    Your time, caring, and sharing is highly appreciated; thank you so much for reading my post;
     
  2. ztk.me

    ztk.me Well-Known Member HowtoForge Supporter

    Are we talking about the expectation having one account ( account@example.net ) on one server and another ( account2@example.net ) on another server?
    Doubt ISPConfig is made for this. However one could, maybe, use the mirror function and just tell clients to use server a or b but someone is going to mess up sooner or later ( client ).
    But maybe I'm mistaken
     
  3. emaddaou

    emaddaou Member

    @Christoph thank you for your time;

    Currently users use imap.example.com and smtp.example.com; I would say, if possible, to have the users who are willing to take a test drive, migrate to the new Mail server and start using sub-domains imaps.example.com and smtps.example.com instead which will be pointing to the New Mail server;

    Any thoughts of how to build a Multiple ISPConfig Servers setup, especially for Mail services will be highly appreciate it!
     
  4. till

    till Super Moderator Staff Member ISPConfig Developer

    yes. You can freely define which services a system shall have.

    You can basically follow this guide:

    https://www.howtoforge.com/tutorial/ispconfig-multiserver-setup-debian-ubuntu/

    which sets up a system consisting of two mirrored mail nodes. If your system shall be larger, then you must go a different route, which is having a high highly available storage system, e.g. 3+ servers running Ceph. Then have two or more mail nodes running ISPConfig mail system in mirror mode which all mount /var/vmail from the ceph storage cluster. And finally, you need either a load balancer in front of it. And dovecot likely needs to be configured using director in such a setup. Such a setup then should easily scale to ten thousands of mail accounts. I know a hosting company that used ISPConfig already more then 10 years ago for their mail system consisting of 5 mail nodes plus a central storage cluster which had more than 15k active accounts and the system was working perfectly fine.
     
    Onyxenator, ahrasis and ztk.me like this.
  5. AXC

    AXC New Member

    I have the migration script, it work amazingly well so far. I am going from a multiple server (web(x2),db,mail,panel) setup to a hybrid main server (web,db,panel) plus (mail). can the migration tool migrate the databases to the new main server. if so will it copy all dbs for me
     
  6. till

    till Super Moderator Staff Member ISPConfig Developer

    The Migration Tool can also copy the website databases.
     
  7. emaddaou

    emaddaou Member

    Dear ISPConfig Members,

    It's been almost a year, however, I was finally able to fire-up a setup of 2 IPSConfig Servers dedicated only for Email;

    However, I need your guidance please, since I still can't authenticate to the second mail server using imap or smtp;
    So, here in short version what I ran and configured:

    At the first mail server
    wget -O - https://get.ispconfig.org | sh -s -- --no-quota --no-pma --no-ftp --no-roundcube --no-mailman --no-dns --use-unbound --no-firewall --use-nginx --use-php=system --interactive

    At the second mail server - When asked, choose Expert in onrder to join it part of Multiple setup
    wget -O - https://get.ispconfig.org | sh -s -- --no-quota --no-pma --no-ftp --no-roundcube --no-mailman --no-dns --use-unbound --no-firewall --use-nginx --use-php=system --interactive

    I put together the Dovecot Dsync script as well using the instructions of Multiple Setup howto, but Dsync status at MX2 shows 0 users although I have created users on MX1;

    When I run 'doveadm -D sync -A -d ' at MX2 I got failed requests 1
    I tried from MX1 web interface to make MX1 main Web and Database and make MX2 a mirror of MX1 but still no luck with MX2;

    Please note, when I ran the upper script at MX2 using --interactive at MX2, it joined MX1 and everything went smooth, but it seems neither the mailboxes, credentials, and databases of MX1 are syncing or mirroring with MX2;

    I have an awesome mail MX1 server up and running right now and we are using it, however, we need to divide the load, i.e, have MX2 handle the SMTP and MX1 handle the IMAP;

    Your time is highly appreciated; I need to know what is missing, how can I tell MX1 to Sync Mailboxes, Credentials, and all sort of Databases with MX2, hence if MX1 one day is gone, we can still use MX2 for authentication and access our emails using IMAP/SMTP? Thank you!!
     
    Last edited: Apr 3, 2025
  8. nhybgtvfr

    nhybgtvfr Well-Known Member HowtoForge Supporter

    did you configure mx2 to be a mirror of mx1 in the ispconfg interface?
     
  9. emaddaou

    emaddaou Member

    Hello @nhybgtvfr, yes I did, thank you for your time
    Here what happens when I run
    Code:
    doveadm -D sync -A -d
    Code:
    PRD [root@mx1 ~]# doveadm -D sync -A -d
    
    Debug: Loading modules from directory: /usr/lib/dovecot/modules/doveadm
    Debug: Skipping module doveadm_acl_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_acl_plugin.so: undefined symbol: acl_user_module (this is usually intentional, so just ignore this message)
    Debug: Skipping module doveadm_quota_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_quota_plugin.so: undefined symbol: quota_user_module (this is usually intentional, so just ignore this message)
    Debug: Module loaded: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_sieve_plugin.so
    Debug: Skipping module doveadm_fts_lucene_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_lucene_plugin.so: undefined symbol: lucene_index_iter_deinit (this is usually intentional, so just ignore this message)
    Debug: Skipping module doveadm_fts_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_plugin.so: undefined symbol: fts_user_get_language_list (this is usually intentional, so just ignore this message)
    Debug: Skipping module doveadm_mail_crypt_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/libdoveadm_mail_crypt_plugin.so: undefined symbol: mail_crypt_box_get_pvt_digests (this is usually intentional, so just ignore this message)
    2025-04-04 08:32:34 Debug: Loading modules from directory: /usr/lib/dovecot/modules
    2025-04-04 08:32:34 Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
    2025-04-04 08:32:34 Debug: Loading modules from directory: /usr/lib/dovecot/modules/doveadm
    2025-04-04 08:32:34 Debug: Skipping module doveadm_acl_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_acl_plugin.so: undefined symbol: acl_user_module (this is usually intentional, so just ignore this message)
    2025-04-04 08:32:34 Debug: Module loaded: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_quota_plugin.so
    2025-04-04 08:32:34 Debug: Skipping module doveadm_fts_lucene_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_lucene_plugin.so: undefined symbol: lucene_index_iter_deinit (this is usually intentional, so just ignore this message)
    2025-04-04 08:32:34 Debug: Skipping module doveadm_fts_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_plugin.so: undefined symbol: fts_user_get_language_list (this is usually intentional, so just ignore this message)
    2025-04-04 08:32:34 Debug: Skipping module doveadm_mail_crypt_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/libdoveadm_mail_crypt_plugin.so: undefined symbol: mail_crypt_box_get_pvt_digests (this is usually intentional, so just ignore this message)
    2025-04-04 08:32:34 Debug: auth-master: userdb list: Started listing users (user_mask=)
    2025-04-04 08:32:34 Debug: auth-master: conn unix:/run/dovecot/auth-userdb: Connecting
    2025-04-04 08:32:34 Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=590,uid=0): Client connected (fd=9)
    2025-04-04 08:32:34 Debug: auth-master: userdb list: Returned username: logwatch@example.com
    2025-04-04 08:32:34 doveadm(logwatch@example.com): Debug: auth-master: passdb lookup(logwatch@example.com): Started passdb lookup
    2025-04-04 08:32:34 doveadm(logwatch@example.com): Debug: auth-master: conn unix:/run/dovecot/auth-userdb: Connecting
    2025-04-04 08:32:34 doveadm(logwatch@example.com): Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=590,uid=0): Client connected (fd=11)
    2025-04-04 08:32:34 doveadm(logwatch@example.com): Debug: auth-master: passdb lookup(logwatch@example.com): auth PASS input: user=logwatch@example.com
    2025-04-04 08:32:34 doveadm(logwatch@example.com): Debug: auth-master: passdb lookup(logwatch@example.com): Finished passdb lookup (user=logwatch@example.com )
    2025-04-04 08:32:34 doveadm(logwatch@example.com)<311522><>: Debug: auth-master: userdb lookup(logwatch@example.com): Started userdb lookup
    2025-04-04 08:32:34 doveadm(logwatch@example.com)<311522><>: Debug: auth-master: userdb lookup(logwatch@example.com): auth USER input: logwatch@example.com home=/var/vmail/example.com/logwatch mail=maildir:/var/vmail/example.com/logwatch/Maildir uid=5000 gid=5000 quota_rule=*:storage=0B sieve=/var/vmail/example.com/logwatch/.sieve
    2025-04-04 08:32:34 doveadm(logwatch@example.com)<311522><>: Debug: auth-master: userdb lookup(logwatch@example.com): Finished userdb lookup (username=logwatch@example.com home=/var/vmail/example.com/logwatch mail=maildir:/var/vmail/example.com/logwatch/Maildir uid=5000 gid=5000 quota_rule=*:storage=0B sieve=/var/vmail/example.com/logwatch/.sieve)
    2025-04-04 08:32:34 doveadm(logwatch@example.com)<311522><>: Debug: Added userdb setting: mail=maildir:/var/vmail/example.com/logwatch/Maildir
    2025-04-04 08:32:34 doveadm(logwatch@example.com)<311522><>: Debug: Added userdb setting: plugin/quota_rule=*:storage=0B
    2025-04-04 08:32:34 doveadm(logwatch@example.com)<311522><>: Debug: Added userdb setting: plugin/sieve=/var/vmail/example.com/logwatch/.sieve
    2025-04-04 08:32:34 doveadm(logwatch@example.com): Error: remote(mx2.example.com): doveadm(108.224.189.229,logwatch@example.com): User doesn't exist
    2025-04-04 08:32:34 doveadm(logwatch@example.com): Error: Unknown user in remote
    
    2025-04-04 08:32:34 doveadm: Error: Failed to iterate through some users
    2025-04-04 08:32:34 doveadm: Debug: auth-master: userdb list: Finished listing users
    2025-04-04 08:32:34 doveadm: Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=590,uid=0): Disconnected: Connection closed (fd=9)
    2025-04-04 08:32:34 doveadm: Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=590,uid=0): Disconnected: Connection closed (fd=11)
    
    Then If I run check status
    Code:
    PRD [root@mx1 ~]# doveadm replicator status
    Queued 'sync' requests        0                                                                                             
    Queued 'high' requests        0                                                                                             
    Queued 'low' requests         0                                                                                             
    Queued 'failed' requests      0                                                                                             
    Queued 'full resync' requests 0                                                                                             
    Waiting 'failed' requests     1                                                                                             
    Total number of known users   1                         
    
     
  10. emaddaou

    emaddaou Member

    I could not enter the following in previous post, but here is the output of MX2 server using the same commands
    Code:
    PRD [root@mx2 ~]# doveadm -D sync -A -d
    Debug: Loading modules from directory: /usr/lib/dovecot/modules/doveadm
    Debug: Skipping module doveadm_acl_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_acl_plugin.so: undefined symbol: acl_user_module (this is usually intentional, so just ignore this message)
    Debug: Skipping module doveadm_quota_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_quota_plugin.so: undefined symbol: quota_user_module (this is usually intentional, so just ignore this message)
    Debug: Module loaded: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_sieve_plugin.so
    Debug: Skipping module doveadm_fts_lucene_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_lucene_plugin.so: undefined symbol: lucene_index_iter_deinit (this is usually intentional, so just ignore this message)
    Debug: Skipping module doveadm_fts_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_plugin.so: undefined symbol: fts_user_get_language_list (this is usually intentional, so just ignore this message)
    Debug: Skipping module doveadm_mail_crypt_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/libdoveadm_mail_crypt_plugin.so: undefined symbol: mail_crypt_box_get_pvt_digests (this is usually intentional, so just ignore this message)
    2025-04-04 08:39:32 Debug: Loading modules from directory: /usr/lib/dovecot/modules
    2025-04-04 08:39:32 Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
    2025-04-04 08:39:32 Debug: Loading modules from directory: /usr/lib/dovecot/modules/doveadm
    2025-04-04 08:39:32 Debug: Skipping module doveadm_acl_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_acl_plugin.so: undefined symbol: acl_user_module (this is usually intentional, so just ignore this message)
    2025-04-04 08:39:32 Debug: Module loaded: /usr/lib/dovecot/modules/doveadm/lib10_doveadm_quota_plugin.so
    2025-04-04 08:39:32 Debug: Skipping module doveadm_fts_lucene_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_lucene_plugin.so: undefined symbol: lucene_index_iter_deinit (this is usually intentional, so just ignore this message)
    2025-04-04 08:39:32 Debug: Skipping module doveadm_fts_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_plugin.so: undefined symbol: fts_user_get_language_list (this is usually intentional, so just ignore this message)
    2025-04-04 08:39:32 Debug: Skipping module doveadm_mail_crypt_plugin, because dlopen() failed: /usr/lib/dovecot/modules/doveadm/libdoveadm_mail_crypt_plugin.so: undefined symbol: mail_crypt_box_get_pvt_digests (this is usually intentional, so just ignore this message)
    2025-04-04 08:39:32 Debug: auth-master: userdb list: Started listing users (user_mask=)
    2025-04-04 08:39:32 Debug: auth-master: conn unix:/run/dovecot/auth-userdb: Connecting
    2025-04-04 08:39:32 Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=589,uid=0): Client connected (fd=9)
    2025-04-04 08:39:32 Debug: auth-master: userdb list: Returned username: sysadmins@example.com
    2025-04-04 08:39:32 doveadm(sysadmins@example.com): Debug: auth-master: passdb lookup(sysadmins@example.com): Started passdb lookup
    2025-04-04 08:39:32 doveadm(sysadmins@example.com): Debug: auth-master: conn unix:/run/dovecot/auth-userdb: Connecting
    2025-04-04 08:39:32 doveadm(sysadmins@example.com): Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=589,uid=0): Client connected (fd=11)
    2025-04-04 08:39:32 doveadm(sysadmins@example.com): Debug: auth-master: passdb lookup(sysadmins@example.com): auth PASS input: user=sysadmins@example.com
    2025-04-04 08:39:32 doveadm(sysadmins@example.com): Debug: auth-master: passdb lookup(sysadmins@example.com): Finished passdb lookup (user=sysadmins@example.com )
    2025-04-04 08:39:32 doveadm(sysadmins@example.com)<304949><>: Debug: auth-master: userdb lookup(sysadmins@example.com): Started userdb lookup
    2025-04-04 08:39:32 doveadm(sysadmins@example.com)<304949><>: Debug: auth-master: userdb lookup(sysadmins@example.com): auth USER input: sysadmins@example.com home=/var/vmail/example.com/sysadmins mail=maildir:/var/vmail/example.com/sysadmins/Maildir uid=5000 gid=5000 quota_rule=*:storage=0B sieve=/var/vmail/example.com/sysadmins/.sieve
    2025-04-04 08:39:32 doveadm(sysadmins@example.com)<304949><>: Debug: auth-master: userdb lookup(sysadmins@example.com): Finished userdb lookup (username=sysadmins@example.com home=/var/vmail/example.com/sysadmins mail=maildir:/var/vmail/example.com/sysadmins/Maildir uid=5000 gid=5000 quota_rule=*:storage=0B sieve=/var/vmail/example.com/sysadmins/.sieve)
    2025-04-04 08:39:32 doveadm(sysadmins@example.com)<304949><>: Debug: Added userdb setting: mail=maildir:/var/vmail/example.com/sysadmins/Maildir
    2025-04-04 08:39:32 doveadm(sysadmins@example.com)<304949><>: Debug: Added userdb setting: plugin/quota_rule=*:storage=0B
    2025-04-04 08:39:32 doveadm(sysadmins@example.com)<304949><>: Debug: Added userdb setting: plugin/sieve=/var/vmail/example.com/sysadmins/.sieve
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Effective uid=5000, gid=5000, home=/var/vmail/example.com/sysadmins
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Quota root: name=user backend=dict args=:file:/var/vmail/example.com/sysadmins/.quotausage
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Quota rule: root=user mailbox=* bytes=0 messages=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Quota grace: root=user bytes=0 (10%)
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: quota-dict: user=sysadmins@example.com, uri=file:/var/vmail/example.com/sysadmins/.quotausage, noenforcing=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): dict created (uri=file:/var/vmail/example.com/sysadmins/.quotausage, base_dir=/run/dovecot)
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Namespace inbox: type=private, prefix=, sep=., inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/var/vmail/example.com/sysadmins/Maildir
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: maildir++: root=/var/vmail/example.com/sysadmins/Maildir, index=, indexpvt=, control=, inbox=/var/vmail/example.com/sysadmins/Maildir, alt=
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: quota: quota_over_flag check: quota_over_script unset - skipping
    2025-04-04 08:39:33 doveadm(sysadmins@example.com): Debug: brain M: Namespace  has location maildir:/var/vmail/example.com/sysadmins/Maildir
    2025-04-04 08:39:33 doveadm(sysadmins@example.com): Debug: Mailbox INBOX: Mailbox opened
    2025-04-04 08:39:33 doveadm(sysadmins@example.com): Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:33 doveadm(sysadmins@example.com): Debug: Namespace : Using permissions from /var/vmail/example.com/sysadmins/Maildir: mode=0700 gid=default
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Local mailbox tree: Sent guid=d72f4a0e25d0ee6720530000a31e478d uid_validity=1743704101 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Local mailbox tree: Trash guid=d82f4a0e25d0ee6720530000a31e478d uid_validity=1743704102 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Local mailbox tree: Junk guid=d92f4a0e25d0ee6720530000a31e478d uid_validity=1743688803 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Local mailbox tree: Drafts guid=da2f4a0e25d0ee6720530000a31e478d uid_validity=1743704104 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Local mailbox tree: INBOX guid=db2f4a0e25d0ee6720530000a31e478d uid_validity=1743704105 uid_next=1 subs=no last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Remote mailbox tree: Sent guid=a9b611216194ee67db1a00003c73e406 uid_validity=1743704101 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Remote mailbox tree: Trash guid=aab611216194ee67db1a00003c73e406 uid_validity=1743704102 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Remote mailbox tree: Junk guid=abb611216194ee67db1a00003c73e406 uid_validity=1743688803 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Remote mailbox tree: Drafts guid=acb611216194ee67db1a00003c73e406 uid_validity=1743704104 uid_next=1 subs=yes last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Remote mailbox tree: INBOX guid=adb611216194ee67db1a00003c73e406 uid_validity=1743704105 uid_next=1 subs=no last_change=0 last_subs=0
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Mailbox Drafts: local=da2f4a0e25d0ee6720530000a31e478d/0/1, remote=acb611216194ee67db1a00003c73e406/0/1: GUIDs conflict - will be merged later
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Mailbox INBOX: local=db2f4a0e25d0ee6720530000a31e478d/0/1, remote=adb611216194ee67db1a00003c73e406/0/1: GUIDs conflict - will be merged later
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Mailbox Junk: local=d92f4a0e25d0ee6720530000a31e478d/0/1, remote=abb611216194ee67db1a00003c73e406/0/1: GUIDs conflict - will be merged later
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Mailbox Sent: local=d72f4a0e25d0ee6720530000a31e478d/0/1, remote=a9b611216194ee67db1a00003c73e406/0/1: GUIDs conflict - will be merged later
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Mailbox Trash: local=d82f4a0e25d0ee6720530000a31e478d/0/1, remote=aab611216194ee67db1a00003c73e406/0/1: GUIDs conflict - will be merged later
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Drafts: Mailbox opened
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Drafts: Mailbox opened
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:33 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox INBOX: Mailbox opened
    2025-04-04 08:39:34 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:34 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox INBOX: Mailbox opened
    2025-04-04 08:39:34 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:34 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Junk: Mailbox opened
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Junk: Mailbox opened
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Sent: Mailbox opened
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Sent: Mailbox opened
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:35 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Trash: Mailbox opened
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Trash: Mailbox opened
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Drafts: Mailbox opened
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Change during sync: Remote lost mailbox GUID acb611216194ee67db1a00003c73e406 (maybe it was just deleted?)
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox INBOX: Mailbox opened
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Change during sync: Remote lost mailbox GUID adb611216194ee67db1a00003c73e406 (maybe it was just deleted?)
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Junk: Mailbox opened
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Change during sync: Remote lost mailbox GUID abb611216194ee67db1a00003c73e406 (maybe it was just deleted?)
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Sent: Mailbox opened
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Change during sync: Remote lost mailbox GUID a9b611216194ee67db1a00003c73e406 (maybe it was just deleted?)
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: Mailbox Trash: Mailbox opened
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: brain M: Change during sync: Remote lost mailbox GUID aab611216194ee67db1a00003c73e406 (maybe it was just deleted?)
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Warning: Mailbox changes caused a desync. You may want to run dsync again: Remote lost mailbox GUID acb611216194ee67db1a00003c73e406 (maybe it was just deleted?)
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: User session is finished
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): Waiting for dict to finish pending operations
    2025-04-04 08:39:36 doveadm(sysadmins@example.com)<304949><TZ7dOgTT72c1pwQAox5HjQ>: Debug: dict(file): dict destroyed
    2025-04-04 08:39:36 doveadm(304949): Debug: auth-master: userdb list: Finished listing users
    2025-04-04 08:39:36 doveadm(304949): Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=589,uid=0): Disconnected: Connection closed (fd=9)
    
    2025-04-04 08:39:36 doveadm: Debug: auth-master: conn unix:/run/dovecot/auth-userdb (pid=589,uid=0): Disconnected: Connection closed (fd=11)
    Checking replication status
    Code:
    PRD [root@mx2 ~]# doveadm replicator status
    Queued 'sync' requests        0                                                                                             
    Queued 'high' requests        0                                                                                             
    Queued 'low' requests         0                                                                                             
    Queued 'failed' requests      0                                                                                             
    Queued 'full resync' requests 0                                                                                             
    Waiting 'failed' requests     1                                                                                             
    Total number of known users   1
    
     
  11. emaddaou

    emaddaou Member

    Please note: Only MX2 has authenticated to MX1 MySQL using the following MySQL commands
    Do I need to create the same thing on MX2 as well? but I am not sure how to do this, should I install mariadb server on MX2 first before running the script, hence this way both servers are masters?

    Code:
    CREATE USER 'root'@'mx2.exmaple' IDENTIFIED BY 'MX1_MySQL_PASSWORD';
    GRANT ALL PRIVILEGES ON * . * TO 'root'@'mx2.exmaple' IDENTIFIED BY 'MX1_MySQL_PASSWORD' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
    
    CREATE USER 'root'@'192.168.10.200' IDENTIFIED BY 'MX1_MySQL_PASSWORD';
    GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.10.200' IDENTIFIED BY 'MX1_MySQL_PASSWORD' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
    
    EXIT;
    
     
  12. nhybgtvfr

    nhybgtvfr Well-Known Member HowtoForge Supporter

    ok, now this is confusing.. you say you installed ispconfig on mx2... if so, it should already have mariadb installed and configured.
    i'm not sure why you've created mysql root users for mx2 on mx1...
    both mx1 and mx2 root mysql users should be logging in to the master ispconfig mariadb instance, not each others
     
  13. emaddaou

    emaddaou Member

    I am sorry @nhybgtvfr for confusing, at the moment I can't install 3 servers, so I have to go with 2 servers route; I have only 2 servers right now MX1 and MX2. I am trying to see if I can run 2 ISPConfig servers that is MX1 and MX2 and both of them are masters without using a 3rd server such as Panel to be between the 2 mail server?
     
  14. emaddaou

    emaddaou Member

    @nhybgtvfr I realized so fast that my setup of 2 servers won't work, I moved to 3 servers setup and everything is working, expect that i have some mail replication issues between MX1 and MX2; I did the mirror tho from ispconfig web as well;

    Credentials wise that is DB replication, all working good among the 2 MX servers, whether for IMAP or SMTP authentications; if you can help me with why dovecot replication why is failing, that would be highly appreciated, thank you!

    Code:
    PRD [root@mx1 ~]# doveadm replicator status '*'
    username                                priority fast sync full sync success sync failed
    logwatch@example.com                    none     00:01:23  01:33:58  -            y     
    user1@example.com                        none     00:02:48  01:32:58  -            y     
    user2@example.com                        none     00:04:19  01:32:58  -            y     
    user3@example.com                   none     00:04:19  01:33:58  -            y 
     
  15. nhybgtvfr

    nhybgtvfr Well-Known Member HowtoForge Supporter

    i can't help with that.. i've never actually tried any dovecot replication myself.

    as long as you followed the instructions in the guide Till linked to in post #4 then it should work.
     
  16. pyte

    pyte Well-Known Member HowtoForge Supporter

    You should check what is wrong with your replication setup. If all users fail, that most likely means that your configuration is wrong. Check the Dovecot journal and see if you can find any replication related logs with "journalctl -u dovecot".
    Make sure that the replication configuration is correct on both servers.
     

Share This Page