最近项目原因,在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笔记相关推荐

  1. mysql事务手写笔记_兴奋了!阿里技术官手写“MySQL笔记”,传授你年薪百万级干货...

    前言 MySQL重要吗?重要!为什么重要?因为它在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展.阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的.My ...

  2. 涂抹mysql 完整_涂抹mysql笔记-管理mysql服务

    $ /mysql/scripts/mysql_install_db --datadir=/mysql/data --basedir=/mysql support-files/mysql.server脚 ...

  3. 涂抹mysql笔记-mysql复制特性

    涂抹mysql笔记-mysql复制特性 mysql复制特性:既可以实现整个服务(all databases)级别的复制,也可以只复制某个数据库或某个数据库中的某个指定的表对象.即可以实现A复制到B(主 ...

  4. 阿里工程师总结的《MySQL 笔记高清 PDF 》 开放下载

    下面是阿里工程师整理的MySQL笔记,高清PDF版,涉及到mysql的方方面面,内容质量特别高,文末有获取方式. 获取方式,扫码发送:102

  5. MySQL 笔记9 -- PyMySQL

    MySQL 笔记9 – PyMySQL MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 参考文档: MySQL 官方文档 SQL 教程 PyMySQL官方文档 一.基础 1.简介 PyMy ...

  6. MySQL 笔记8 -- 存储过程和索引

    MySQL 笔记8 – 存储过程和索引 MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 课程链接: MySQL 数据库基础入门教程 参考文档: MySQL 官方文档 SQL 教程 一.存储 ...

  7. MySQL 笔记7 -- 权限操作与视图

    MySQL 笔记7 – 权限操作与视图 MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 课程链接: MySQL 数据库基础入门教程 参考文档: MySQL 官方文档 SQL 教程 一.权限 ...

  8. MySQL 笔记6 -- 函数与事务

    MySQL 笔记6 – 函数与事务 MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 课程链接: MySQL 数据库基础入门教程 参考文档: MySQL 官方文档 SQL 教程 一.内置函数 ...

  9. MySQL 笔记5 -- 多表查询

    MySQL 笔记5 – 多表查询 MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 课程链接: MySQL 数据库基础入门教程 参考文档: MySQL 官方文档 一.表之间关系 1.一对一 ...

最新文章

  1. 机器学习科研的十年,希望让你少走一些坑
  2. 系统架构师-基础到企业应用架构-企业应用架构
  3. JAVA单态设计模式
  4. Opencv多通道分离函数split()和多通道合并函数merge的使用
  5. 风控特征:时间滑窗统计特征体系
  6. Linux 命令 —— iostat I/O 和 CPU 监视工具
  7. 微信们正在成为“被模仿者”!中国互联网现状及趋势报告
  8. python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property...
  9. 3种谷歌多语言翻译接口的调用方法(Python)
  10. node mysql 坑_菜鸟Node.js MySQL教程遇到的坑
  11. 新手如何学电影解说剪辑全教程
  12. java 12306验证码识别_12306验证码图片库大全
  13. Python 安装pyinstaller失败的解决方法
  14. gentoo——桌面,openbox,silm,Conky,输入法,layman,QQ安装,WPS
  15. 生物识别身份验证:技术的现状和发展趋势
  16. python之父:《Python程序员指南》这本书你应该了解以下,pdf
  17. 【Uni-App】点击分享,生成海报带二维码,保存到本地图片,写入文字
  18. android微信支付开发过程
  19. JeecgBoot关于websocket的改进方案
  20. NUMECA/FineTurbo计算中自动调用CFview实时数据处理

热门文章

  1. SUBSTRING的用法问题
  2. Scrum 项目7.0
  3. PYTHON之路DAY3
  4. 【Android】SlidingMenu属性详解(转)
  5. HttpSession
  6. Autodesk Forge Viewer与Forge API Node.js客户端SDK的TypeScript声明文件发布!
  7. 全民Tv帝师称称通过EOS赚了几千万,可信度有多高
  8. ESXI6.5 最新版尝鲜安装图解
  9. TCP协议属性设置之SO_REUSEADDR属性
  10. 关于 Apache Maven 您不知道的 5 件事