2

我正在尝试将 samba 域控制器(版本 3.6,passdb 后端 = tdbsam)迁移到具有 CTDB(相同 samba 版本)的新集群环境。我有一个功能性的 ceph 存储和根据文档配置的 ctdbd。

但是,所有可用的指南都适用于全新安装,我无法将当前数据迁移到 CTDB。

简单地将 tdb 数据库恢复到 CTDB 是行不通的,并以以下错误结束:

2015/05/25 22:25:04.849302 [5636]:数据库转储版本无效。文件版本为 7308332182664266836,但预期版本为 1

使用 ltdbtool 转换 tdb 数据库也不会带来任何乐趣。

如何将 tdb samba 数据库导入 ctdb?谢谢,马尔科

4

1 回答 1

1

首先警告几句:用 CTDB 集群域控制器并不常见。Clustering/CTDB 是为文件服务器制作的,这些文件服务器通常是域中的成员服务器。域控制器的主要目的是为客户端提供登录服务,并且通常使用不同的复制服务(例如将 DB 存储在 ldap 中而不是 TDB 中)。对域控制器进行群集可能会出现问题,因为整个群集需要始终如一地向客户端显示自己作为单个服务器。这可能会导致 nmbd / NetBIOS 名称解析出现问题。此外,一个问题是您需要确保在集群中所有底层用户帐户都是在具有相同用户 ID 的所有 ctdb 集群节点上创建的。

通常,最佳实践是尽可能将文件服务器角色与域控制器角色分开。还要记住,从 Samba 4.0 开始,现在有一个 Active Directory 域控制器的功能,它带有协议级别的用户数据库的多主复制。

话虽如此,重要的是您不能随意替换 samba 和 ctdb 版本。Samba 3.6 应该与 ctdb 2.5 一起使用,但需要针对要使用的 ctdb 版本重新编译 Samba。即,如果 Samba 是针对旧版本的 CTDB(如 1.0.114.X)编译的,那么这个二进制包将无法与 CTDB 2.5 一起使用。

如果您有一组工作的 samba 和 ctdb 软件包,那么将以前的安装迁移到这个新安装的过程取决于以前的安装是否也是 CTDB 集群。如果是这样,你可以这样做

ctdb getdbmap

在旧安装上然后运行

ctdb backupdb

在所有标记为 PERSISTENT 的数据库上。在您使用的新安装中

ctdb restoredb

恢复所有这些数据库。

如果之前的安装是非集群 Samba,那么您使用 ltdbtool 的提示是正确的。你必须

  • 从旧安装中复制重要的数据库,至少:

    secrets.tdb passdb.tdb winbindd_idmap.tdb group_mapping.tdb account_policy.tdb share_info.tdb

  • 将它们转换为 ctdb 格式ltdbtool

  • 确保所有节点上的 ctdb 都关闭
  • 将转换后的 dbs 复制到/var/lib/ctdb/persistent/节点号 0 上,并在文件名后缀.0例如 `/var/lib/ctdb/persistent/secrets.tdb.0'
  • 在节点 0 上启动 ctdb
  • 在所有其他节点上启动 ctdb

之后,这些数据库应该在集群上同步。

于 2015-06-18T08:49:14.667 回答