晓夏

YoungCheung

Zhang Sir's technical way

基于OpenLDAP_MirrorMode的OpenLDAP高可用

浏览量:72

1、主机规划

image.png

2、示意图

image.png

3、基础环境准备


#关闭selinux和防火墙
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config && sestatus
/bin/systemctl disable firewalld.service && /bin/systemctl stop firewalld.service

#配置阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
yum clean all && yum list


4、安装依赖包和下载软件包

#安装依赖
sudo yum -y install libtool-ltdl libtool-ltdl-devel gcc openssl openssl-devel cyrus-sasl* libdb* sasl*
sudo mkdir /data/ -p 
sudo chown -R operation:operation /data/
cd /data/
wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.45.tgz
wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz


二、 安装Berkeley DB和openldap

     编译安装openldap需要数据库的支持,openldap的数据库支持Berkeley DB,Oracle,Mysql,MariaDB,GDBM等数据库。默认openldap采用Berkeley DB,并且openldap对数据库有一定的要求,openldap 2.4的软件为例,需要Berkeley DB 4.4版本以上.


2.1 编译安装Berkeley DB


tar -xf db-4.6.21.tar.gz -C /data
cd /data/db-4.6.21/build_unix/ && mkdir /data/BerkeleyDB
../dist/configure --prefix=/data/BerkeleyDB
make && make install

echo "/data/BerkeleyDB/lib/" >> /etc/ld.so.conf
ldconfig -v
ln -sv /data/BerkeleyDB/include /usr/include/BerkeleyDB


2.2 编译安装openldap


tar -xf openldap-2.4.45.tgz -C /data
cd /data/openldap-2.4.45/
./configure --prefix=/data/openldap --enable-syslog --enable-modules --enable-debug --with-tls CPPFLAGS=-I/data/BerkeleyDB/include/ LDFLAGS=-L/data/BerkeleyDB/lib/ --enable-ldap --enable-relay --enable-accesslog --enable-auditlog --enable-syncprov --with-cyrus-sasl --enable-spasswd
make depend
make && make install

