そろそろLDAPにしてみないか?

第21回(最終回) OpenLDAPの冗長化対策【3】

この記事を読むのに必要な時間:およそ 6 分

続いて,別のスクリプト(リスト4)を使って同様の実験を行ってみました。こちらもそれぞれのノードで1万件のデータを登録するスクリプトですが,先ほどと異なり,データ1件1件に対してldapaddコマンドを使用しています。

最初の例では1回のTCPセッション(LDAPセッション)で一気に1万件のデータを追加していましたが,今回はldapaddコマンドを1万回実施してデータを登録しています(1万回のTCPセッション)⁠当然ネットワークのオーバーヘッドを考えると,前者よりも当然追加スループットは低い(約33件/秒)ので,その分同時書き込みが発生する可能性も低くなるはずです。

リスト4 add_many2.sh

#!/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

cl1というノードで実行

./add_many2.sh

cl2というノードで実行

./add_many2.sh

ここで,先ほど同様整合性のチェックを行ってみると,次リストのように,33件/秒という同時更新処理を行ったにもかかわらず,何度実験を行っても不整合が発生することはありませんでした。

c1というノードで実行

# slapcat | grep '^dn: cn=c' | wc -l 
20000

c2というノードで実行

# slapcat | grep '^dn: cn=c' | wc -l 
20000

これはあくまでも実験の結果であるため,⁠33件追加/秒という更新処理の環境下では同時更新でも不整合が絶対に発生しない」と断言できるものではありません。しかし,通常の運用であれば,複数のクライアントからこのような大量の更新処理が発生するのは希なはずです。従って,複数のクライアントから同時に大量のバッチ処理などを行ったりしない限り,このような条件下では検索,更新ともに単純にロードバランサで処理することができるのです※3)⁠

これをふまえると,多くの環境では,次のようなシンプルな形で冗長化+検索時の負荷分散を実現させることができます。

図3 ミラーモードをマルチマスターとして使用する
(更新頻度が極端に多くないことが条件)

図3 ミラーモードをマルチマスターとして使用する(更新頻度が極端に多くないことが条件)

また,もし予算の都合などでロードバランサが準備できないのであれば,次のようにクライアント側に2つの参照先を設定することで,同等の効果を期待することができます。

図4 クライアント側の設定により冗長性と負荷分散を実現

図4 クライアント側の設定により冗長性と負荷分散を実現

では,予算の都合でロードバランサを準備することができないし,アプリケーションの都合により,クライアント側では1つのアドレスしか指定できないような場合を考えてみましょう。この場合はクライアントが自発的にサーバを切り替えることができないため,必然的にActive/Standby方式のHAクラスタを選択することになります。

図5 HAクラスタによる冗長化

図5 HAクラスタによる冗長化

ロードバランサが不必要となる一方,iSCSIなどに対応した共有ディスクとheartbeatのようなクラスタソフトウェアが必要になります。共有ディスクをdrbdに置き換えることも可能ですが,drbdはネットワークRAIDであるため専用の共有ディスクと比べるとパフォーマンス的にはかなり不利です。

ここでは深くふれませんが,Linuxでheartbeatを使うためのドキュメントは数多く存在しますので,興味があれば探してみてください。

※3)
ただし,不整合が発生しないと保証するものではないため,実際には定期的なモニタリングなどで不整合を検出する作業は必要でしょう。

最後に

連載の冒頭から述べてきましたように,LDAPとは一言で言ってしまえば検索重視のデータベースであり,その役割は単純です。

しかし,OpenLDAPやRed Hat Directory Serverには本連載で紹介してきたもの以外にも様々な機能があります。おそらく全機能の紹介となると,筆者自身も完全に理解できてない部分もあるでしょうし,連載回数も軽く100回を超えてしまうと思います。しかし,LDAPにおける実用的な機能についてはこれまでの連載である程度網羅できたのではないかと思っています。

2年以上続いた本連載も今回でいったん終了となります。機会があれば,また復活するかもしれませんので,それまでにLDAPの良さを周りの友達などにぜひお伝えください。

最後の最後に宣伝ですが,このたび,日本LDAPユーザ会のメンバーで本を出しました。ぜひこちらも参考にしてみてください。

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。