2.2. 创建和维护数据库


在创建了用于组织目录数据的后缀后,创建数据库来包含该目录的数据。
注意
如果您使用 dsconf 实用程序或 web 控制台来创建后缀,Directory 服务器会自动创建数据库。

2.2.1. 创建数据库

目录树可以分布到多个目录服务器数据库中。在多个数据库间分发数据的方法有两种:
每个后缀有一个数据库。每个后缀的数据都包含在单独的数据库中。
添加三个数据库以存储独立后缀中包含的数据:
树单元的这个划分与三个数据库对应,例如:
在本例中,DB1 包含 ou=people 的数据以及 dc=example,dc=com 的数据,以便客户端可以根据 dc=example,dc=com 执行搜索。但是,DB2 仅包含 ou=groups 的数据,DB3 仅包含 ou=contractors 的数据:
一个后缀的多个数据库。
假设目录树的 ou=people 分支中的条目数量比较大,因此需要两个数据库来存储它们。在这种情况下,ou=people 中包含的数据可以在两个数据库中分布:
DB1 包含来自 A-K、DB2 的名称的人员,DB2 则包含来自 L-Z 的人。DB3 包含 ou=groups 数据,DB4 包含 ou=contractors 数据。
自定义插件将数据从单一后缀分布到多个数据库。有关如何为目录服务器创建分发逻辑的信息,请联系红帽咨询。

2.2.1.1. 使用命令行为单一后缀创建新数据库

使用 ldapmodify 命令行工具将新数据库添加到目录配置文件中。数据库配置信息存储在 cn=ldbm database,cn=plugins,cn=config 条目中。添加新数据库:
  1. 运行 ldapmodify 并为新数据库创建条目。
    # ldapmodify -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    
    dn: cn=UserData,cn=ldbm database,cn=plugins,cn=config
    changetype: add
    objectclass: extensibleObject
    objectclass: nsBackendInstance
    nsslapd-suffix: ou=people,dc=example,dc=com
    Copy to Clipboard Toggle word wrap
    添加的条目对应于名为 UserData 的数据库,其中包含 root 或 sub-suffix ou=people,dc=example,dc=com 的数据。
  2. 创建 root 或子修复,如 第 2.1.1.1.1 节 “使用命令行创建根后缀”第 2.1.1.2.1 节 “使用命令行创建子后缀” 所述。DN 属性中指定的数据库名称必须与后缀条目的 nsslapd-backend 属性中的值对应。

2.2.1.2. 为单一后缀添加多个数据库

单个后缀可以分布到多个数据库中。但是,为了分发后缀,必须创建自定义分发功能来扩展目录。有关创建自定义分发功能的更多信息,请联系红帽咨询。
注意
在分发条目后,无法重新分发它们。有以下限制:
  • 部署条目分发后无法更改分发功能。
  • 如果导致将条目分发到不同的数据库中,则无法使用 LDAP modrdn 操作来重命名条目。
  • 无法复制分布式本地数据库。
  • 如果使 ldapmodify 操作被分发到不同的数据库中,则无法使用 ldapmodify 操作来更改条目。
违反这些限制可防止目录服务器正确查找和返回条目。
创建自定义分发逻辑插件后,将其添加到目录中。
分发逻辑是在后缀中声明的函数。对于到达此后缀的每个操作,会调用此功能,包括从后缀开始的子树搜索操作。可以使用 Web 控制台和命令行界面将分发功能插入到后缀中。
将自定义分发功能添加到后缀:
  1. 运行 ldapmodify
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    Copy to Clipboard Toggle word wrap
  2. 在后缀条目本身中添加以下属性,提供有关自定义分发逻辑的信息:
    dn: suffix
    changetype: modify
    add: nsslapd-backend
    nsslapd-backend: Database1
    -
    add: nsslapd-backend
    nsslapd-backend: Database2
    -
    add: nsslapd-backend
    nsslapd-backend: Database3
    -
    add: nsslapd-distribution-plugin
    nsslapd-distribution-plugin: /full/name/of/a/shared/library
    -
    add: nsslapd-distribution-funct
    nsslapd-distribution-funct: distribution-function-name
    Copy to Clipboard Toggle word wrap
    nsslapd-backend 属性指定与此后缀关联的所有数据库。nsslapd-distribution-plugin 属性指定插件使用的库的名称。nsslapd-distribution-funct 属性提供分发功能本身的名称。

2.2.2. 维护目录数据库

2.2.2.1. 在只读模式下设置数据库

