15.26. レプリケーション関連の問題のトラブルシューティング
ここでは、いくつかのエラーメッセージを挙げ、その原因と対処法を説明します。
エラーログレベルを 8192 (レプリケーションのデバッグ) に設定すると、レプリケーションに関する詳細なデバッグ情報を取得できます。「ログレベルの設定」を参照してください。
エラーログレベルを 8192 に変更するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-errorlog-level=8192
ログレベルは加算されるため、上記のコマンドを実行すると、エラーログに過剰なメッセージが表示されます。だから、判断して使用してください。
15.26.1. 考えられるレプリケーション関連のエラーメッセージ
以下のセクションでは、数多くの一般的なレプリケーションの問題を説明します。
agmt=%s (%s:%d) Replica has a different generation ID than the local data
- 理由: このメッセージの最初に指定されたコンシューマーがまだ (正常に) 初期化されていないか、異なるルートサプライヤーから初期化されました。
- 影響: ローカルのサプライヤーは、コンシューマーにデータを複製することはありません。
- 対策: コンシューマーを初期化する前に発生する場合は、このメッセージを無視してください。または、メッセージが永続的であれば、コンシューマーを再初期化します。マルチサプライヤー環境では、すべてのサーバーは、ルートサプライヤーから直接または間接的に 1 回のみ初期化する必要があります。たとえば、M1 は M2 および M4 を初期化し、M2 は M3 の初期化を行います。重要なことは、M2 は、M2 自身の初期化が完了するまで M3 の初期化を開始しないでください (M1 の Web コンソール、もしくは M1 または M2 のエラーログから合計更新ステータスを確認してください)。また、M2 は M1 を再び初期化しないでください。
Warning: data for replica's was reloaded, and it no longer matches the data in the changelog.Recreating the changelog file.This could affect replication with replica's consumers, in which case the consumers should be reinitialized.
- 理由: このメッセージは、サプライヤーが再開した場合にのみ表示されます。これは、サプライヤーが changelog を書き込みできないか、最後のシャットダウン時に RUV を消去できなかったことを示しています。前者はディスク領域の問題、後者はサーバーのクラッシュや不適切なシャットダウンなどが原因です。
- 影響: コンシューマーの
maxcsn
がサーバーの changelog に存在しない場合、サーバーはコンシューマーに変更を送信できません。 - 対策: ディスク領域と考えられるコアファイル (サーバーの logs ディレクトリー配下) を確認します。これが単一サプライヤーレプリケーションの場合は、コンシューマーを再初期化します。そうでなければ、後にサーバーがコンシューマーの CSN を見つけられないと訴えた場合に、コンシューマーが他のサプライヤーから CSN を入手できるかどうかを確認します。そうでない場合には、コンシューマーを再初期化します。
agmt=%s(%s:%d): Can't locate CSN %s in the changelog (DB rc=%d).The consumer may need to be reinitialized.
- 理由: ディスクが満杯になったり、またはサーバーが適切にシャットダウンしたりしたたあります。あります。
- 影響: ローカルサーバーは、コンシューマーが再初期化されたり、他のサプライヤーから CSN を取得するまで、そのコンシューマーへの追加の変更を送信できません。
- 対策: これが単一サプライヤーレプリケーションの場合は、コンシューマーを再初期化します。そうでない場合は、コンシューマーが他のサプライヤーから CSN を取得できるかどうかを確認します。そうでない場合には、コンシューマーを再初期化します。
Too much time skew
- 理由: ホストマシンのシステムクロックは同期が非常に低下します。
- 影響: システムクロックは、CSN の一部を生成するのに使用されます。複数のサプライヤー間で変更シーケンスを反映させるために、サプライヤーは、他のサプライヤーのリモートクロックに基づいて、ローカルクロックを転送します。調整は一定量に制限されているため、許可される制限を超過すると、レプリケーションセッションが中止します。
- 対策: Directory Server ホストマシンでシステムクロックを同期します。該当する場合は、それらのホストでネットワークタイムプロトコル (
ntp
) デーモンを実行します。
agmt=%s(%s:%d): Warning: Unable to send endReplication extended operation (%s)
- 理由: コンシューマーが応答しない。
- 影響: コンシューマーが再起動せずに回復すると、サプライヤーからリリースロックメッセージを受け取らないと、コンシューマーのレプリカが永久にロックされる可能性が高くなります。
- 対策: コンシューマーがあらゆるサプライヤーから新しい変更を受け取ったり、レプリケーションモニターを開始できる場合に、このコンシューマーの全サプライヤーが、レプリカがビジーであることを警告しているかどうかを確認します。レプリカが永久にロックされ、サプライヤーを取得できない場合は、コンシューマーを再起動します。
Changelog is getting too big.
- 理由: changelog のパージがオフになっていて、それがデフォルトの設定になっているか、changelog のパージがオンになっていても一部のコンシューマーがサプライヤーよりもずっと遅れているかのどちらかです。
- 対策: デフォルトでは、changelog のパージはオフになっています。コマンドラインからこれを有効にするには、以下のように ldapmodify を実行します。
ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=changelog5,cn=config changetype: modify add: nsslapd-changelogmaxage nsslapd-changelogmaxage: 1d
1d は 1 日を意味します。その他の有効な時間単位は、秒 (s)、分 (m)、時 (h)、および週 (w) になります。0 の場合は、パージをオフにします。changelog パージがオンになっている場合、5 分ごとに起動するパージスレッドは、そのエイジが nsslapd-changelogmaxage の値よりも大きく、そのサプライヤー (サプライヤーまたはハブ) のすべての直接コンシューマーに再生されている場合にその変更を削除します。パージのしきい値に達したときに changelog がパージされていないと思われる場合は、すべてのコンシューマー間でレプリケーションモニターからの最大遅延時間を確認します。パージのしきい値に関わらず、すべてのコンシューマーによって再生される前に変更がパージされることはありません。
The Replication Monitor is not responding.
- 理由: LDAPS ポートは一部のレプリカ合意で指定されますが、証明書データベースは Replication Monitor によって指定されず、アクセスできません。LDAPS ポートに問題がある場合は、レプリケーショントポロジー内のいずれかのサーバーがハングする可能性があります。
- 対策: Replication Monitor の設定ファイルで TLS ポートを TLS 以外のポートにマッピングします。たとえば、636 が TLS ポートであり、389 が TLS 以外のポートである場合は、
[connection]
セクションに以下の行を追加します。*:636=389:*:password
In the Replication Monitor, some consumers show just the header of the table.
- 理由: 対応するサプライヤーから作成された変更はありません。この場合、ヘッダー部分の
MaxCSN
: は "None" である必要があります。 - 対策: サプライヤーからの変更がない場合は、何も間違ってありません。