升级后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 32bit&openldap 2.3.43-12从服务器是Centos 6.3 64位&openldap 2.4.23所有东西都是用yum安装的。

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

我遵循了84104的build议,但是我在从机上遇到错误

syncreplconfiguration

 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 

这个syncreplconfiguration在其他从服务器上工作正常。

这是奴隶的错误:

 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) 

我可以在主服务器上进行ldapsearch,只需要configuration用户从新的从服务器进行同步即可。

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

syncrepl下的LDAP复制function非常强大。 服务器不必是相同的版本,他们只需要了解对方。 (正确的多主人需要2.4.X,但这不是你所问的,据我所知)。

"The consumer replica can be constructed from a consumer-side or a provider-side backup at any synchronization status." 最值得注意的是,在这种情况下, syncrepl可以在任何方法之前从未同步的服务器上创build适当的副本。

什么做:

  1. 停止副本的slapd
  2. 删除/var/lib/ldapDB_CONFIG除外)
  3. 确保你的syncreplolcsyncrepl指令是正确的
  4. 启动副本的slapd
  5. 等待副本同步

注意:使用某些覆盖(例如memberof)会导致您丢失(覆盖)副本上的operational attributes creatorsNamecreateTimestamp ,否则所有内容都将保持不变。

恕我直言,你应该在主人和奴隶上运行相同的版本。

如果你真的想要这种方式传输LDIF格式的数据:slapcat和slapadd可以用来转储和恢复数据库。 这些都是脱机实用程序,因此请在使用前停止ldap服务器。

编辑:据我记得,复制是脆弱的,我不说使用相同的版本是强制性的build议。

db_upgrade直接修改先前创build的slapd文件。 可能发生的结果是好的。