Red Hat Training

A Red Hat training course is available for RHEL 8

9.4. 2 つの Dovecot サーバー間のレプリケーションの設定

双方向のレプリケーションを使用すると、Dovecot サーバーを高可用性にすることができ、IMAP および POP3 クライアントは両方のサーバーのメールボックスにアクセスできます。Dovecot は、各メールボックスのインデックスログの変更を追跡し、競合を安全な方法で解決します。

両方の複製パートナーでこの手順を実行します。

注記

レプリケーションは、サーバーペア間でのみ機能します。したがって、大規模なクラスターでは、複数の独立したバックエンドペアが必要になります。

前提条件

  • 両方のサーバーが同じ認証バックエンドを使用します。できれば、LDAP または SQL を使用して、アカウントを集中管理してください。
  • Dovecot ユーザーデータベース設定は、ユーザーリストをサポートします。これを確認するには、doveadm user '*' コマンドを使用します。
  • Dovecot は、ユーザー ID (UID) ではなく、vmail ユーザーとしてファイルシステム上のメールボックスにアクセスします。

手順

  1. /etc/dovecot/conf.d/10-replication.conf ファイルを作成し、その中で次の手順を実行します。

    1. notify および replication プラグインを有効にします。

      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 は 1 つ以上のレプリケータープロセスを開始します。さらに、このセクションは 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. Dovecot が doveadm レプリケーションポートを開くことができるように、SELinux ブール値 nis_enabled を有効にします。

    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. 1 つのサーバーのメールボックスでアクションを実行し、Dovecot が変更を他のサーバーにレプリケートしたかどうかを確認します。
  2. レプリケーターステータスを表示します。

    # 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. 特定のユーザーのレプリケーターステータスを表示します。

    # 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) man ページ
  • /usr/share/doc/dovecot/wiki/Replication.txt