Openldap升级后启动问题

Openldap升级后启动问题

我正在尝试同步 ldap 从服务器和主服务器。主服务器使用 openldap 2.3.43-12,从服务器使用 openldap 2.4.23。我复制了 /var/lib/ldap 中的文件,启动了服务器,然后出现以下错误:

Oct 22 16:16:41 xe-ldap-slave1 slapd[12111]: bdb(dc=mydomaine,dc=fr): Program version 4.7 doesn't match environment version 4.4
Oct 22 16:16:41 xe-ldap-slave1 slapd[12111]: bdb_db_open: database "dc=mydomaine,dc=fr" cannot be opened, err -30971. Restore from backup!
Oct 22 16:16:41 xe-ldap-slave1 slapd[12111]: bdb(dc=mydomaine,dc=fr): txn_checkpoint interface requires an environment configured for the transaction subsystem
Oct 22 16:16:41 xe-ldap-slave1 slapd[12111]: bdb_db_close: database "dc=mydomaine,dc=fr": txn_checkpoint failed: Invalid argument (22).
Oct 22 16:16:41 xe-ldap-slave1 slapd[12111]: backend_startup_one (type=bdb, suffix="dc=mydomaine,dc=fr"): bi_db_open failed! (-30971)
Oct 22 16:16:41 xe-ldap-slave1 slapd[12111]: bdb_db_close: database "dc=mydomaine,dc=fr": alock_close failed

我已经使用了db_upgrade命令来升级新的从属服务器上的数据库文件,但是启动slapd时仍然出现同样的错误。

主服务器是 Centos 5.5 32 位和 openldap 2.3.43-12 从属服务器是 Centos 6.3 64 位和 openldap 2.4.23 一切都使用 yum 安装。

当从属服务器比主服务器更新时,从 ldap 主服务器和从属服务器同步数据库文件的正确方法是什么?

我按照 84104 的建议操作,但在从属服务器上收到错误

syncrepl 配置

syncrepl  rid=003
        provider=ldaps://ldap0.lan.myserver.net:636
        bindmethod=simple
        binddn="cn=syncuser,dc=mydomaine,dc=fr"
        scope=sub
        attrs="*"
        credentials=some_password
        searchbase="dc=mydomaine,dc=fr"
        logbase="cn=accesslog"
        logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
        schemachecking=on
        type=refreshAndPersist
        retry="60 +"
        syncdata=accesslog

该 syncrepl 配置在其他从属服务器上运行良好。

以下是从服务器上的错误:

Oct 23 18:28:30 xe-ldap-slave1 slapd[1415]: slap_client_connect: URI=ldaps://ldap0.lan.myserver.com:636 DN="cn=syncuser,dc=mydomaine,dc=fr" ldap_sasl_bind_s failed (-1)
Oct 23 18:28:30 xe-ldap-slave1 slapd[1415]: do_syncrepl: rid=003 rc -1 retrying 

以下是主服务器上的错误:

Oct 23 18:29:30 ldap0 slapd[15265]: conn=201 fd=35 ACCEPT from IP=192.168.150.100:47690 (IP=0.0.0.0:636) 
Oct 23 18:29:30 ldap0 slapd[15265]: conn=201 fd=35 closed (TLS negotiation failure) 

我可以使用配置为从新的从属服务器同步的用户在主服务器上进行 ldap 搜索。

ldapsearch -LLL -x -H ldaps://192.168.150.99:636 -x -W -b dc=mydomaine,dc=fr-D"cn=syncuser,dc=mydomaine,dc=fr"

答案1

LDAP 复制syncrepl非常强大。服务器不必是同一版本,它们只需相互理解即可。(正确的多主机需要 2.4.X,但据我所知,这不是您要问的。)

"The consumer replica can be constructed from a consumer-side or a provider-side backup at any synchronization status." 在这种情况下最值得注意的是,syncrepl可以在具有以下功能的服务器上创建适当的副本:绝不之前已通过任何方法同步过。

该怎么办:

  1. 停止副本slapd
  2. /var/lib/ldap删除(除DB_CONFIG)的内容
  3. 确保您的syncreplolcsyncrepl指令正确
  4. 启动副本slapd
  5. 等待副本同步

注意:使用某些覆盖(例如 memberof)将导致您丢失(覆盖)副本上的operational attributes creatorsNamecreateTimestamp,但除此之外,一切都将保持不变。

答案2

我认为你应该在主服务器和从服务器上运行相同的版本。

如果您确实想要这种方式,请以 LDIF 格式传输数据:slapcat 和 slapadd 可用于转储和恢复数据库。这些是离线实用程序,因此请在使用前停止 ldap 服务器。

编辑:据我记得,复制是脆弱的,我并不是说使用相同的版本是强制性的,只是建议这样做。

db_upgrade 直接修改 slapd 先前创建的文件。最终结果可能没问题。

相关内容