AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 55724
Accepted
csexton
csexton
Asked: 2009-08-19 10:16:25 +0800 CST2009-08-19 10:16:25 +0800 CST 2009-08-19 10:16:25 +0800 CST

LDAP 服务器关闭时 Linux 控制台不可用

  • 772

当我们的 OpenLDAP 服务器断电时,CentOS 机器的控制台几乎无法使用。

我们尝试使用本地帐户登录,但每个命令都需要几分钟才能返回。即使是简单的命令ls也只是坐在那里。

这在 Ubuntu 下使用相同的配置似乎不是问题。本地帐户的初始登录需要一段时间才能成功,但是一旦您进入,一切正常。

我正在寻找一种方法来缓解这个问题,并提出了几个想法:

  • 为 ldap-pam 模块设置超时值(如果存在)
  • 运行本地 ldap db 并使用它进行身份验证(它将是主数据库的从属)
  • 如果我们失去与 ldap 服务器的连接,请创建一个 cron 作业以启用/禁用

有没有更好的解决方案来管理 LDAP 的某种冗余/故障转移?

linux
  • 3 3 个回答
  • 7661 Views

3 个回答

  • Voted
  1. Best Answer
    David Pashley
    2009-08-19T10:46:14+08:002009-08-19T10:46:14+08:00

    你有几个选择。

    我们使用复制在网络上拥有多个 LDAP 服务器,隐藏在负载均衡器后面,因此如果其中一个出现故障,我们仍然有一个可用。我们使用 keepalived 进行负载平衡。您还可以在故障转移设置中使用 keepalived,其中您有一个热备份从站。

    其次,您可以在每个工作站上拥有一个本地 LDAP 服务器,但这会导致维护工作非常头疼,因为您需要管理所有这些并监控它们以确保它们跟上复制的速度。您不希望它们不同步。

    当您有从属服务器时,请确保您设置了 updateref 选项,以便将任何尝试的更新发送到主服务器。

    /etc/ldap.conf 中有几个设置可以用来改善情况。最重要的是:

    bind_policy soft
    

    默认值为“硬”,它将不断重试联系服务器,并在两者之间等待。如果将其设置为软,它将立即返回。您还可以使用超时选项来减少它等待的时间。

    # Search timelimit
    timelimit 30
    
    # Bind/connect timelimit
    bind_timelimit 30
    
    • 10
  2. Kamil Kisiel
    2009-08-20T10:09:52+08:002009-08-20T10:09:52+08:00

    我知道你已经接受了大卫的回答,但我想在这里提出一种不同的方法并分享我的一些经验。

    我发现使用的问题bind_policy soft是,如果您没有立即从服务器获得响应,例如它很忙或者您的网络负载很高,您将立即收到 LDAP 故障。对于 nss_ldap 这意味着您的 nss 查找将失败,并且任何尝试使用它的进程都会简单地报告它找不到它正在查找的用户或组并失败。当您的 LDAP 服务器启动时,这在正常操作期间可能是一个问题,IMO 比服务器关闭时的问题更糟糕。

    通过使用以下设置,我找到了更可接受的解决方案:

    bind_policy hard
    nss_reconnect_tries 3
    nss_reconnect_sleeptime 1
    nss_reconnect_maxsleeptime 8
    nss_reconnect_maxconntries 2
    

    这样,您仍将拥有硬连接策略,但这些nss_reconnect_*设置将大大减少您的 LDAP 客户端尝试获取 LDAP 结果所花费的时间。这也意味着在正常使用过程中,如果第一次尝试获取 LDAP 结果失败,它会再次尝试,通常第二次获取。这意味着在正常使用期间发生的故障更少。

    至于在每个工作站上运行本地 LDAP 服务器,我不建议这样做。我可以向您指出的是nsscache。它是由 Google 的一些工程师编写的,它通过创建 LDAP 数据库的本地缓存并通过 cron 作业逐步更新它来解决这个问题。然后,您将 nsswitch 源设置为使用他们的库而不是 nss_ldap,并且所有查找都是本地的。这样做的好处是可以大大减少 LDAP 服务器上的负载,并在与服务器的连接断开时使所有查找可用。它现在没有最好的文档,也没有被广泛使用,但它确实运作良好,邮件列表非常敏感。

    • 9
  3. Hamish Downer
    2010-10-05T13:49:58+08:002010-10-05T13:49:58+08:00

    我们遇到了这个问题,我们的解决方案是告诉 LDAP 不要成为服务器运行所需的组的来源。这是通过将以下内容放在我们的末尾来完成的ldap.conf

    # We need to ensure that various things can work without LDAP being available
    # for example: booting, ssh in as root, apache ...
    nss_initgroups_ignoreusers avahi,avahi-autoipd,backup,bin,daemon,dhcp,dhcpd,games,gdm,gnats,haldaemon,hplip,irc,klog,libuuid,list,lp,mail,man,messagebus,munin,mysql,nbd,news,ntp,nut,polkituser,proxy,pulse,root,sshd,statd,sync,sys,syslog,uucp,www-data
    

    从nss_ldap 手册页

    nss_initgroups_ignoreusers <user1,user2,...,userN>
              This option directs the nss_ldap implementation of initgroups(3)
              to return NSS_STATUS_NOTFOUND if called with a listed  users  as
              its argument.
    

    所以基本上 LDAP 在不联系主服务器的情况下假装它不认识这些用户,因此 NSS 依靠本地用户并且系统工作正常。

    我们还在许多服务器上设置了 LDAP 副本,以采用带和大括号的方法。

    • 2

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve