背景:

某客户做用户中心项目。使用OpenLDAP做为存储用户信息。LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现,且支持众多系统版本,被广大互联网公司所采用。目录服务是一种特殊的数据库系统,对于数据的读取、浏览、搜索有很好的效果。同时做为用户中心,数据库的高可用显得尤为重要。在客户生产环境中使用的是客户的负载均衡设备,基于思杰的硬件负载均衡设备,后端配置的是OpenLDAP_MirrorMode,相当于Mysql的双主模式,后面某一台服务器出现问题,负载均衡会将后端的服务器剔除,另一台仍能提供服务,如下图所示

实验环境:
操作系统: centos 7.2
服务器A:10.10.1.134
服务器B:10.10.1.132

一:环境准备

  • 下载软件:
    mkdir /home/admin/openldap && cd /home/admin/openldap

wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap- release/openldap-2.4.23.tgz
wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz

  • 关闭selinux
    sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config && sestatus
  • 防火墙关闭
    /bin/systemctl disable firewalld.service && /bin/systemctl stop firewalld.service
  • 配置yum源为阿里云yum源
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #从阿里云镜像网站下载yum源配置文件到yum目录中

sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo #修改版本号为redhat7
yum clean all #清空yum缓存
yum list #生成列表

  • 安装openldap环境所需要的依赖包。
    yum -y install libtool-ltdl libtool-ltdl-devel gcc openssl openssl-devel cyrus-sasl-lib.x86_64 cyrus-sasl-devel.x86_64 cyrus-sasl-plain.x86_64 cyrus-sasl-md5.x86_64 cyrus-sasl-ldap.x86_64

二:安装openldap和Berkeley DB

1. 写在安装之前:

  • 编译安装openldap需要数据库的支持,openldap的数据库支持
    Berkeley DB,Oracle,Mysql,MariaDB,GDBM等数据库。默认openldap采用Berkeley DB,并且openldap对数据库有一定的要求,openldap 2.4的软件为例,需要Berkeley DB 4.4版本以上,所以在编译安装openldap源码包时需要先下载安装Berkeley DB

2.编译安装Berkeley DB

  • tar -xf db-4.6.21.tar.gz -C /usr/local/src
  • cd /usr/local/src/db-4.6.21/build_unix/ && mkdir /usr/local/BDB
  • ../dist/configure --prefix=/usr/local/BDB
  • make && make install
  • echo "/usr/local/BDB/lib/" > /etc/ld.so.conf.d/bdb.conf
  • ldconfig -v
  • ln -sv /usr/local/BDB/include /usr/include/BDB

