OpenLDAPサーバーの二重化
OpenLDAP のsyncrepl と keepalived を使って、OpenLDAPのフェイルオーバーを実現するときのメモ。OSは、CentOS4.5。
マシンは2台で以下のとおり。
ldap01 eth0: 192.168.244.101/24
ldap02 eth0: 192.168.244.102/24
virtual ip は、 192.168.244.100/24
- keepalived のインストール
# yum -y install keepalived
- 設定
/etc/keepalived/keepalived.conf は以下のとおり
2台とも同じ設定ファイルにしてOK。先に起動した方がマスターになる。
! Configuration File for keepalived global_defs { notification_email { foo@foo.bar } notification_email_from foo@foo.bar smtp_server localhost smtp_connect_timeout 30 router_id MY_LDAP } vrrp_instance my_ldap { state BACKUP interface eth0 garp_master_delay 5 virtual_router_id 1 priority 100 nopreempt advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.244.100/24 dev eth0 } notify_master "/etc/keepalived/ldap.sh active" notify_backup "/etc/keepalived/ldap.sh backup" notify_fault "/etc/keepalived/ldap.sh fault" notify "/etc/keepalived/ldap.sh status" }
サーバーの状態が変わったときに呼び出されるスクリプトは任意のものを指定できる。
/etc/keepalived/ldap.sh は以下のとおり。
#!/bin/bash case "$1" in active) logger ">>active" cd /etc/openldap ln -sf slapd.conf.master slapd.conf logger "result $?" service ldap stop service ldap start logger "<<active" ;; backup) logger ">>backup" cd /etc/openldap ln -sf slapd.conf.slave slapd.conf logger "result $?" service ldap stop service ldap start logger "<<backup" ;; status) logger ">>status" logger "<<status" ;; fault) logger ">>fault" logger "<<fault" ;; esac
あらかじめ、OpenLDAPのマスター用の設定ファイルと、スレーブ用の設定ファイルを、
/etc/openldap/slapd.conf.master /etc/openldap/slapd.conf.slave
という名前で用意しておき、slapd.conf はシンボリックリンクにして切り替える方法を考えてみた。
/etc/openldap/slapd.conf.master の内容は以下。
前略 # For master index entryCSN,entryUUID eq
設定の最後に追加するだけ。
/etc/openldap/slapd.conf.slave の内容は以下。
設定の最後に以下を追加するだけ。
前略 # For slave index entryCSN,entryUUID eq syncrepl rid=137 provider=ldap://master.rukatan.com:389 type=refreshOnly searchbase="dc=rukatan,dc=com" schemachecking=off bindmethod=simple binddn="cn=root,dc=rukatan,dc=com" credentials=********
設定は、syncrepl を利用している。