yum安装openldap2.4.44,并配置增量复制(Delta-syncrepl)环境

本文是在centos7环境下通过yum安装openldap2.4.44,并配置增量复制(Delta-syncrepl)环境

官网对于增量复制介绍:https://www.openldap.org/doc/admin24/replication.html#Delta-syncrepl%20replication

Delta-syncrepl 是 syncrepl 的一种基于变更日志的变体,旨在解决上述情况。Delta-syncrepl 通过在提供程序的单独数据库中维护可选深度的变更日志来工作。复制消费者检查变更日志以查找它需要的更改,只要变更日志包含所需的更改,消费者就会从变更日志中获取更改并将它们应用到其数据库中。但是,如果消费者太不同步(或完全为空),则使用传统的 syncrepl 使其更新,然后复制切换回 delta-syncrepl 模式。

**注意:**由于数据库状态同时存储在供应商的变更日志数据库和主数据库中,因此在恢复数据库或将其复制到另一台机器时,使用 slapcat/slapadd 备份/恢复变更日志数据库和主数据库非常重要

一、准备

  1. 更换yum源

    # "备份原来的源"
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
    # "下载、替换为阿里云源配置" 
    wget https://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
    
    # "更新yum缓存" 
    yum clean all
    yum makecache
    
  2. 关闭防火墙和selinux

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld			
    
    [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    [root@localhost ~]# setenforce 0
    

二、yum安装(主从节点都执行)

yum  install -y openldap openldap-servers openldap-clients  compat-openldap openldap-servers-sql openldap-devel

#可以通过rpm -ql ,来查看每个安装包都有哪些文件

软件包软件包说明
openldap服务端和客户端必须用的库文件
openldap-clients在LDAP服务端使用,用户增删改查的命令行环境
openldap-servers用于启动服务和配置,包括单独的LDAP后台守护进程
openldap-servers-sql支持SQL模块
compat-openldapopenldap兼容性库环境
openldap-devel开发包,可选
  • 安装过程中会自动创建ldap用户和ldap组(确认安装完毕)

    [root@localhost cn=config]# grep ldap /etc/passwd
    ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
    [root@localhost cn=config]# grep ldap /etc/group
    ldap:x:55:
    
  • 通过slapd -VV查看安装的版本

    [root@localhost openldap-servers]# slapd -VV
    @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
            mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
    

    yum源安装默认位置:/etc/openldap

三、主节点配置

yum源安装,默认使用的是dbd的数据库,但是官网在该版本建议使用mdb(之后的版本也会使用mdb,抛弃了dbd和hdb),因此更换数据库为mdb。

网上很多的资料显示需要复制数据库模版:如下

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

但是对于mdb数据库而言,不需要此步骤

1、启动ldap,并设置开机启动

systemctl enable slapd && systemctl start slapd && systemctl status slapd

2、创建配置文件

执行slappasswd命令,得到想要设置的管理员密码加密后的结果(此处设置为123456)

下方输出的{SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3则为加密后的结果,在下面的配置文件中需要用到

[root@localhost ~]# slappasswd -s 123456
{SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3

在/etc/openldap目录下,创建slapd.conf文件,并编写增量复制相关配置

虽然在2.4.x的某个版本后,官网不再使用slapd.conf文件作为主配置文件,而是使用的是slapd.d目录中的配置文件(并且不支持直接修改该目录下的文件,若想修改配置需要编写ldif文件修改)

但是对于增量复制的相关配置,官网给出的文档,依然是slapd.conf的方式进行的配置

所以此处进行slapd.conf的编写,再通过slaptest -f slapd.conf -F slapd.d命令生成slapd.d的配置目录

cd /etc/openldap
vim slapd.conf

具体配置内容如下:

官网配置参考:https://www.openldap.org/doc/admin24/replication.html#Delta-syncrepl

# 此处引入所有的schema 具体的schema在/etc/openldap/schema目录下,
# 不同的版本有schema有不同的区别,根据实际情况进行引入
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema
include         /etc/openldap/schema/pmi.schema

# Allow LDAPv2 client connections.  This is NOT the default.
# 允许LDAPv2客户端连接。这不是默认值
allow bind_v2

# 这两个文件包含启动 slapd 进程所用的 PID(进程 ID)和一些参数
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

# Load dynamic backend modules
# - modulepath is architecture dependent value (32/64-bit system)
# - back_sql.la overlay requires openldap-server-sql package
# - dyngroup.la and dynlist.la cannot be used at the same time

#设置模块路径位置
#对应32位操作系统
modulepath /usr/lib/openldap
#对应64位操作系统
modulepath /usr/lib64/openldap


#加载accesslog overlay
moduleload accesslog.la
#加载mdb后端
moduleload back_mdb.la
#加载syncprov overlay
moduleload syncprov.la
#加载memberof
moduleload memberof.la

# 访问控制
# enable on-the-fly configuration (cn=config)
database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

# enable server status monitoring (cn=monitor)
# `cn=directory manager,dc=cbpm,dc=com`根据自己的实际情况填写
database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=directory manager,dc=cbpm,dc=com" read
        by * none

#配置change log数据库,更新操作对应的日志记录就存储在这个数据库中
#这个数据库是增量复制环境所需要的
database mdb
maxsize 85899345920
suffix "cn=accesslog"
rootdn "cn=accesslog"
#使用上方加密后的结果
rootpw {SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3
#这一项配置的是更新日志的存储路径,注意accesslog是一个目录而不是一个文件,从directory 这个关键字也可得知。
#=====注意=======此处需要先创建出如下的目录,否则启动会报错
directory /var/lib/ldap/accesslog
index default eq
index entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN

#设置让dn管理员可无限制地搜索
limits dn.exact="cn=directory manager,dc=cbpm,dc=com" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

#配置复制引擎
overlay syncprov
syncprov-nopresent TRUE
syncprov-reloadhint TRUE


#配置主数据库,即目录树数据存储的数据库
database    mdb
maxsize 85899345920
#表示目录数的根节点,一切的数据存储都是基于该节点进行存储的,所以它是base节点。
suffix      "dc=cbpm,dc=com"
#checkpoint 确定写入真实数据库前保留在事务日志中的数据量(以 KB 为单位)以及两次写操作之间的时间(以分钟为单位)。
checkpoint  1024 15
#表示管理员。 此处根据实际情况自定义,我这里的管理员为`cn=directory manager,dc=cbpm,dc=com`
rootdn      "cn=directory manager,dc=cbpm,dc=com"
#表示管理员密码 #使用上方加密后的结果
rootpw      {SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3
#表示主数据库的数据存储路径,这个路径最好不要与change log数据库的路径一样
directory       /var/lib/ldap

# syncprov 特定索引
index entryCSN eq
index entryUUID eq

# syncrepl 主数据库
##设置复制检查点
overlay syncprov
syncprov-checkpoint 1000 60

# 开启memberof
overlay memberof

#设置日志级别
loglevel        17152

#设置overlay accesslog
overlay accesslog
logdb cn=accesslog
logops writes
logsuccess TRUE
#每天扫描一次操作日志数据库, 并清除7天前的条目
logpurge 07+00:00 01+00:00
#设置让dn管理员可无限制地搜索
limits dn.exact="cn=directory manager,dc=cbpm,dc=com" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

注意:上述配置中的 directory /var/lib/ldap/accesslog目录需要提前创建,否则会报错

第三步中会删除一次/var/lib/ldap/下的所有内容,删除完之后需要创建

mkdir /var/lib/ldap/accesslog

3、删除原有配置,生成新配置

#进入openldap安装目录
cd /etc/openldap

#备份原有配置文件目录slapd.d
mv slapd.d slapd.d_bak

#创建新的slapd.d目录
mkdir slapd.d

#清除/var/lib/ldap下的目录
rm -rf /var/lib/ldap/*
#需要提前创建出配置文件中directory所对应的目录,否则会报错
mkdir /var/lib/ldap/accesslog


#根据新的slapd.con配置文件,生成新的配置文件到新建的slapd.d目录下
#执行该命令时会报错,属于正常现象,因为我们在配置文件中修改了数据库为mdb,重启后就好了
#执行完之后可以进入slapd.d目录下,可以看到已经生成了相应的配置文件
#报错内容如下:
#63900159 mdb_db_open: database "cn=accesslog" cannot be opened: No such file or directory (2). #Restore from backup!
#63900159 backend_startup_one (type=mdb, suffix="cn=accesslog"): bi_db_open failed! (2)
#slap_startup failed (test would succeed using the -u switch)
slaptest -f slapd.conf -F slapd.d
slaptest -u

#赋予权限
chown -R ldap.ldap /var/lib/ldap
chown -R ldap.ldap slapd.d

#重启ldap
systemctl restart slapd

四、从节点配置

1、启动ldap,并设置开机启动

systemctl enable slapd && systemctl start slapd && systemctl status slapd

2、创建配置文件

cd /etc/openldap
vim slapd.conf

具体配置内容如下:

官网配置参考:https://www.openldap.org/doc/admin24/replication.html#Delta-syncrepl

# 此处引入所有的schema 具体的schema在/etc/openldap/schema目录下,
# 不同的版本有schema有不同的区别,根据实际情况进行引入
# 从节点引入的schema需要与主节点一致
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema
include         /etc/openldap/schema/pmi.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

##
pidfile     /var/run/openldap/slapd.pid
argsfile    /var/run/openldap/slapd.args

##
modulepath /usr/lib/openldap
modulepath /usr/lib64/openldap

#加载memberof
moduleload memberof.la

# enable on-the-fly configuration (cn=config)
database config
access to *
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
    by * none

# enable server status monitoring (cn=monitor)
# `cn=directory manager,dc=cbpm,dc=com`根据自己的实际情况填写
database monitor
access to *
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=directory manager,dc=cbpm,dc=com" read
        by * none

##配置主数据库,注意,从节点不需要配置change log数据库
database    mdb
maxsize 85899345920
suffix      "dc=cbpm,dc=com"
checkpoint  1024 15
# 管理员账户,根据实际情况填写
rootdn      "cn=directory manager,dc=cbpm,dc=com"
#密码使用和主节点一致123456 (也可以重新生成)
rootpw      {SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3
directory       /var/lib/ldap

# 开启memberof
overlay memberof

##设置索引
index entryUUID eq


#配置日志级别
loglevel        17152


#配置从主节点同步数据
# provider 填写主节点的ip或者域名(10.8.0.126是我的主节点ip)
# binddn   填写dn (根据实际情况填写)\
# credentials  密码 (根据实际情况填写)
# searchbase   base (根据实际情况填写)
#注意下方的中间行之间不能添加任何注释,否则会报错
syncrepl  rid=0
          provider="ldap://10.8.0.126:389"
          bindmethod=simple
          binddn="cn=directory manager,dc=cbpm,dc=com"
          credentials=123456
          searchbase="dc=cbpm,dc=com"
          logbase="cn=accesslog"
          logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
          schemachecking=on
          type=refreshAndPersist
          retry="60 +"
          syncdata=accesslog

# 配置当在从节点执行修改操作时,同时将其提交给master节点
updateref ldap://10.8.0.126

3、删除原有配置,生成新配置

#进入openldap安装目录
cd /etc/openldap

#备份原有配置文件目录slapd.d
mv slapd.d slapd.d_bak

#创建新的slapd.d目录
mkdir slapd.d

#清除/var/lib/ldap下的目录
rm -rf /var/lib/ldap/*

#根据新的slapd.con配置文件,生成新的配置文件到新建的slapd.d目录下
#执行该命令时会报错,属于正常现象,因为我们在配置文件中修改了数据库为mdb,重启后就好了
#执行完之后可以进入slapd.d目录下,可以看到已经生成了相应的配置文件
#报错内容如下:
#63900574 mdb_db_open: database "dc=cbpm,dc=com" cannot be opened: No such file or directory (2). Restore from backup!
#63900574 backend_startup_one (type=mdb, suffix="dc=cbpm,dc=com"): bi_db_open failed! (2)
#slap_startup failed (test would succeed using the -u switch)
slaptest -f slapd.conf -F slapd.d
slaptest -u

#赋予权限
chown -R ldap.ldap /var/lib/ldap
chown -R ldap.ldap slapd.d

#重启ldap
systemctl restart slapd

五、测试同步

在主节点创建user.ldif文件

#建议将ldif文件创建在非/etc/openldap的其他目录
cd ~
#编辑文件
vim user.ldif

内容如下:创建cbpm.com的根,创建Groups的ou,在Groups下创建SuperAdmin人员

dn: dc=cbpm,dc=com
objectClass: domain
objectClass: top
dc: cbpm

dn: ou=Groups,dc=cbpm,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Groups

dn: cn=SuperAdmin,ou=Groups,dc=cbpm,dc=com
objectClass: groupOfUniqueNames
objectClass: top
cn: SuperAdmin
uniqueMember:: Y249YXBwQWNjb3VudCxvdT1Hcm91cHMsbz3mgLvlhazlj7gsZGM9Y2JwbSxkY
 z1jb20=

执行命令进行添加:

ldapadd -x -D "cn=directory manager,dc=cbpm,dc=com" -w123456 -f user.ldif

通过Apache Directory Studio工具查看主节点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-URq07UZN-1670481754519)(image2/1.png)]

通过Apache Directory Studio工具查看从节点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gaf2Y2un-1670481754520)(image2/2.png)]

六、自定义schema(主从节点都执行)

前提:公司需求需要新建一个CBPMPerson类,并添加Identitynumber(身份证号)的属性

因此需要自定义Schema

1、创建一个专门存放自定义schema的目录

mkdir /mySchema
cd /mySchema
touch CBPMPerson.conf
touch CBPMPerson.schema

2、编辑配置文件 CBPMPerson.conf

vim CBPMPerson.conf

输入以下内容:

# 参考自己OpenLDAP安装的路径,这个是inetorgperson类别需要的schema,如果SUP是top,则下面三行不需要引入
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema

# 即引入上步骤创建的schema文件
include /mySchema/CBPMPerson.schema

3、编辑配置文件 CBPMPerson.schema

vim CBPMPerson.schema

输入以下内容:

attributeTypes: ( 3.2.2.1.4 NAME 'Identitynumber' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SINGLE-VALUE )
objectClass (
    3.2.2.1.5
    NAME 'CBPMPerson'
    SUP inetOrgPerson STRUCTURAL
    MUST ( Identitynumber ))

若是以上参数不了解的,可以参考:https://www.pudn.com/news/62e2901b55398e076bedd02d.html 中的内容介绍

4、执行slaptest命令

执行slaptest命令编译自定义的schema,生成ldif等文件

slaptest -f /mySchema/CBPMPerson.conf -F /mySchema

此时会在/mySchema目录下生成cn=config文件夹:

ls /mySchema/cn=config/cn=schema

我们自己定义的文件为cn={3}cbpmperson.ldif

5、修改生成的文件cn={3}cbpmperson.ldif

cd /mySchema/cn\=config/cn\=schema/
vim cn={3}cbpmperson.ldif

修改前:
在这里插入图片描述

修改后:

在这里插入图片描述

注意:dn: cn=CBPMPerson,cn=schema,cn=config

第一个cn是根据ObjectClass的名字定的,cn=scheme,cn=config为固定写法

6、修改文件名字

[root@localhost cn=schema]# ls
cn={0}core.ldif  cn={1}cosine.ldif  cn={2}inetorgperson.ldif  cn={3}cbpmperson.ldif
[root@localhost cn=schema]# mv cn\=\{3\}cbpmperson.ldif CBPMPerson.ldif

7、执行 slapadd命令,将该文件添加进OpenLdap库

slapadd -l /mySchema/cn\=config/cn\=schema/CBPMPerson.ldif -n 0

8、查看是否成功将自定义ldif加入到官方库中

cd /etc/openldap/slapd.d/cn\=config/cn\=schema/
ls

在这里插入图片描述

9、重启slapd服务

#先要赋予新的schema权限,(这里直接给slapd.d目录权限)
chown -R ldap.ldap /etc/openldap/slapd.d
#重启
systemctl restart slapd

七、补充

1、开启日志配置

生成logLevel.ldif文件

#尽量将自己创建的ldif文件放在非/etc/openldap目录下
cd ~

cat> loglevel.ldif<< EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF

导入logLevel.ldif

ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif

创建slapd.log文件

mkdir /var/log/openldap
touch /var/log/openldap/slapd.log

#"+73"表示指定位到文件73行
vim /etc/rsyslog.conf +73

#**在73行**local7.*          /var/log/boot.log***
#73行的下一行增加如下内容
local4.*     /var/log/openldap/slapd.log

重启系统日志服务与ldap服务

systemctl restart rsyslog
systemctl restart slapd
systemctl status slapd
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值