2.2. 创建和维护数据库
创建后缀以整理目录数据后,创建数据库以包含该目录的数据。
注意
如果您使用
dsconf
实用程序或 Web 控制台创建后缀,目录服务器会自动创建数据库。
2.2.1. 创建数据库
目录树可以通过多个目录服务器数据库分发。在多个数据库间分发数据的方法有两种:
- 每个后缀有一个数据库。每个后缀的数据都包含在单独的数据库中。
- 添加三个数据库来存储独立后缀中包含的数据:树单元的这个划分对应于三个数据库,例如:在本例中,DB1 包含 ou=body 的数据以及 dc=example,dc=com 的数据,因此客户端可以根据 dc=example,dc=com 进行搜索。但是,DB2 仅包含 ou=groups 的数据,DB3 仅包含 ou=contractors 的数据:
- 一个后缀的多个数据库。
- 假设目录树的 ou=body 分支中的条目数量较大,因此需要两个数据库来存储它们。在这种情况下,ou=body 中包含的数据 可以在两个数据库中分发: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 条目中。添加新数据库:
- 运行 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添加的条目对应于名为 UserData 的数据库,其中包含 root 或 sub-suffix ou=body,dc=example,dc=com 的数据。 - 创建 root 或子修复,如 第 2.1.1.1.1 节 “使用命令行创建根后缀” 和 第 2.1.1.2.1 节 “使用命令行创建子修复” 所述。DN 属性中给出的数据库名称必须与后缀条目的
nsslapd-backend
属性中的值对应。
2.2.1.2. 为单个后缀添加多个数据库
单个后缀可以在多个数据库之间分布。但是,若要分发后缀,必须创建自定义分发功能来扩展目录。有关创建自定义发布功能的更多信息,请联系红帽咨询。
注意
分发条目后,无法重新分发它们。适用以下限制:
- 部署条目分发后无法更改分发功能。
- 如果将 LDAP modrdn 操作分发到不同的数据库中,则无法使用 LDAP modrdn 操作来重命名条目。
- 无法复制分布式本地数据库。
- 如果将它们分发到不同的数据库中,则无法使用 ldapmodify 操作来更改条目。
违反这些限制可防止目录服务器正确查找和返回条目。
创建自定义分发逻辑插件后,将其添加到目录中。
分发逻辑是后缀中声明的功能。对于到达这个后缀的每个操作都会调用此功能,包括在后缀上面启动的子树搜索操作。可使用 Web 控制台和命令行界面将分发功能插入到后缀中。
在后缀中添加自定义发布功能:
- 运行 ldapmodify。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
- 在后缀条目本身中添加以下属性,提供有关自定义分发逻辑的信息:
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
nsslapd-backend
属性指定与此后缀关联的所有数据库。nsslapd-distribution-plugin
属性指定插件使用的库名称。nsslapd-distribution-funct
属性提供分发功能本身的名称。
2.2.2. 维护目录数据库
2.2.2.1. 在只读模式下设置数据库
当数据库处于只读模式时,您无法创建、修改或删除任何条目。当只读模式很有用时,其中一个情况是手动初始化消费者或从目录服务器备份或导出数据。只读模式可确保给定时间使用这些数据库状态的传真镜像。
命令行工具和 Web 控制台不会在导出或备份操作前自动将目录置于只读模式,因为这会使您的目录无法进行更新。但是,对于多层次复制,这可能不是问题。
2.2.2.1.1. 使用命令行在只读模式下设置数据库
要在只读模式下设置数据库,请使用 dsconf backend suffix set 命令。例如,要在只读模式下设置
o=test
后缀的数据库:
- 显示后缀及其对应的后端:
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot) o=test (test_database)
这个命令显示每个后缀旁的后端数据库名称。下一步需要后缀的数据库名称。 - 以只读模式设置数据库:
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix set --enable-readonly "test_database"
2.2.2.1.2. 使用 Web 控制台在只读模式下设置数据库
以只读模式设置数据库:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开菜单。
- 选择后缀条目。
- 选择 Database Read-Only Mode。
- 单击。
2.2.2.2. 将 Entire 目录服务器置于只读模式
如果目录服务器维护多个数据库,且所有数据库都需要放在只读模式下,则可以在单个操作中完成此操作。
警告
此操作还使目录服务器配置为只读;因此,您无法更新服务器配置、启用或禁用插件,甚至重启目录服务器,即使它处于只读模式。启用只读模式后,除非您手动修改配置文件,否则 无法撤消。
注意
如果目录服务器包含副本,请不要使用 只读模式,因为它将禁用复制。
2.2.2.2.1. 使用命令行将 Entire Directory Server 置于只读模式
为目录服务器启用只读模式:
- 将
nsslapd-readonly
参数设置为 on :# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-readonly=on
- 重启实例:
# dsctl instance_name restart
2.2.2.2.2. 使用 Web 控制台将 Entire Directory Server 置于只读模式
为目录服务器启用只读模式:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开 Server Settings 条目。菜单,然后选择
- 在 Advanced Settings 选项卡中,选择 Server Read-Only。
- 点击 Save。
2.2.2.3. 删除数据库
如果不再需要后缀,您可以删除存储后缀的数据库。
2.2.2.3.1. 使用命令行删除数据库
要删除数据库,可使用 dsconf backend delete 命令。例如,要删除
o=test
后缀的数据库:
- 显示后缀及其对应的后端:
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot) o=test (test_database)
在下一步中,您需要后端数据库的名称(在后缀旁边显示)。 - 删除数据库:
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend delete "test_database"
2.2.2.3.2. 使用 Web 控制台删除数据库
使用 Web 控制台删除数据库:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开菜单。
- 选择要删除的后缀,单击 Delete Suffix。,然后选择
- 单击以确认。
2.2.2.4. 更改交易日志目录
事务日志可让 Directory 服务器在实例意外关闭后恢复数据库。在某些情况下,管理员想要更改事务日志的路径。例如,要将它们存储在与目录服务器数据库不同的物理磁盘中。
注意
要实现更高的性能,请将一个更快的磁盘挂载到包含事务日志的目录,而不是更改位置。详情请查看 红帽目录服务器性能调优指南 中的相应部分。
更改事务日志目录的位置:
- 停止目录服务器实例:
# dsctl instance_name stop
- 为事务日志创建新位置。例如:
# mkdir -p /srv/dirsrv/instance_name/db/
- 设置权限,使其只启用 Directory 服务器访问该目录:
# chown dirsrv:dirsrv /srv/dirsrv/instance_name/db/ # chmod 770 /srv/dirsrv/instance_name/db/
- 从以前的事务日志目录中删除所有
__db
the 文件。例如:# rm /var/lib/dirsrv/slapd-instance_name/db/__db.*
- 将
所有日志站
文件从之前移到新的事务日志目录中。例如:# mv /var/lib/dirsrv/slapd-instance_name/db/log.* \ /srv/dirsrv/instance_name/db/
- 如果 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/
- 编辑
/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/
- 启动实例:
# dsctl instance_name start