Ldap高效数据同步- Delta-Syncrepl复制模式配置实战手册(上)
#作者:朱雷
文章目录
- 一、Syncrepl 和Delta-syncrepl 回顾对比
- 1.1. 什么是复制模式
- 1.2. 什么是 syncrepl同步复制
- 1.3. syncrepl同步复制的缺点
- 1.4. 什么是Delta-syncrepl 复制
- 二、Ldap环境部署
- 三、配置复制类型
- 3.1. 编译安装
- 3.2. 提供者端配置
一、Syncrepl 和Delta-syncrepl 回顾对比
1.1. 什么是复制模式
OpenLDAP有各种配置选项可用于创建复制目录。在以前的版本中,复制是指主服务器和一定数量的从属服务器。主服务器接受来自其他客户端的目录更新,而从属服务器仅接受来自(单个)主服务器的更新。复制结构定义严格,任何特定数据库只能充当一个角色,即主服务器或从属服务器。OpenLDAP 2.4 引入的另一个术语是多主服务器。由于 OpenLDAP 现在支持多种复制拓扑,这些术语已被弃用,取而代之的是提供者/多提供者和消费者。
提供者可以接受外部写入操作并使其可供消费者检索,消费者向提供者请求复制更新。与严格定义的主/从关系不同,提供者/消费者角色非常灵活,消费者收到的复制更新可以由该消费者进一步传播到其他服务器,因此消费者也可以同时充当提供者。此外,消费者不必是实际的LDAP服务器,它可能只是一个 LDAP客户端。
1.2. 什么是 syncrepl同步复制
Syncrepl 使用 LDAP 内容同步协议(简称 LDAP Sync)作为消费者同步协议。LDAP Sync 提供状态复制,支持基于拉取和基于推送的同步,并且不强制使用历史记录存储。在基于拉取的复制中,消费者会定期轮询提供者以获取更新。在基于推送的复制中,消费者会实时监听提供者发送的更新。由于该协议不需要历史记录存储,因此提供者不需要维护它收到的任何更新日志。
Syncrepl 通过维护和交换同步 cookie 来跟踪复制内容的状态。由于 syncrepl 消费者和提供者维护其内容状态,消费者可以轮询提供者内容以执行增量同步,方法是请求使消费者与提供者内容保持最新状态所需的条目。Syncrepl 还通过维护复制状态实现了对消费者的方便管理。消费者数据库可以从处于任何同步状态的消费者端或提供者端备份构建。Syncrepl 可以自动重新同步消费者数据库,使其与当前提供者内容保持最新状态。
1.3. syncrepl同步复制的缺点
syncrepl 同步复制是一种基于对象的复制机制。当提供程序上复制对象中的任何属性值发生更改时,每个消费者都会获取并处理完整的更改对象,包括复制期间更改和未更改的属性值。这种方法的一个优点是,当单个对象发生多项更改时,无需保留这些更改的精确顺序;只有条目的最终状态才重要。但是,当使用模式涉及对多个对象的单次更改时,这种方法可能会存在缺陷。
例如,假设您的数据库包含 102,400 个对象,每个对象大小为 1 KB。此外,假设您定期运行一个批处理作业来更改提供程序上这 102,400 个对象中每个对象中出现的单个双字节属性值。不计算 LDAP 和 TCP/IP 协议开销,每次运行此作业时,每个消费者将传输并处理100 MB数据来处理200 KB 的更改!
在这种情况下,99.98% 的传输和处理数据都是冗余的,因为这些数据代表了未发生改变的值。这浪费了宝贵的传输和处理带宽,并可能导致不可接受的复制积压。虽然这种情况比较极端,但它确实揭示了某些 LDAP 部署中经常遇到的一个问题。
1.4. 什么是Delta-syncrepl 复制
Delta-syncrepl 是一种基于变更日志的 syncrepl 变体,旨在解决syncrepl同步复制的缺点。
Delta-syncrepl 的工作原理是在提供程序上的单独数据库中维护可选深度的变更日志。复制消费者会检查变更日志以查找所需的更改,只要变更日志包含所需的更改,消费者就会从变更日志中获取更改并将其应用于其数据库。但是,如果消费者的同步程度太低(或完全为空),则使用常规 syncrepl 使其保持最新状态,然后复制将切换回 delta-syncrepl 模式。
二、Ldap环境部署
主机node | 版本 | IP | 备注 |
---|---|---|---|
ldap-0 | 2.4.44 | 192.168.1.129 | 主节点/提供者端 |
ldap-1 | 2.4.44 | 192.168.1.130 | 从节点/消费者端 |
三、配置复制类型
3.1. 编译安装
要启用Delta-syncrepl 复制模式需要在编译软件时启用如下模块:
./configure CPPFLAGS="-I/usr/local/BerkeleyDB.5.1/include -D_GNU_SOURCE" LDFLAGS="-L/usr/local/BerkeleyDB.5.1/lib" --enable-syslog=yes --enable-debug=yes --enable-dynamic=yes --enable-modules=yes --enable-overlays=yes
报错安装:
checking for ltdl.h... no
configure: error: could not locate libtool ltdl.h
rpm -qa | grep libtool-ltdl
yum install -y libtool-ltdl libtool-ltdl-devel
编译安装:
make depend
make
make test
make install
安装结果:
[root@ldap-0 openldap-2.4.44]# echo $?
0
[root@ldap-0 openldap-2.4.44]# ll /usr/local/libexec/
total 2.0M
drwxr-xr-x 2 root root 4.0K Dec 25 10:44 openldap
-rwxr-xr-x 1 root root 2.0M Dec 25 14:35 slapd
[root@ldap-0 openldap-2.4.44]# ll /usr/local/libexec/openldap/
total 0
[root@ldap-0 openldap-2.4.44]# ll /usr/local/sbin/sl* -rth
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slapadd -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slapcat -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slapdn -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slapindex -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slappasswd -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slaptest -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slapauth -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slapacl -> ../libexec/slapd
lrwxrwxrwx 1 root root 16 Dec 25 14:35 /usr/local/sbin/slapschema -> ../libexec/slapd
3.2. 提供者端配置
[root@ldap-0 openldap]# egrep -v '^$|#' /usr/local/etc/openldap/slapd.conf
include /usr/local/etc/openldap/schema/corba.schema
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/duaconf.schema
include /usr/local/etc/openldap/schema/dyngroup.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/java.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/pmi.schema
include /usr/local/etc/openldap/schema/ppolicy.schema
pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args
logfile /usr/local/var/slapd.log
loglevel -1# 模块配置
modulepath /usr/local/libexec/openldap
moduleload back_mdb.la
moduleload accesslog.la
moduleload syncprov.la#同步数据库配置
database mdb
suffix cn=accesslog
rootdn cn=accesslog
directory /usr/local/var/openldap-delta-data
maxsize 85899345920
index default eq
index entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN#启用 syncprov 覆盖层模块,用于支持 LDAP 服务器的增量同步功能
overlay syncprov
#禁用同步过程中的“Present”阶段(默认行为),仅同步新增、修改或删除操作。此值仅应针对日志数据库(例如由 accesslog overlay 管理的数据库)之上的 syncprov 实例设置为 TRUE。默认值为 FALSE
syncprov-nopresent TRUE
#使用 accesslog 覆盖层实现基于增量的 syncrepl 复制支持时,必须将其设置为 TRUE。默认值为 FALSE
syncprov-reloadhint TRUE# 主数据库定义
database mdb
maxsize 1073741824
suffix "dc=zltest,dc=com"
rootdn "cn=admin,dc=zltest,dc=com"
rootpw {SSHA}qKw4zhjOu7o+fpSCOUuMMnviWRavEdK0
directory /usr/local/var/openldap-data
index objectclass,entryCSN,entryUUID eq# syncrepl Provider for primary db
overlay syncprov
#用于控制OpenLDAP同步提供者(Provider)的变更日志检查点机制,通过操作数量和时间间隔两个维度触发日志截断与持久化:
# 2: 每累积 2次写操作 后触发检查点,将未提交的日志数据写入磁盘
# 1: 每隔 1秒 强制触发一次检查点,无论操作数是否达到阈值
syncprov-checkpoint 2 1
#accesslog overlay definitions for primary db
overlay accesslog
logdb cn=accesslog
logops writes
logsuccess TRUE
#每天扫描访问日志数据库,并清除超过 7 天的条目
logpurge 07+00:00 01+00:00