当数据库处于只读模式时,您无法创建、修改或删除任何条目。当只读模式很有用时,其中一个情况是手动初始化消费者或从目录服务器备份或导出数据。只读模式可确保给定时间点上这些数据库状态的 faithful 镜像。
命令行实用程序和 Web 控制台不会在导出或备份操作前自动将目录置于只读模式,因为这会使目录不可用以进行更新。但是,通过 multi-supplier 复制,这可能并不是一个问题。
2.2.2.1.1. 使用命令行以只读模式设置数据库
要在只读模式下设置数据库,请使用 dsconf backend suffix set 命令。例如,要在只读模式下设置 o=test 后缀的数据库:
  1. 显示后缀及其对应的后端:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list
    dc=example,dc=com (userroot)
    o=test (test_database)
    Copy to Clipboard Toggle word wrap
    这个命令显示每个后缀旁的后端数据库名称。在下一步中需要后缀的数据库名称。
  2. 以只读模式设置数据库:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix set --enable-readonly "test_database"
    Copy to Clipboard Toggle word wrap
以只读模式设置数据库:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Database 菜单。
  4. 选择后缀条目。
  5. 选择 Database Read-Only Mode
  6. 单击 Save Configuration

2.2.2.2. 将目录服务器置于只读模式

如果目录服务器维护多个数据库,且所有数据库都需要以只读模式放置,则可以在单个操作中完成。
警告
此操作还使目录服务器配置只读;因此,您无法更新服务器配置、启用或禁用插件,甚至在处于只读模式下时重启目录服务器。启用只读模式后,除非手动修改配置文件,否则将 无法撤消
注意
如果目录服务器包含副本,请不要使用 只读模式,因为它将禁用复制。
为 Directory 服务器启用只读模式:
  1. 上将 nsslapd-readonly 参数设置为:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-readonly=on
    Copy to Clipboard Toggle word wrap
  2. 重启实例:
    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap
为 Directory 服务器启用只读模式:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings 菜单,然后选择 Server Settings 条目。
  4. Advanced Settings 选项卡中,选择 Server Read-Only
  5. 点击 Save

2.2.2.3. 删除数据库

如果不再需要后缀,您可以删除存储后缀的数据库。
2.2.2.3.1. 使用命令行删除数据库
要删除数据库,请使用 dsconf backend delete 命令。例如,要删除 o=test 后缀的数据库:
  1. 显示后缀及其对应的后端:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list
    dc=example,dc=com (userroot)
    o=test (test_database)
    Copy to Clipboard Toggle word wrap
    您需要后端数据库的名称,该数据库在下一步中在后缀旁边显示。
  2. 删除数据库:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend delete "test_database"
    Copy to Clipboard Toggle word wrap
2.2.2.3.2. 使用 Web 控制台删除数据库
使用 Web 控制台删除数据库:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Database 菜单。
  4. 选择要删除的后缀,点 Suffix Tasks,然后选择 Delete Suffix
  5. 单击 Yes 以确认。

2.2.2.4. 更改事务日志目录

事务日志可让目录服务器在实例意外关闭后恢复数据库。在某些情况下,管理员希望更改事务日志的路径。例如,要将它们存储在与 Directory Server 数据库不同的物理磁盘中。
注意
为实现更高的性能,请将更快的磁盘挂载到包含事务日志的目录中,而不是更改位置。详情请查看 红帽目录服务器性能调优指南 中的相应部分。
更改事务日志目录的位置:
  1. 停止 Directory Server 实例:
    # dsctl instance_name stop
    Copy to Clipboard Toggle word wrap
  2. 为事务日志创建一个新位置。例如:
    # mkdir -p /srv/dirsrv/instance_name/db/
    Copy to Clipboard Toggle word wrap
  3. 将权限设置为只启用 Directory Server 以访问目录:
    # chown dirsrv:dirsrv /srv/dirsrv/instance_name/db/
    # chmod 770 /srv/dirsrv/instance_name/db/
    Copy to Clipboard Toggle word wrap
  4. 从以前的事务日志目录中删除所有 __db signal 文件。例如:
    # rm /var/lib/dirsrv/slapd-instance_name/db/__db.*
    Copy to Clipboard Toggle word wrap
  5. 将前一个 中的所有 log SetConfiguration 文件移动到新的事务日志目录中。例如:
    # mv /var/lib/dirsrv/slapd-instance_name/db/log.* \
         /srv/dirsrv/instance_name/db/
    Copy to Clipboard Toggle word wrap
  6. 如果 SELinux 在 enforcing 模式下运行,请在目录中设置 dirsrv_var_lib_t 上下文:
    # semanage fcontext -a -t dirsrv_var_lib_t /srv/dirsrv/instance_name/db/
    # restorecon -Rv /srv/dirsrv/instance_name/db/
    Copy to Clipboard Toggle word wrap
  7. 编辑 /etc/dirsrv/slapd-instance_name/dse.ldif 文件,并更新 cn=config,cn=ldbm database,cn=plugins,cn=config 条目下的 nsslapd-db-logdirectory 参数。例如:
    dn: cn=config,cn=ldbm database,cn=plugins,cn=config
    ...
    nsslapd-db-logdirectory: /srv/dirsrv/instance_name/db/
    Copy to Clipboard Toggle word wrap
  8. 启动实例:
    # dsctl instance_name start
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat