OpenLdap+MySQL笔记
最近項目原因,在CentOS下做了一套簡單的LDAP服務,在此記錄一二,本文強調后期碰到的問題和解決方法
下面的鏈接是比較詳細的安裝和基本配置過程,這個鏈接適用于debian,但是類似的可以在其他發行版下借鑒:
http://www.wingfoss.com/content/how-to-install-openldap-with-mysql-on-debian6
如果從源代碼安裝的話,slapd不會被注冊成服務,需要手動來做。下面是一個Ldap自啟動的腳本,我在CentOS下試過了,可以用的
#!/bin/sh # # ldap This shell script takes care of starting and stopping # ldap servers (slapd and slurpd). # # chkconfig: - 70 40 # description: LDAP stands for Lightweight Directory Access Protocol, used # for implementing the industry standard directory services. # processname: slapd # config: /etc/openldap/slapd.conf # pidfile: /var/run/slapd.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -f /usr/local/libexec/slapd ] || exit 0 # [ -f /usr/sbin/slurpd ] || exit 0export CPPFLAGS="-I/opt/BerkeleyDB.5.3/include" export LDFLAGS="-L/opt/BerkeleyDB.5.3/lib" export LD_LIBRARY_PATH="/opt/BerkeleyDB.5.3/lib"RETVAL=0 # See how we were called. case "$1" instart)# Start daemons.echo -n "Starting ldap: "daemon /usr/local/libexec/slapdRETVAL=$?if [ $RETVAL -eq 0 ]; thenif grep -q "^replogfile" /etc/openldap/slapd.conf; thendaemon slurpdRETVAL=$?[ $RETVAL -eq 0 ] && pidof slurpd | cut -f 1 -d " " > /var/run/slurpdfifi echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap ;;stop)# Stop daemons.echo -n "Shutting down ldap: "killproc slapdRETVAL=$?if [ $RETVAL -eq 0 ]; thenif grep -q "^replogfile" /etc/openldap/slapd.conf; thenkillproc slurpdRETVAL=$?fifi echo if [ $RETVAL -eq 0 ]; thenrm -f /var/lock/subsys/ldaprm -f /var/run/slapd.argsfi ;;status)status slapdRETVAL=$?if [ $RETVAL -eq 0 ]; thenif grep -q "^replogfile" /etc/openldap/slapd.conf; thenstatus slurpdRETVAL=$?fifi ;;restart)$0 stop$0 startRETVAL=$? ;;reload)killproc -HUP slapdRETVAL=$?if [ $RETVAL -eq 0 ]; thenif grep -q "^replogfile" /etc/openldap/slapd.conf; thenkillproc -HUP slurpdRETVAL=$?fifi ;; *) echo "Usage: $0 start|stop|restart|status}" exit 1 esac exit $RETVAL對腳本的一些說明
- # chkconfig: - 70 40 :此行不僅僅是注釋,服務注冊的命令(chkconfig)會根據這行還決定服務的啟動順序
- export是導出BerkeleyDB的庫文件和頭文件
將腳本保存在/etc/init.d下,為其設置可執行權限
chmod 700 /etc/init.d/ldap用chkconfig命令注冊腳本在啟動時運行
chkconfig --add ldap chkconfig --level 345 ldap on因為是基于mysql的后端數據庫,所以要保證ldap在mysql啟動后啟動,查看相應運行級別的rc.d文件(比如在level3時,進入到/etc/rc.d/rc3.d),查看其中的鏈接的開頭數字是否大于mysql服務的數字。關于CentOS下,服務的基本概念這里不再說了
?
后續問題:長時間inactive,LDAP故障,需要重啟
LDAP上線后,發現每天晚上過來LDAP服務都不可用了。這個問題一度困擾了我很長時間,網上各種查都無果,為此還在論壇上提問了。詳見http://www.linuxcast.net/ask/show/480
最終偶然的機會,同事抱怨說Oracle數據庫鏈接超過上線,要釋放。我突然來了靈感,猜測是Mysql數據庫鏈接自動關閉的問題,回頭一查,果然mysql的如下參數設置成了8小時:
interactive_timeout | 28800
wait_timeout | 28800
這樣一來,一晚上(超過8小時)過來mysql主動將LDAP打開并保存的鏈接單方面關閉了,而LDAP全然不知,也沒有重試鏈接,導致無法查詢數據庫。將這個值改大后可以保證一晚上不釋放即可。
?
后續問題:性能低下
由于保存用戶信息,用于登陸驗證。用戶感知登陸很慢,通常要10秒以上,才能登錄。開始分析:先打開LDAP的log,在LDAP的配置文件里面配置
loglevel?? 256
然后在linux的日志服務的配置文件中添加
local4.*?? -/var/log/ldap.log
log將輸出到上面的路徑下,關于linux系統日志服務的基本知識這里略過
觀察log發現search每次都要大約6秒鐘的時間,是主要的性能瓶頸。最初想為LDAP加索引和緩存,索引似乎只能支持bdb,緩存似乎要另外裝插件;再看mysql端是否可以優化的,用腳本創建出來的表都帶有索引,于是考慮mysql查詢緩存是否能幫上忙:http://blog.webwlan.net/wordpress/?p=422
最終,嘗試配置下面的配置:query_cache_size。這個值默認是0,因此,即使query_cache_type默認是啟用的,也不能緩存查詢結果。將query_cache_size配置成大約100M,測試LDAP,明顯登錄加快。再看log,查詢時間縮短到1秒,暫時解決了燃眉之急。
轉載于:https://www.cnblogs.com/P_Chou/archive/2012/12/01/opeldap-mysql-notes.html
總結
以上是生活随笔為你收集整理的OpenLdap+MySQL笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: History(历史)命令用法 15 例
- 下一篇: VC2010 [转]解决char *无