openldap 是否适合大型生产部署?

Max*_*Max 3 ubuntu openldap ldap

大约 1 年以来,我们一直openldapubuntu服务器上使用10.04LTS来验证大约 20 个 IT 用户,并且一切运行良好(LDAP 服务器上的操作基本上仅限于使用apache directory studio创建/删除用户)。

最近(6 个月前)我们还开始实施openldap(openldap-2.4.21/debian) 作为我们网站的外部身份验证系统,该系统正在从外部 CMS 迁移到我们正在使用Drupal CMS. 我们有一个 45,000 用户的数据库,但事情进展得并不顺利。我们遇到的问题是:
-备份还原后 ldap 崩溃,需要恢复
- ldap 恢复工具在某些情况下无法恢复 ldap 数据库
-slapd 消耗 100% CPU 而网站上没有身份验证活动。

由于内部缺乏资源和知识,到目前为止我们所做的只是找到保持 LDAP 运行的方法,而没有真正调查这些问题中的任何一个(用于monit在崩溃时重新启动它,db_recover在需要时恢复数据库,并slapcat重新创建db_recover失败时从头开始创建数据库)。

最近,我们进行了一轮面试,聘请了一名高级基础设施工程师来协助我们处理各种基础设施。我们遇到的问题。几位候选人确认他们要么已经或听说过openldap大型生产环境中的问题,并且从未设法提出一个稳定的独立openldap服务器,而是不得不提出冗余部署(复制、负载平衡、自动恢复/重启例程) ) 以保持 LDAP 运行。一些候选人甚至说这openldap不适合生产环境,相反,使用替代品Novel eDirectory是必要的。

问:如果您有在拥有数千个用户的生产环境中处理 ldap 的经验,您是否有事实可以分享,这些事实往往证明openldap这种设置确实不稳定,并且确实建议使用其他 ldap 服务器?

fre*_*eit 8

我使用 OpenLDAP 支持大约 10,000 名活跃用户的用户群,他们全天依赖它做任何事情。问题很少见。许多服务依赖它进行身份验证和其他事情。

然而,我们有 4 个只读副本(从/消费者)在负载均衡器、一个隐藏的主和一个热备的主之后。曾经是 2 个前端服务器,但我们在某些高峰时间遇到了负载问题(当这些用户中的 4,000 左右在同一秒内拼命尝试访问它时)。对 LDAP 的所有写访问都是通过我们的代码进行的。

那个设备和操作系统都是旧的,我们正在努力用一个新的设置替换它,这个设置将恢复到只有 2 个副本(没有做很多其他的事情)和一对主服务器之间的“镜像模式”复制HA 配置。同样,问题很少见。

我们曾经遇到过一些复制失败的问题,但这主要是因为我们使用 slurpd 而不是 syncrepl。此外,服务器的不正常关闭可能会损坏数据。

根据我的经验,在大规模生产环境中运行 OpenLDAP 的关键在于:

  1. 了解 LDAP 和 OpenLDAP 的人。最好不止一个人。
  2. 了解基础设施的所有其他直接相关部分的人。
  3. 了解OpenLDAP 复制如何工作的人。
  4. BerkeleyDB 选项(或您使用的任何后端)的合理理解,因为默认值不太正确。
  5. 高可用的奴隶。超过 1. 更好:真正实现负载平衡。
  6. **主动-被动 masters(主动-主动 master 复制本质上是棘手的)
  7. 我们每小时将LDAP 数据备份到LDIF,并将这些数据保留在磁盘上几天。(整个服务器每晚备份)
  8. 我们有脚本可以快速将损坏的从站恢复到干净的当前数据副本
  9. 我们有脚本可以从 LDIF 备份中快速恢复损坏的主服务器(通过 slapadd)
  10. 我们可以快速切换到备用master。(脚本)
  11. 我们监控复制连接是否有效
  12. 我们监控所有从站上的复制 ID 是否是最新的
  13. 我们监控(较少)从站的全部内容是否与主站匹配。

但是,基本上,如果它是您基础架构的关键部分,那么您团队中的某个人应该真正了解它。

附录:根据请求,DB_CONFIG来自我的 openldap DB 目录的文件。有关详细信息,请查看http://docs.oracle.com/cd/E17076_02/html/api_reference/C/configuration_reference.html

set_cachesize 0 536870912 1
set_flags DB_TXN_NOSYNC
set_flags DB_TXN_WRITE_NOSYNC
set_lg_regionmax 268435456
set_lg_max 536870912
set_lg_bsize 134217728
Run Code Online (Sandbox Code Playgroud)