OpenLDAP Master/Slave部署

本文介绍如何配置OpenLDAP以实现Master-Slave同步复制。采用refreshAndPersist模式,主服务器通过推模式更新从服务器,确保数据一致性。文章详细展示了slapd.conf配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了支持HA,OpenLDAP部署成Master/Slave同步复制方式,Slave实时通过Syncrepl方式进行复制。

Syncrepl 使用LDAP内容同步协议(或简称 LDAP Sync) 作为复制同步协议. LDAP Sync 提供一个有状态的复制,它同时支持拉模式和推模式同步并且不要求使用历史存储。

本例使用refreshAndPersist 同步模式, 提供者使用基于推模式的同步. 提供者维护对请求了一个持久性搜索的消费者服务器的跟踪,并且当提供者复制内容修改的时候向它们发送必要的更新。

OpenLDAP的复制技术请参考:http://wiki.jabbercn.org/index.php?title=OpenLDAP2.4%E7%AE%A1%E7%90%86%E5%91%98%E6%8C%87%E5%8D%97&variant=zh-hans#Delta-syncrepl.E5.A4.8D.E5.88.B6

下面是我的OpenLDAP Master的slapd.conf的配置内容:

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/ppolicy.schema

serverid 0

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

# Load dynamic backend modules:
modulepath      /usr/lib/openldap
moduleload      back_bdb
# 装载操作日志 overlay
moduleload accesslog.la
#装载 syncprov overlay
moduleload syncprov.la
#security policy
moduleload ppolicy.la

# Specific Backend Directives for bdb:
backend         bdb

# 操作日志数据库定义
database bdb
suffix cn=accesslog
directory /etc/openldap/db/accesslog
rootdn cn=accesslog
index default eq
index entryCSN,objectClass,reqEnd,reqResult,reqStart

overlay syncprov
syncprov-nopresent TRUE
syncprov-reloadhint TRUE

#######################################################################
# BDB database definitions
#######################################################################

database        bdb
suffix          "dc=xxxx,dc=cn"
rootdn          "cn=Manager,dc=xxxx,dc=cn"

rootpw          {SSHA}vnFurKif06ZBDPDJ7zOfuh6w78ORH4eE

directory       /var/lib/openldap

# Indices to maintain
index   objectClass     eq
# syncprov 特别索引
index entryCSN eq
index entryUUID eq

# 主数据库的syncrepl提供者
overlay syncprov
syncprov-checkpoint 1000 60
# 主数据库的操作日志overlay定义
overlay accesslog
logdb cn=accesslog
logops writes
logsuccess TRUE
# 每天扫描一次操作日志数据库, 并清除7天前的条目
logpurge 07+00:00 01+00:00

# 让复制DN有无限搜索权限
limits dn.exact="cn=Manager,dc=xxxx,dc=cn" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

# invokes password policies for this DIT only
password-hash {SSHA}
overlay ppolicy
ppolicy_default "cn=default,ou=policies,dc=xxxx,dc=cn"
ppolicy_hash_cleartext

Slave消费者的slapd.conf内容:

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/ppolicy.schema

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

# Load dynamic backend modules:
modulepath      /usr/lib/openldap
moduleload      back_bdb
#装载 syncprov overlay
moduleload syncprov.la
#security policy
moduleload ppolicy.la

# Specific Backend Directives for bdb:
backend         bdb

#######################################################################
# BDB database definitions
#######################################################################

database        bdb
suffix          "dc=xxxx,dc=cn"
rootdn          "cn=Manager,dc=xxxx,dc=cn"

rootpw          {SSHA}vnFurKif06ZBDPDJ7zOfuh6w78ORH4eE

directory       /var/lib/openldap

# Indices to maintain
index   objectClass     eq
# syncrepl特有的索引
index entryUUID eq

# syncrepl参数
syncrepl  rid=0
 provider=ldap://192.168.1.14:389
 bindmethod=simple
 binddn="cn=Manager,dc=xxxx,dc=cn"
 credentials=secret
 searchbase="dc=xxxx,dc=cn"
 logbase="cn=accesslog"
 logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
 schemachecking=off
 type=refreshAndPersist
 retry="5 5 300 5"
 syncdata=accesslog

# 提交更新到主服务器
updateref               ldap://192.168.1.14
overlay         syncprov

# invokes password policies for this DIT only
password-hash {SSHA}
overlay ppolicy
ppolicy_default "cn=default,ou=policies,dc=xxxx,dc=cn"
ppolicy_hash_cleartext

配置时要注意syncrepl行后面的相关内容是多行的,每行前面必须留有空格。

在CentOS上为OpenLDAP添加自签名SSL/TLS支持的步骤如下: ### 1. 安装必要工具 ```bash yum install openldap-servers openssl ``` ### 2. 生成自签名证书 ```bash # 创建证书存放目录 mkdir -p /etc/openldap/certs # 生成私钥(无密码) openssl genrsa -out /etc/openldap/certs/ldap.key 2048 # 生成自签名证书(CommonName填写服务器主机名/IP) openssl req -new -x509 \ -key /etc/openldap/certs/ldap.key \ -out /etc/openldap/certs/ldap.crt \ -days 365 \ -subj "/CN=your_server_hostname_or_ip" # 设置权限 chmod 400 /etc/openldap/certs/ldap.key chmod 444 /etc/openldap/certs/ldap.crt ``` ### 3. 配置OpenLDAP #### 对于使用动态配置(cn=config)的情况: ```bash # 创建LDIF文件 tls.ldif cat > tls.ldif << EOF dn: cn=config changetype: modify add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/openldap/certs/ldap.crt - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/ldap.crt - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key EOF # 应用配置 ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif ``` #### 对于传统配置(slapd.conf): ```bash vim /etc/openldap/slapd.conf # 添加以下内容 TLSCACertificateFile /etc/openldap/certs/ldap.crt TLSCertificateFile /etc/openldap/certs/ldap.crt TLSCertificateKeyFile /etc/openldap/certs/ldap.key ``` ### 4. 修改监听配置 ```bash vim /etc/sysconfig/slapd # 修改SLAPD_URLS行 SLAPD_URLS="ldapi:/// ldap:/// ldaps:///" ``` ### 5. 配置防火墙 ```bash firewall-cmd --permanent --add-service=ldaps firewall-cmd --reload ``` ### 6. 重启服务 ```bash systemctl restart slapd systemctl enable slapd ``` ### 7. 验证连接 ```bash # 使用StartTLS方式验证 ldapsearch -ZZ -H ldap://localhost -x -b "" -s base # 使用LDAPS方式验证 ldapsearch -H ldaps://localhost -x -b "" -s base ``` ### 可能遇到的问题及解决: 1. **证书验证失败**: ```bash # 客户端临时关闭验证(仅测试用) vim /etc/openldap/ldap.conf ``` 添加: ```ini TLS_REQCERT allow ``` 2. **SELinux阻止访问**: ```bash semanage fcontext -a -t cert_t '/etc/openldap/certs(/.*)?' restorecon -Rv /etc/openldap/certs ``` 3. **端口未监听**: ```bash netstat -tulnp | grep 636 ``` > 注意:生产环境应使用正式CA签名的证书,并保持TLS验证严格模式。测试环境完成后建议恢复`TLS_REQCERT`为默认值。
最新发布
05-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值