諸事情により、
前回は、
- 通常はプロバイダのみが検索、
更新処理を行い、 コンシューマ側はスタンバイ状態となっている (クライアント側の設定次第では、 コンシューマ側の検索機能を活用することも可能) - コンシューマは検索結果を提供することはできるが、
更新要求を直接受け付けることはできない - プロバイダがダウンした場合、
すべての要求はコンシューマに委任されるが、 この際更新要求が発生するとクライアントにエラーが通知される - 負荷分散は実現されていなかった
(クライアント側の設定切り替え、 またはロードバランサの導入により対応可能)
このように、
しかし、
Active/ActiveとActive/Standby
LDAPに限らず、
前者では、
また、
前回の設定でも、
OpenLDAPのMirrorMode
OpenLDAP-2.
OpenLDAP-2.
18.2.2.1. マルチマスターレプリケーションに関する正しい議論
- もしいずれかのプロバイダがダウンすると、
他のプロバイダは更新要求を処理し続けることができる - Single Point Of Failureを回避することができる
- プロバイダはディザスタリカバリの観点から物理的に離れた箇所に設置することができる
- 自動フェイルオーバー、
冗長性に優れる
18.2.2.2. マルチマスターレプリケーションに関する誤った議論
- ロードバランシングを行うわけではない
- プロバイダは書き込みを他の全てのサーバに伝えなければならない、
ネットワークトラフィックと書き込みはシングルマスタ時同様、 ネットワーク上に広がっていく。 - サーバのユーティライゼーションやパフォーマンスはシングルマスタ時とそれほど変わりない。最悪、
インデックス処理、 最適化を考えると、 シングルマスタのほうが優れている場合もある。
さらに、
18.2.3.1. ミラーモードのための議論
- 書き込みのためのHAソリューションを提供する
- プロバイダが生きている限り、
書き込み要求は安全に処理される - プロバイダノードは互いにレプリケーションを実行する。それらは常にアクティブであり他へテイクオーバーする準備ができている
(ホットスタンバイ) - Syncreplは障害後の再同期をサポートする
18.2.3.2. ミラーモードに対する議論
- ミラーモードはマルチマスターソリューションを意味するものではない。書き込み要求は1台のサーバのみに発生させなければならないためである。
- ミラーモードはActive/
Activeホットスタンバイとして定義できる。したがって、 ロードバランサなどにより、 どのプロバイダが現在アクティブなのか、 選択させなければならない。 - バックアップとは別物として考える
- Delta-Syncreplは未サポート
つまり、

もしサーバ1に障害が発生した場合には、
また、

ただし、
ミラーモードのマルチマスター的使用方法
前述のように、
したがって、
しかし、
重要なのは、
まず、
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
allow bind_v2
database monitor
database bdb
suffix "dc=example,dc=com"
rootdn "cn=Manager,dc=example,dc=com"
rootpw secret
directory /var/lib/ldap
loglevel 256
moduleload syncprov.la
# Indices to maintain for this database
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
index entryUUID eq,pres
overlay syncprov
# それぞれのノードでユニークなサーバIDをつけること
serverID 1
# 1台目のサーバ情報
syncrepl rid=001
provider=ldap://10.0.0.62
bindmethod=simple
binddn="cn=Manager,dc=example,dc=com"
credentials=secret
searchbase="dc=example,dc=com"
schemachecking=on
type=refreshAndPersist
retry="10 +"
# 2台目のサーバ情報
syncrepl rid=002
provider=ldap://10.0.0.63
bindmethod=simple
binddn="cn=Manager,dc=example,dc=com"
credentials=secret
searchbase="dc=example,dc=com"
schemachecking=on
type=refreshAndPersist
retry="10 +"
# ミラーモードを有効化
mirrormode on
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
allow bind_v2
database monitor
database bdb
suffix "dc=example,dc=com"
rootdn "cn=Manager,dc=example,dc=com"
rootpw secret
directory /var/lib/ldap
loglevel 256
moduleload syncprov.la
# Indices to maintain for this database
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
index entryUUID eq,pres
overlay syncprov
# それぞれのノードでユニークなサーバIDをつけること
serverID 2
# 1台目のサーバ情報
syncrepl rid=001
provider=ldap://10.0.0.62
bindmethod=simple
binddn="cn=Manager,dc=example,dc=com"
credentials=secret
searchbase="dc=example,dc=com"
schemachecking=on
type=refreshAndPersist
retry="10 +"
# 2台目のサーバ情報
syncrepl rid=002
provider=ldap://10.0.0.63
bindmethod=simple
binddn="cn=Manager,dc=example,dc=com"
credentials=secret
searchbase="dc=example,dc=com"
schemachecking=on
type=refreshAndPersist
retry="10 +"
# ミラーモードを有効化
mirrormode on
ミラーモードを設定する上での主なポイントは次の通りです。
- 両ノードのsyncrepl設定を行う
- mirrormode onを指定する
- それぞれのノードでserverIDを指定する
(これ以外の設定は同じ!)
次に、
#!/bin/sh
i=0
host=`hostname --short`
while [ $i -lt 10000 ]; do
echo "dn: cn=${host}_${i},ou=people,dc=example,dc=com"
echo "objectClass: person"
echo "cn: ${host}_${i}"
echo "sn: ${host}_${i}"
echo ""
i=`expr $i + 1`
done
では、
./add_many1.sh | ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret
./add_many1.sh | ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret
筆者の環境では、
# slapcat | grep '^dn: cn=c' | wc -l 19622
# slapcat | grep '^dn: cn=c' | wc -l 19954
このように、
続いて、
最初の例では1回のTCPセッション
#!/bin/sh
i=0
host=`hostname --short`
while [ $i -lt 10000 ]; do
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret <<EOF
dn: cn=${host}${i},ou=people,dc=example,dc=com
objectClass: person
cn: ${host}${i}
sn: ${host}${i}
EOF
i=`expr $i + 1`
done
./add_many2.sh
./add_many2.sh
ここで、
# slapcat | grep '^dn: cn=c' | wc -l 20000
# slapcat | grep '^dn: cn=c' | wc -l 20000
これはあくまでも実験の結果であるため、
これをふまえると、

また、

では、

ロードバランサが不必要となる一方、
ここでは深くふれませんが、
最後に
連載の冒頭から述べてきましたように、
しかし、
2年以上続いた本連載も今回でいったん終了となります。機会があれば、
最後の最後に宣伝ですが、
- システム管理者のためのLDAP徹底理解
太田 俊哉、中満 英生、 堀田 倫英、 菊池 研自 著/ ソフトバンククリエイティブ