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

cse*_*ton 6 linux openldap redundancy

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

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

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

我正在寻找一种缓解问题的方法,并提出了一些想法:

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

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

Dav*_*ley 10

您有多种选择。

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

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

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

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

bind_policy soft
Run Code Online (Sandbox Code Playgroud)

默认值为“hard”,这将不断重试与服务器联系,中间等待一段时间。如果您将其设置为软,它将立即返回。您还可以使用超时选项来减少等待的时间。

# Search timelimit
timelimit 30

# Bind/connect timelimit
bind_timelimit 30
Run Code Online (Sandbox Code Playgroud)

  • 哪一点有效? (2认同)

Kam*_*iel 9

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

我发现使用的问题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
Run Code Online (Sandbox Code Playgroud)

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

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