OpenLdap+MySQL筆記

來源:互聯網
上載者:User

最近項目原因,在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" in        start)        # Start daemons.                echo -n "Starting ldap: "                daemon /usr/local/libexec/slapd                RETVAL=$?                if [ $RETVAL -eq 0 ]; then                        if grep -q "^replogfile" /etc/openldap/slapd.conf; then                                daemon slurpd                                RETVAL=$?                                [ $RETVAL -eq 0 ] && pidof slurpd | cut -f 1 -d " " > /var/run/slurpd                        fi                fiecho[ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap;;        stop)        # Stop daemons.                echo -n "Shutting down ldap: "                killproc slapd                RETVAL=$?                if [ $RETVAL -eq 0 ]; then                        if grep -q "^replogfile" /etc/openldap/slapd.conf; then                        killproc slurpd                        RETVAL=$?                        fi                fiechoif [ $RETVAL -eq 0 ]; then                rm -f /var/lock/subsys/ldap                rm -f /var/run/slapd.args                fi;;        status)                status slapd                RETVAL=$?                if [ $RETVAL -eq 0 ]; then                        if grep -q "^replogfile" /etc/openldap/slapd.conf; then                                status slurpd                                RETVAL=$?                        fi                fi;;        restart)                $0 stop                $0 start                RETVAL=$?;;        reload)                killproc -HUP slapd                RETVAL=$?                if [ $RETVAL -eq 0 ]; then                        if grep -q "^replogfile" /etc/openldap/slapd.conf; then                                killproc -HUP slurpd                                RETVAL=$?                        fi                fi;;*)echo "Usage: $0 start|stop|restart|status}"exit 1esacexit $RETVAL

對指令碼的一些說明

  • # chkconfig: - 70 40 :此行不僅僅是注釋,服務註冊的命令(chkconfig)會根據這行還決定服務的啟動順序
  • export是匯出BerkeleyDB的庫檔案和標頭檔

將指令碼儲存在/etc/init.d下,為其設定可執行許可權

chmod 700 /etc/init.d/ldap

用chkconfig命令註冊指令碼在啟動時運行

chkconfig --add ldapchkconfig --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的Log Service的設定檔中添加

local4.*   -/var/log/ldap.log

log將輸出到上面的路徑下,關於linux系統Log Service的基本知識這裡略過

觀察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秒,暫時解決了燃眉之急。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.