1.4. 2 つの Dovecot サーバー間のレプリケーションの設定
双方向のレプリケーションを使用すると、Dovecot サーバーを高可用性にすることができ、IMAP および POP3 クライアントは両方のサーバーのメールボックスにアクセスできます。Dovecot は、各メールボックスのインデックスログの変更を追跡し、競合を安全な方法で解決します。
両方の複製パートナーでこの手順を実行します。
レプリケーションは、サーバーペア間でのみ機能します。したがって、大規模なクラスターでは、複数の独立したバックエンドペアが必要になります。
前提条件
- 両方のサーバーが同じ認証バックエンドを使用します。できれば、LDAP または SQL を使用して、アカウントを集中管理してください。
-
Dovecot ユーザーデータベース設定は、ユーザーリストをサポートします。これを確認するには、
doveadm user '*'
コマンドを使用します。 -
Dovecot は、ユーザー ID (UID) ではなく、
vmail
ユーザーとしてファイルシステム上のメールボックスにアクセスします。
手順
/etc/dovecot/conf.d/10-replication.conf
ファイルを作成し、その中で次の手順を実行します。notify
およびreplication
プラグインを有効にします。mail_plugins = $mail_plugins notify replication
mail_plugins = $mail_plugins notify replication
Copy to Clipboard Copied! service replicator
セクションを追加します。service replicator { process_min_avail = 1 unix_listener replicator-doveadm { mode = 0600 user = vmail } }
service replicator { process_min_avail = 1 unix_listener replicator-doveadm { mode = 0600 user = vmail } }
Copy to Clipboard Copied! これらの設定により、
dovecot
サービスの開始時に、Dovecot は 1 つ以上のレプリケータープロセスを開始します。さらに、このセクションはreplicator-doveadm
ソケットの設定を定義します。service aggregator
セクションを追加して、replication-notify-fifo
パイプとreplication-notify
ソケットを設定します。service aggregator { fifo_listener replication-notify-fifo { user = vmail } unix_listener replication-notify { user = vmail } }
service aggregator { fifo_listener replication-notify-fifo { user = vmail } unix_listener replication-notify { user = vmail } }
Copy to Clipboard Copied! service doveadm
セクションを追加して、レプリケーションサービスのポートを定義します。service doveadm { inet_listener { port = 12345 } }
service doveadm { inet_listener { port = 12345 } }
Copy to Clipboard Copied! doveadm
レプリケーションサービスのパスワードを設定します。doveadm_password = replication_password
doveadm_password = replication_password
Copy to Clipboard Copied! パスワードは、両方のサーバーで同じにする必要があります。
レプリケーションパートナーを設定します。
plugin { mail_replica = tcp:server2.example.com:12345 }
plugin { mail_replica = tcp:server2.example.com:12345 }
Copy to Clipboard Copied! オプション: 並列
dsync
プロセスの最大数を定義します。replication_max_conns = 20
replication_max_conns = 20
Copy to Clipboard Copied! replication_max_conns
のデフォルト値は10
です。
/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
# chown root:root /etc/dovecot/conf.d/10-replication.conf # chmod 600 /etc/dovecot/conf.d/10-replication.conf
Copy to Clipboard Copied! Dovecot が
doveadm
レプリケーションポートを開くことができるように、SELinux ブール値nis_enabled
を有効にします。setsebool -P nis_enabled on
setsebool -P nis_enabled on
Copy to Clipboard Copied! レプリケーションパートナーのみがレプリケーションポートにアクセスできるように、
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
# 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
Copy to Clipboard Copied! IPv4 アドレスのサブネットマスク
/32
と IPv6 アドレスのサブネットマスク/128
は、指定されたアドレスへのアクセスを制限します。- この手順は、他のレプリケーションパートナーでも実行します。
Dovecot をリロードします。
systemctl reload dovecot
# systemctl reload dovecot
Copy to Clipboard Copied!
検証
- 1 つのサーバーのメールボックスでアクションを実行し、Dovecot が変更を他のサーバーにレプリケートしたかどうかを確認します。
レプリケーターステータスを表示します。
doveadm replicator status
# 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
Copy to Clipboard Copied! 特定のユーザーのレプリケーターステータスを表示します。
doveadm replicator status example_user
# 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 -
Copy to Clipboard Copied!