1.4. 在两个 Dovecot 服务器之间配置复制


通过双向复制,您可以使 Dovecot 服务器高度可用,而 IMAP 和 POP3 客户端都可以访问这两个服务器上的邮箱。Dovecot 会跟踪每个邮箱的索引日志中的更改,并以安全的方式解决冲突。

在两个复制合作伙伴上执行这个流程。

注意

复制只在服务器对之间正常工作。因此,在大型集群中,您需要多个独立的后端对。

先决条件

  • 两个服务器都使用相同的身份验证后端。最好使用 LDAP 或 SQL 来集中维护帐户。
  • Dovecot 用户数据库配置支持用户列表。使用 doveadm user '*' 命令来验证这一点。
  • Dovecot 以 vmail 用户身份而不是用户的 ID (UID)访问文件系统上的邮箱。

流程

  1. 创建 /etc/dovecot/conf.d/10-replication.conf 文件,并在其中执行以下步骤:

    1. 启用 notifyreplication 插件:

      mail_plugins = $mail_plugins notify replication
    2. 添加 service replicator 部分:

      service replicator {
        process_min_avail = 1
      
        unix_listener replicator-doveadm {
          mode = 0600
          user = vmail
        }
      }

      使用这些设置,当 dovecot 服务启动时,Dovecot 会至少启动一个 replicator 进程。另外,本节定义了对 replicator-doveadm 套接字的设置。

    3. 添加 service aggregator 部分来配置 replication-notify-fifo 管道和 replication-notify 套接字:

      service aggregator {
        fifo_listener replication-notify-fifo {
          user = vmail
        }
        unix_listener replication-notify {
          user = vmail
        }
      }
    4. 添加 service doveadm 部分来定义复制服务的端口:

      service doveadm {
        inet_listener {
          port = 12345
        }
      }
    5. 设置 doveadm 复制服务的密码:

      doveadm_password = replication_password

      两个服务器上的密码必须相同。

    6. 配置复制伙伴:

      plugin {
        mail_replica = tcp:server2.example.com:12345
      }
    7. 可选:定义并行 dsync 进程的最大数量:

      replication_max_conns = 20

      replication_max_conns 的默认值为 10

  2. /etc/dovecot/conf.d/10-replication.conf 文件设置安全权限:

    # chown root:root /etc/dovecot/conf.d/10-replication.conf
    # chmod 600 /etc/dovecot/conf.d/10-replication.conf
  3. 启用 nis_enabled SELinux 布尔值,以允许 Dovecot 打开 doveadm 复制端口:

    setsebool -P nis_enabled on
  4. firewalld 规则配置为只允许复制伙伴访问复制端口,例如:

    # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.0.2.1/32" port protocol="tcp" port="12345" accept"
    # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv6" source address="2001:db8:2::1/128" port protocol="tcp" port="12345" accept"
    # firewall-cmd --reload

    IPv4 的子网掩码 /32 和 IPv6 子网掩码 /128 限制对指定地址的访问。

  5. 在其他复制伙伴上也执行这个流程。
  6. 重新载入 Dovecot:

    # systemctl reload dovecot

验证

  1. 在一个服务器上的邮箱中执行一个操作,然后验证 Dovecot 是否将更改复制到其他服务器上。
  2. 显示 replicator 状态:

    # doveadm replicator status
    Queued 'sync' requests        0
    Queued 'high' requests        0
    Queued 'low' requests         0
    Queued 'failed' requests      0
    Queued 'full resync' requests 30
    Waiting 'failed' requests     0
    Total number of known users   75
  3. 显示特定用户的 replicator 状态:

    # doveadm replicator status example_user
    username        priority  fast sync  full sync  success sync  failed
    example_user    none      02:05:28   04:19:07   02:05:28      -

其他资源

  • dsync(1) 手册页
  • /usr/share/doc/dovecot/wiki/Replication.txt
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.