OpenLDAPサーバーの冗長化(Ubuntu)

ALL
スポンサーリンク
スポンサーリンク

はじめに

Ubuntuでの、OpenLDAP LDAPサーバーの冗長化の設定方法です。

本記事では、すでにLDAPサーバーが動作していることを前提に、LDAPサーバーのエントリを別のサーバに一方向で同期させる、レプリケーション機能を設定します。

なお、OpenLDAP では、データの同期元をプロバイダ、同期先をコンシューマといいます。以降ではその名称で記載しています。

プロバイダの設定

プロバイダ(同期元)での設定です。

OpenLDAP LDAPサーバーの冗長化に際し、すでにLDAPサーバが動作していることを本記事では前提としていて、そのすでに稼働しているLDAPサーバーをプロバイダとして設定します。

では、レプリケーションの設定手順です。

次の内容で mod_syncprov.ldif ファイルを作成します。
このファイル名は、後の手順で ldapadd実行時に指定しますので、その時に名前を合わせればファイル名はなんでも構いません。

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: syncprov.la

olcModulePath には、syncprov.la があるパスを指定します。Ubuntuでは /usr/lib/ldap です。

次のコマンドを実行します。

ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif

次の内容で syncprov.ldif ファイルを作成します。
このファイル名は、後の手順で ldapadd実行時に指定しますので、その時に名前を合わせればファイル名はなんでも構いません。

dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100

次のコマンドを実行します。

ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif

これで、プロバイダ側の設定は完了です。

なお、このレプリケーション機能の設定では、コンシューマから TCP の389番ポートから接続してきます。その接続をファイアウォールで許可しておいてください。

ufw では次のコマンドで TCPの389番への接続を許可します。

ufw allow 389/tcp

コンシューマの設定

コンシューマ(同期先)での設定です。

OpenLDAP LDAPサーバーの冗長化に際し、すでにLDAPサーバが動作していることを本記事では前提としていて、すでに稼働しているLDAPサーバーは先の手順でプロバイダとして設定しました。

冗長化に際し、2台目となるLDAPサーバが必要なので、立ち上げてください。
DNSドメイン名やDN などは、LDAPサーバ(プロバイダ)と同じにして構築してください。

エントリについては、本記事の設定後に、プロバイダから同期されてきますので、設定不要です。

レプリケーションの設定です。

次の内容で syncrepl.ldif ファイルを作成します。
このファイル名は、後の手順で ldapadd実行時に指定しますのでファイル名はなんでも構いません。

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://xx.xx.xx.xx:389/
  bindmethod=simple
  binddn="cn=admin,dc=xxxx,dc=xxx,dc=xxx"
  credentials=XXXXX
  searchbase="dc=xxxx,dc=xxx,dc=xxx"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 5 300 3"
  • type=refreshAndPersist
    LDAPサーバ(プロバイダー)の 389/tcp への接続状態を維持し、エントリ変更をリアルタイムにプロバイダーへ反映する方式です。
  • olcSyncRepl: rid=001
    rid はLDAPサーバ(コンシューマ)の識別番号を 999以下の任意の値で指定します。複数LDAPサーバ(コンシューマ)を設定する場合は、重複しない値を設定してください。
  • provider
    xx.xx.xx.xx の箇所は、LDAPサーバ(プロバイダー)のアドレスを指定してください。
  • binddn , searchbase
    LDAPサーバ(プロバイダー)と同じ情報を設定してください。
  • credentials
    LDAPサーバ(プロバイダ)のLDAP管理者パスワードを指定してください。
    コンシューマ側のパスワードではないことに注意してください。
  • retry
    レプリケーション失敗時のリトライ設定です。
    [リトライ間隔(秒)] [リトライ回数] [リトライ回数試行後の再リトライまでの間隔(秒)] [再リトライ回数] の順に指定します。

次のコマンドを実行します。

ldapadd -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif

これで、設定は完了です。

レプリケーションのテスト

コンシューマ側でldapに登録されているエントリを確認します。

例えば、次のような形式でコマンドを実行します。

ldapsearch -x -h localhost -b 'ou=people, dc=xxxx,dc=xxx,dc=xxx'

この状態で、プロバイダ側でエントリが登録されると、すぐにコンシューマ側にも反映されます。
上記のコマンドを実行して、確認してみてください。

なお、本記事でのレプリケーション機能の設定は、エントリの同期はプロバイダからコンシューマへの一方向です。
コンシューマ側でエントリを登録しようとしても出来ません。

LDAPクライアントの設定

すでにldapクライアントとしての設定は済んでいることとします。

/etc/nslcd.conf ファイルで、次のようにLDAPサーバの指定にプロバイダに加えて、コンシューマを追加します。

uri ldap://xx.xx.xx.xx ldap://yy.yy.yy.yy

設定を反映させます。

service nslcd restart

これで、設定は完了です。

参考

第20回 OpenLDAPの冗長化対策【2】 | gihyo.jp
LDAPサーバ間でのデータの同期をしよう! – 株式会社ネディア │ネットワークの明日を創る│群馬
Ubuntu 22.04 LTS : OpenLDAP : レプリケーション : Server World

コメント