echo "/data/openldap/lib/" >> /etc/ld.so.conf
ldconfig -v
ln -sv /data/openldap/include/ /usr/include/ldap
ln -s /data/openldap/bin/* /usr/local/bin/
ln -s /data/openldap/sbin/* /usr/local/sbin/


2.3 配置openldap


配置openldap的方法有两种

*  通过修改配置文件实现配置

*  通过配置数据库的形式完成配置(slapd.d下的数据库配置文件),属于动态配置不需要重启slapd进程,此配置文件在cn=config目录下的LDIF的配置文件 。此文件不建议手动修改,用ldap命令生成。

这里,我们将通过第一种通过修改配置文件实现的方式来演示。

2.3.1 创建用户(假如以ldap用户启动)

sudo useradd ldap

2.3.1 创建rootdn密码

sudo /usr/local/sbin/slappasswd
New password:
Re-enter new password:
{SSHA}COM7SL18KzRv+ZI4iYC7lVZdiYrie0PX

2.3.3 创建相关目录及授权

mkdir /data/openldap/{data,log,var} -p

cp /data/openldap/etc/openldap/DB_CONFIG.example /data/openldap/data/DB_CONFIG
chown -R ldap:ldap /data/openldap/
chmod 700 -R /data/openldap/data

2.3.4 修改配置文件

$ vi /data/openldap/etc/openldap/slapd.conf

include /data/openldap/etc/openldap/schema/core.schema
include /data/openldap/etc/openldap/schema/collective.schema
include /data/openldap/etc/openldap/schema/corba.schema
include /data/openldap/etc/openldap/schema/cosine.schema
include /data/openldap/etc/openldap/schema/duaconf.schema
include /data/openldap/etc/openldap/schema/dyngroup.schema
include /data/openldap/etc/openldap/schema/inetorgperson.schema
include /data/openldap/etc/openldap/schema/java.schema
include /data/openldap/etc/openldap/schema/misc.schema
include /data/openldap/etc/openldap/schema/nis.schema
include /data/openldap/etc/openldap/schema/openldap.schema
include /data/openldap/etc/openldap/schema/ppolicy.schema
pidfile /data/openldap/var/run/slapd.pid
argsfile /data/openldap/var/run/slapd.args
loglevel 256
logfile /data/openldap/log/slapd.log
moduleload syncprov.la
disallow bind_anon
database mdb
maxsize		1073741824
directory	/data/openldap/data
suffix		"dc=iopst,dc=com"
rootdn		"cn=www,dc=iopst,dc=com"
access to dn.subtree="ou=huyu,ou=group,dc=iopst,dc=com"
  by group.exact="cn=admin,ou=huyu,ou=group,dc=iopst,dc=com" write
access to * by * read
rootpw {SSHA}04W6/rxm3B4Re/uI+ecU12GWCm5+aUmOZ
index objectclass eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
serverID 1
syncrepl rid=1
         provider=ldap://10.148.170.129:389
         bindmethod=simple
         binddn="cn=www,dc=iopst,dc=com"
         credentials=123456
         searchbase="dc=iopst,dc=com"
         schemachecking=off
         type=refreshAndPersist
         retry="60 +"

syncrepl rid=2
         provider=ldap://10.148.170.130:389
         bindmethod=simple
         binddn="cn=www,dc=iopst,dc=com"
         credentials=123456
         searchbase="dc=iopst,dc=com"
         schemachecking=off
         type=refreshAndPersist
         retry="60 +"
mirrormode on
mirrormode on

注意: 两个服务器的配置文件有两个地方不一致

1)serverID不一致 

2)provider=ldap://:port 不一致


2.3.5  开启日志功能

通过修改配置文件开启日志功能
sudo vim /etc/rsyslog.d/slapd.conf
local4.* /data/openldap/log/openldap.log

sudo systemctl restart  rsyslog

2.3.6 启动ldap

sudo /data/openldap/libexec/slapd -u ldap


三、PHPLDAPadmin安装

3.1 安装工具

yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin

3.2 修改配置文件

vim /etc/phpldapadmin/config.php 
修改如下:
$servers->setValue('login','attr','dn');
//$servers->setValue('login','attr','uid');

vi /etc/httpd/conf.d/phpldapadmin.conf
#Apache2.4 
Require local
Require all granted

#Apache 2.2
Order Deny,Allow
Deny from all
Allow from all

3.3 启动httpd

systemctl start httpd

3.4 访问http://10.148.170.129 && http://10.148.170.130


四、数据同步演示

image.png

image.png

现在在10.148.170.129创建一个OU名为t1

image.png

可以看到已经同步到10.148.170.130,现在我们在10.148.170.130上创建一个OU名为t2

image.png


四、问题处理

4. 1、 This base cannot be created with PLA.(如果导入用户恢复无需操作)

1)添加一个base.ldif文件,里面的dc和配置文件里的保持一致即可
dn: dc=iopst,dc=cn
o: ldap
objectclass: dcObject
objectclass: organization

2)然后执行命令导入数据库
ldapadd -f base.ldif -x -D cn=www,dc=iopst,dc=cn  -W

然后会提示输入密码,添加成功会提示增加了一个新的节点
Enter LDAP Password:
adding new entry "dc=iopst,dc=cn"

3)在 phpldapadmin 控制面板刷新下,发现根节点已经变成了可以编辑的状态了。


五、数据导出与导入

#导出
 /data/openldap/bin/ldapsearch -LLL  -x  -w admin@123 -D "cn=www,dc=iopst,dc=com" -b "dc=iopst,dc=com" > backup_data2.ldif
 
#导入
/data/openldap/bin/ldapadd -x -D "cn=www,dc=iopst,dc=cn" -w "admin@123" -f  backup_data.ldif




神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。