slurpd を利用した冗長化

2017-01-04

概要

slurpd を利用し冗長構成を構築する。
前提条件としては、OPEN LDAPサーバが構築されていること

構築環境は以下とする

  • マスター側 192.168.24.100
  • スレーブ側 192.168.24.101

マスター側 (192.168.24.100) の設定

(1)OPEN LDAPのパッケージが導入されているか確認する

# rpm -ql openldap-servers | grep slurpd
/usr/sbin/slurpd
/usr/share/man/man8/slurpd.8.gz

(2)slapd.confのバックアップ

# cp -p /etc/openldap/slapd.conf /etc/openldap/slapd.conf.yyyymmdd

(3)レプリケーション時のログファイルを作成

# mkdir -p /var/log/ldap
# chown ldap:ldap /var/log/ldap
# touch /var/log/ldap/replog
# chmod 600 /var/log/ldap/replog
# chown ldap:ldap /var/log/ldap/replog

(4)slapd.confの編集

# vi /etc/openldap/slapd.conf

replica host="ldap.example.jp"
replogfile /var/log/ldap/replog
binddn="cn=repl,dc=example,dc=jp"
bindmethod=simple
credentials={MD5}qjYRCALao3lp+bMyUtVjaQ==

スレーブ側 (192.168.24.101) のslapd.conf 設定

(1)OPEN LDAP関係のパッケージをインストール

# yum -y install openldap openldap-servers openldap-clients openldap-devel
# rpm -ql openldap-servers | grep slurpd
/usr/sbin/slurpd
/usr/share/man/man8/slurpd.8.gz

ログファイル出力の設定は、以前のブログを参照

(2)マスター側から、slapd.conf をコピーする

マスター側(192.168.24.100)で実施
# scp /etc/openldap/slapd.conf hoge@192.168.24.101:/var/tmp

スレーブ側(192.168.24.101)で実施
# cp -p /etc/openldap/slapd.conf /etc/openldap/slapd.conf.org
# ll /etc/openldap/slapd.conf.org
-rw-r----- 1 root ldap 3799 8月 11 22:19 /etc/openldap/slapd.conf.org

# mv /var/tmp/slapd.conf /etc/openldap/slapd.conf
# chown root:ldap /etc/openldap/slapd.conf
# ll /etc/openldap/slapd.conf
-rw-r----- 1 root ldap 4235 11月 21 13:28 /etc/openldap/slapd.conf

(3)slapd.conf を編集する

# vi /etc/openldap/slapd.conf
マスター側で編集した、slapd.conf の設定は削除する
#ここから
replica host="ldap.example.jp"
replogfile /var/log/ldap/replog
binddn="cn=repl,dc=example,dc=jp"
bindmethod=simple
credentials={MD5}qjYRCALao3lp+bMyUtVjaQ==
#ここまで

#以下を追加
rootdn "cn=repl,dc=example,dc=jp"
rootpw {MD5}qjYRCALao3lp+bMyUtVjaQ==
updatedn "cn=repl,dc=example,dc=jp"
updateref ldap://192.168.24.100:389/

詳細な変更内容は diff の結果を参照
# diff /etc/openldap/slapd.conf /etc/openldap/slapd.conf.org
60,65d59
< access to *
< by self write
< by dn="cn=repl,dc=example,dc=jp" write
< by anonymous auth
< by * none
<
92,93c86,87
< suffix "dc=example,dc=jp"
< rootdn "cn=repl,dc=example,dc=jp"
---
> suffix "dc=my-domain,dc=com"
> rootdn "cn=Manager,dc=my-domain,dc=com"
99d92
< rootpw {MD5}qjYRCALao3lp+bMyUtVjaQ==
118,121d110
<
< ## REPLICATION slurpd ##
< updatedn "cn=repl,dc=example,dc=jp"
< updateref ldap://192.168.24.100:389/

スレーブ側にマスター側のデータ反映(LDAP登録された DB)

マスター側のデータをスレーブ側に反映する。
手順としては、マスター側で全データを含むLDIFを作成し、スレーブ側でインポートする

(1)マスター側のLDIFをスレーブ側に転送

マスター側(192.168.24.100)で実施

DB のバックアップ
# slapcat -l /var/tmp/ldap1_slapcat.ldif

スレーブ側に、LDAPのバックアップファイルを転送
# scp /var/tmp/ldap1_slapcat.ldif hoge@192.168.24.101:/var/tmp

(2)スレーブ側でLDIFをインポート

スレーブ側(192.168.24.101)で実施

LDAPを停止する
# /etc/init.d/ldap stop
slapd を停止中: [ OK ]

バックアップをslapadd コマンドで登録する
# slapadd -l /var/tmp/ldap1_slapcat.ldif
bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap: (2)
Expect poor performance for suffix dc=example,dc=jp.

インポート時に以下のエラーが表示されているので、DB_CONFIG fileを作成する
Warning – No DB_CONFIG file found in directory /var/lib/ldap

# cp -p /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap:ldap /var/lib/ldap/*

(3)LDAP起動

マスター側(192.168.24.100)で実施
LDAPサーバの再起動
# /etc/init.d/ldap restart

スレーブ側(192.168.24.101)で実施
LDAPサーバの再起動
# /etc/init.d/ldap restart

動作確認

マスター側でデータを登録し、スレーブ側で反映されているか確認する

(1)登録用 ldif を作成する

マスター側(192.168.24.100)で実施

# cd /var/tmp/
# vi hoge.ldif
dn: uid=hoge,ou=People,dc=example,dc=jp
uid: hoge
cn: hoge
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {MD5}3TczkguYZg+bQ/I1yIIAuw==
shadowLastChange: 14780
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 501
gidNumber: 501
homeDirectory: /home/hoge

dn: cn=hoge,ou=Group,dc=example,dc=jp
objectClass: posixGroup
objectClass: top
cn: hoge
userPassword: {crypt}x
gidNumber: 501

(2)ldapを登録する

マスター側(192.168.24.100)で実施

# ldapadd -h localhost -x -D "cn=Manager,dc=example,dc=jp" -W -f hoge.ldif

(3)登録されているか確認する

スレーブ側(192.168.24.101)で実施

# ldapsearch -x -D "cn=repl,dc=example,dc=jp" -W -b "dc=example,dc=jp" "uid=hoge"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=jp> with scope subtree
# filter: uid=hoge
# requesting: ALL
#

# hoge, People, example.jp
dn: uid=hoge,ou=People,dc=example,dc=jp
uid: hoge
cn: hoge
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e01ENX0zVGN6a2d1WVpnK2JRL0kxeUlJQXV3PT0=
shadowLastChange: 14780
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 501
gidNumber: 501
homeDirectory: /home/hoge

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

(4)テスト用のデータを削除

マスター側(192.168.24.100)で実施

# ldapdelete -x -D "cn=Manager,dc=example,dc=jp" -W "uid=hoge,ou=People,dc=example,dc=jp"
# ldapdelete -x -D "cn=Manager,dc=example,dc=jp" -W "cn=hoge,ou=Group,dc=example,dc=jp"

スポンサーリンク