3. 编译安装openldap

  • tar -xf openldap-2.4.23.tgz -C /usr/local/src/
  • cd /usr/local/src/openldap-2.4.23/
  • ./configure --prefix=/usr/local/openldap --enable-syslog --enable-modules --enable-debug --with-tls CPPFLAGS=-I/usr/local/BDB/include/ LDFLAGS=-L/usr/local/BDB/lib/ --enable-ldap --enable-relay --enable-accesslog --enable-auditlog --enable-syncprov --with-cyrus-sasl --enable-spasswd
  • make depend
  • make && make install
  • echo "/usr/local/openldap/lib/" > /etc/ld.so.conf.d/ldap.conf
  • ldconfig -v
  • ln -sv /usr/local/openldap/include/ /usr/include/ldap
  • ln -s /usr/local/openldap/bin/* /usr/local/bin/
  • ln -s /usr/local/openldap/sbin/* /usr/local/sbin/

三:配置openldap

1 配置openldap的方法有两种:

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

2配置rootdn密码(optional)

  • /usr/local/openldap/bin/slappasswd
    此密码记住,后面配置openldap会用到。

3 创建用户ldap

  • useradd ldap

4创建数据目录以及日志文件

  • mkdir /data/openldap/{data,log,var} -p
  • cd /data/openldap/var/
  • mkdir run

5 修改权限:

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

6修改openldap配置文件

编辑配置文件vim slapd.conf
include /usr/local/openldap/etc/openldap/schema/core.schema
include /usr/local/openldap/etc/openldap/schema/collective.schema
include /usr/local/openldap/etc/openldap/schema/corba.schema
include /usr/local/openldap/etc/openldap/schema/cosine.schema
include /usr/local/openldap/etc/openldap/schema/duaconf.schema
include /usr/local/openldap/etc/openldap/schema/dyngroup.schema
include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include /usr/local/openldap/etc/openldap/schema/java.schema
include /usr/local/openldap/etc/openldap/schema/misc.schema
include /usr/local/openldap/etc/openldap/schema/nis.schema
include /usr/local/openldap/etc/openldap/schema/openldap.schema
include /usr/local/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 # 需要数据同步需要开启此模块
database bdb
directory /data/openldap/data
suffix "dc=boe,dc=com"
rootdn "cn=Manager,dc=boe,dc=com"
rootpw {SSHA}eJtr5umAo23PqTKATU/X6D8swJ9yIlSx #用slappasswd命令生成的密码
index objectclass,entryCSN,entryUUID eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
serverID 2
syncrepl rid=123
provider=ldap://对端服务器ip
bindmethod=simple
binddn="cn=Manager,dc=boe,dc=com"
credentials=密码(管理员密码,这里是Manager的密码)
searchbase="dc=boe,dc=com"
schemachecking=off
type=refreshAndPersist
retry="60 +"
mirrormode on
两个服务器的配置文件有两个地方不一致
1)serverID不一致
2)provider=ldap://对端的ip

7开启日志功能

  • 通过修改配置文件开启日志功能
  1. /etc/rsyslog.d/slapd.conf

local4.* /data/openldap/log/openldap.log
重启rsyslog和slapd
service rsyslog restart

  • 通过修改数据库配置文件开启
  1. /root/loglevel.ldif << EOF

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
ldapadd -x -D "cn=Manager,dc=boe,dc=com" -f ./loglevel.ldif -w secret

四:配置phpldpadmin工具

1 安装和配置LDAP管理工具PHPldapadmin

  • 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

2 修改配置文件

  • vim /etc/phpldapadmin/config.php +398
    397行取消注释,398行添加注释

$servers->setValue('login','attr','dn');

  • vi /etc/httpd/密码 d/phpldapadmin.conf
    Apache 2.4

Require all granted (修改此处)
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1

3 设置开机自启并启动Apache

[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# systemctl start httpd
启动openldap
/usr/local/openldap/libexec/slapd
访问用http://ip/phpldapadmin访问如图


在10.10.1.132上创建了一个OU名为testou,会发现10.10.1.132会自动同步到本地,如图:


两服务器日志如下:


以上结果得知,在镜像模式下,当其中一台服务器增加操作OU时,另一台也会同步增加,两台服务器均可进行读写操作,任何一台信息发生变化,都会以推的方式进行通知。

基于OpenLDAP_MirrorMode的OpenLDAP高可用相关推荐

  1. 美团点评基于MGR的CMDB高可用架构搭建之路

    来自:DBAplus社群 本文根据王志朋老师在dbaplus社群[2018年8月4日北京数据架构与数据优化技术沙龙]现场演讲内容整理而成. 讲师介绍 王志朋 美团点评DBA 曾在京东金融担任DBA,目 ...

  2. linux集群管理平台,基于Linux平台的高可用集群管理系统的研究与实现

    摘要: 集群管理系统的高可用性是指其能够连续地对外提供服务,本文针对集群系统的高可用性,以开源的集群搭建和管理软件KUSU为基础,以集群管理节点的双机热备份技术理论为支撑,以实现集群系统的帮障检测与业 ...

  3. 美团点评基于MGR的CMDB高可用架构搭建之路【转】

    王志朋 美团点评DBA 曾在京东金融担任DBA,目前就职于美团点评,主要负责金融业务线数据库及基础组件数据库的运维. MySQL Group Replication(以下简称MGR),于5.7.17版 ...

  4. 基于Consul的数据库高可用架构【转】

    几个月没有更新博客了,已经长草了,特意来除草.本次主要分享如何利用consul来实现redis以及mysql的高可用.以前的公司mysql是单机单实例,高可用MHA加vip就能搞定,新公司mysql是 ...

  5. mysql 热切换_热璞HotDB学习篇—如何基于MySQL进行数据高可用

    数据高可用之所以是老生常谈的话题,是因它对企业数据安全起到了至关重要的保障作用,数据高可用核心功能在于如何保证在发生故障时数据不丢失.本文作者热璞数据库HotDB首席架构师,精通数据库原理和MySQL ...

  6. B2C商城项目源码,基于Java开发的高可用分布式B2C商城系统,Java+Spring MVC+Dubbo+Zookeeper+MySQL+Redis+FastDFS+Nginx+Solr

    目录 前言 B2C商城-AIYOU 一.项目总体架构 二.系统软硬件设施总体规划 1.系统服务规划 2.应用服务规划 3.应用系统域名规划 三.系统运行环境构建 四.项目数据库创建 五.项目拉取 六. ...

  7. 项目 - 基于Docker Swarm的高可用Web集群

    目录 项目名称:基于Docker Swarm的高可用Web集群 项目环境:Docker 20.10.3,CentOS 8.2 (8台 1核1G),Ansible 2.9.17,Keepalived,N ...

  8. 03_项目-基于Docker Swarm的高可用Web集群

    文章目录 项目名称:基于Docker Swarm的高可用Web集群 网络拓扑图 数据流程图 项目环境:Docker 20.10.3,CentOS 8.2(8台 1核1G),Ansible 2.9.17 ...

  9. HAProxy基于KeepAlived实现Web高可用及动静分离

    前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载. HA ...

最新文章

  1. getchar getche getch的区别
  2. 什么是Java内存模型中的happens-before
  3. Py之seaborn:数据可视化seaborn库(二)的组合图可视化之密度图/核密度图分布可视化、箱型图/散点图、小提琴图/散点图组合可视化的简介、使用方法之最强攻略(建议收藏)
  4. Python学习之urlib模块和urllib2模块学习
  5. EDLines: A real-time line segment detector with a false detection control
  6. 微服务架构的服务与发现-Spring Cloud
  7. DNN2(DotNetNuke2.0)的一些资源
  8. MapReduce实现QQ好友推荐
  9. 计算机网络的分类3:按网络的工作方式分类,分为集中式网络、分布式网络
  10. 世界各国国家代号与区号
  11. DLL无法注入的原因查找
  12. win10蓝牙故障无法正常使用的有效解决方法
  13. Java程序设计与项目实战(全程实录)全新上市
  14. javascript操作select元素一例
  15. 通过ajax记录打印信息
  16. 极智AI | 全场景算力产品矩阵 看算能系列AI产品
  17. 学Java开发到底能做什么工作?
  18. 阅文集团副总裁傅徐军:最佳技术架构选型方法论 1
  19. 课程表 (leetcode)
  20. react native ffmpeg 视频处理

热门文章

  1. 绕开数学,讲讲信息论
  2. AI+视频分析:实时监测无处不在的安全风险
  3. Facebook 开源聊天机器人Blender,经94 亿个参数强化训练,更具“人情味”
  4. 实验室蒋田仔研究员:脑网络组图谱近10年研究详解【附PPT】
  5. 特斯拉烧,特斯拉烧完蔚来烧
  6. 盘点2018十大科技丑闻,IT相关两项
  7. DNA复制体结构和工作原理首次被揭示
  8. 从空军机长到大厂程序员,关系数据库之父传奇
  9. ​如何设计一个安全可靠的 API 接口?
  10. python 获取当前ip