Cyrus IMAPdのレプリケーション

バージョンが上がって仕様変更になったので、設定し直した。

環境

  • FreeBSD 14.1
  • Cyrus IMAPd 3.8

設定

モードの選択

Cyrus IMAPdのレプリケーションには、二つのモードが用意されている。

  • ローリングモード:継続的に実行
  • 周期モード:cronなどで周期的に実行

ローリングモードで設定することにする。

マスターサーバー側:imapd.conf

マスターサーバー側の/usr/local/etc/imapd.confに次の設定を追加。

sync_host: replica.server.jp
sync_authname: cyrus # Cyrus IMAPd管理者アカウント名
sync_password: 《パスワード》
sync_log: true

以前はsync_portsync_server用のポート番号を指定したり、/etc/servicesにそのポート番号を登録したりする必要があったが、3.0以降では不要となった。以前と同じようにsync_serverを使用することもできるが、デフォルトではimap (ポート番号143) を使用する。

レプリカサーバー側では、特に設定の必要なし。

設定パラメータ

imapd.conf用レプリケーション関連のオプションパラメータの抜粋。

  • sync_authname (デフォルト: none)
    同期サーバーへの認証時に使用する認証名。そのチャネルにのみ適用する場合は、チャネル名をプレフィックスとして付けます。
  • sync_batchsize (デフォルト: 8192)
    単一のメールボックス レプリケーションでアップロードするメッセージの数。デフォルトは 8192 です。メールボックスに追加されたメッセージ数がこれより多い場合は、合成部分状態を生成して送信します。
  • sync_cache_db (デフォルト: twoskip)
    レプリケーション キャッシュに使用する cyrusdb バックエンド。
    指定可能な値: skiplist, sql, twoskip, zeroskip
  • sync_cache_db_path (デフォルト: none)
    レプリケーション キャッシュのパス。そのチャネルに適用するチャネル名のプレフィックスを付けます。注意: バックエンドごとに異なるパスを設定することが非常に重要です。
  • sync_host (デフォルト: none)
    sync_client(8) によってレプリケーションアクションが送信されるホスト (sync_server(8) を実行しているレプリカ) の名前。そのチャネルにのみ適用されるようにチャネル名をプレフィックスとして付けます。
  • sync_log (デフォルト: 0)
    lmtpd(8)、imapd(8)、pop3d(8)、nntpd(8)によるレプリケーションアクションのログ記録を有効にします。ログ {configdirectory}/sync/log は、sync_client(8) によってローリングモードのレプリケーションに使用されます。
  • sync_log_chain (デフォルト: 0)
    sync_server によるレプリケーション アクションのログ記録も有効にして、レプリカのチェーンを可能にします。これを ‘B’ で使用して、A => B => C のレプリケーション レイアウトを作成します。
  • sync_log_channels (デフォルト: none)
    指定されている場合、各「チャネル」で指定されたディレクトリ内の複数のログ ファイルにすべてのイベントが記録されます。各チャネルは、メッシュ レプリケーション スキーム内の複数の sync_client(8) や、ローリング検索インデックス更新用の squatter(8) などによって個別に処理できます。
    デフォルトの同期チャネルを意味するには、””(2 文字の文字列 U+22 U+22)を使用できます。
  • sync_log_unsuppressable_channels (デフォルト: squatter)
    指定されている場合、名前付きチャネルは sync_log_chain:off 設定の影響から除外されます。つまり、sync_server プロセスによって常にログに記録されます。これは、レプリカでローリング検索インデックスを許可する場合にのみ役立ちます。
  • sync_password (デフォルト: none)
    同期サーバーへの認証時に使用するデフォルトのパスワード。そのチャンネルにのみ適用する場合は、チャンネル名をプレフィックスとして付けます。
  • sync_port (デフォルト: none)
    レプリカ ホスト上のレプリケーション サービスのサービス名 (またはポート番号)。そのチャネルにのみ適用するには、チャネル名をプレフィックスとして付けます。指定しない場合、sync_try_imap が「yes」(デフォルト) に設定されている場合、レプリケーション クライアントは最初にimap (ポート 143) を試して、imapd がレプリケーションをサポートしているかどうかを確認します。それ以外の場合は、デフォルトでcsync(通常はポート 2005) になります。
  • sync_realm (デフォルト: none)
    同期サーバーへの認証時に使用する認証領域。そのチャネルにのみ適用する場合は、チャネル名をプレフィックスとして付けます。
  • sync_repeat_interval (デフォルト: 1s)
    ローリング レプリケーション モードでのレプリケーション実行間の最小間隔。レプリケーション実行にこの時間よりも長い時間がかかる場合は、すぐに繰り返します。そのチャネルにのみ適用するには、チャネル名をプレフィックスとして付けます。
    下位互換性のため、単位が指定されていない場合は秒とみなされます。
  • sync_rightnow_channel (デフォルト: none)
    設定されている場合、このチャネルに対して sync_client が直ちに実行されます。チャネルと同様に、デフォルトのチャネルを同期するには、この値を ‘””’ に設定してください。
  • sync_shutdown_file (デフォルト: none)
    sync_client(8) に次の機会にシャットダウンするように指示するために使用される単純なラッチ。実行中のプロセスにシグナルを送信するよりも安全です。そのチャネルにのみ適用するには、チャネル名をプレフィックスとして付けます。
  • sync_timeout (デフォルト: 30m)
    レプリケーション ピア (クライアントまたはサーバー) と通信するときに、タイムアウト エラーを返す前に応答を待機する時間。最小期間は 3 秒、デフォルトは 30 分です。
    下位互換性のため、単位が指定されていない場合は秒とみなされます。
  • sync_try_imap (デフォルト: 1)
    sync_clientcsync にフォールバックする前に IMAP 接続を試みるかどうか。これを「no」に設定すると、sync_clientcsync のみを使用します。そのチャネルにのみ適用するには、チャネル名をプレフィックスとして付けます。

トラブルシュート

認証に失敗する

レプリカサーバー側で、次のようなエラーが出てsync_clientが実行できなかった。

badlogin: replica.server.jp [11.22.33.44] DIGEST-MD5 (cyrus-admin) [SASL(-1): generic failure: unable to canonify user and get auxprops]

調べた結果、saslauthdの設定の問題だと判明。

/usr/local/etc/sasldb2.dbのオーナーがroot:wheelになっていたのが原因だった。これをcyrus:mailに変更してやり、問題解決。

# sudo chown cyrus:mail /usr/local/etc/sasldb2.db

参考

タイトルとURLをコピーしました