openldap-2.4新主从配置详细介绍(1)

openldap-2.4版本主从配置



PS:最近在搞ldap,当正在进行主从配置的时候,发现装的2.4.23版本的竟然没有slurpd这个守护进程的开启命令。然后上网搜了一下,原来2.4版本以后对主从、主主等模式做了大的改进。然后翻看官方的文档,将这些记录了下来。当然此文带有严重的本人理解色彩,所以如果出错,请见谅!能指出最好。

OpenLdap v2.3之前的同步复制缺点:

slurpd守护进程是以推模式操作 : 主服务器推送变更的数据到从服务器  (不可靠)
对replog中的记录的次序极为敏感
很容易失去同步, 这时需要手工干预来从主目录重新同步从服务器数据库
如果一个从服务器长时间停机,replog可能变得太大以至于slurpd无法处理
只工作在推模式(也可以设置为拉模式,但是这种感觉类似于将master上的数据做了一个快捷连接到slave上)
需要停止和重新启动主服务器来增加从服务器
只支持单一主服务器复制(1台主对多从)

OpenLDAP v2.4之后的同步功能:

PS:新版最大的功能就是实现了双向复制,即双主、多主模式,无论哪一台master宕机,都不会影响使用。

新版主从配置有五中方式,这里只讲述最基本也是最简单的Syncrepl主从配置、MirrorMode镜像模式N-Way Multi-Master(多主)三种方式。

Syncrepl
该方式是slave服务器以拉的方式同步master的用户数据

该方式缺点:当你修改一个条目中的一个属性值(or大批量的万级别的某1属性值),它不是简单的同步过来这些属性,而是把修改的条目一起同步更新来。

Delta-syncrepl
比上一条多了个功能:基于日志同步:

你在master每更改1条记录,肯定会产生1条日志,那么slave会通过你的master日志进行相应的修改,这就克服了上一条的缺点。

N-Way Multi-Master 多主方式同步LDAP信息
MirrorMode
该方式是服务器互相推送信息的方式同步用户数据

MirrorMode只支持2个主master(2个主master可以+N个slave),但是你如果非得加了3 、4 台master后,那么其余的都只能从前2台master上获取数据,而不能将本身的数据推送过去。

如果你有类似需求,也可以使用这个方式。(比如,你企业分散点多,然后不希望都具有修改功能,可以使用它)

Syncrepl Proxy
代理同步。

意思是将主master隐藏起来,而代理机上边通过Syncrepl从master主机以拉的方式同步master用户数据,当代理主机发生改变时,代理主机的LDAP又以推的方式将数据更新到下属的slave LDAP服务器上。slave LDAP 只有对代理LDAP服务器的读权限。



OpenLDAP v2.4 同步功能例子:

①、Syncrepl

由于syncrepl为拉取模式(到master拉数据),所以配置文件配置slave端的slapd.conf文件即可。初始化操作2种,1、通过配置文件,当开启syncrepl引擎后会到master拉数据;2、从主服务器备份数据,复制到slave。当从备份数据初始化的时候,不必担心数据老,因为syncrepl会自动进行校验,然后进行相应的修改、同步。(当复制一个大规模的“条录”,建议从备份初始化)

1、配置master端LDAP

上文说了,有五种同步模式,所以需要首先定义一种,另外还需要定义 contextCSN(应该是做同步状态比对)  和session log。 下面是一个例子:

database bdb
suffix dc=Example,dc=com
rootdn dc=Example,dc=com
directory /var/ldap/db
index objectclass,entryCSN,entryUUID eq

overlay syncprov
syncprov-checkpoint 100 10         #contextCSN
syncprov-sessionlog 100            #session log

2、配置slave端LDAP

database hdb
suffix dc=Example,dc=com
rootdn dc=Example,dc=com
directory /var/ldap/db
index objectclass,entryCSN,entryUUID eq

syncrepl rid=123
        provider=ldap://provider.example.com:389
        type=refreshOnly
        interval=01:00:00:00
        searchbase="dc=example,dc=com"
        filter="(objectClass=organizationalPerson)"
        scope=sub
        attrs="cn,sn,ou,telephoneNumber,title,l"
        schemachecking=off
        bindmethod=simple
        binddn="cn=syncuser,dc=example,dc=com"
        credentials=secret

在这个例子中,slave会连接到ldap://provider.example.com:389进行同步,他将使用simple认证(passwd secret)来验证并捆绑cn=syncuser,dc=example,dc=com

PS:注意slave是使用读写权限到master中进行同步的!

master 的 slapd服务不需要重启。contextCSN会根据需要自动生成。它可能最初包含在LDIF文件中,在变成的情况下产生,或者在slave第一次连接master进行同步的时候产生。如果LDIF文件在被加载时不包含contextCSN时,-w 应与slapadd一起使用,以使它产生。这样会使slave第一次进行同步的反应更快。

该cookie是一个逗号分隔的name = value的列表。 目前支持的syncrepl的cookie字段arecsn=<csn> andrid=<rid>。<csn>代表slave的当前同步状态。 <rid>本地识别客户服务器中的用户复本。它用来匹配cookie与slapd.conf中定义的标示符。该<rid>必须有不超过3位小数。 在命令行中的cookie将覆盖存储在使用者副本数据库同步的cookie。

②、Delta-syncrepl

1、配置master端LDAP

更改master的slapd.conf:(轻忽复制粘贴,比对配置进行相应添加)

# Give the replica DN unlimited read access. This ACL needs to be
# merged with other ACL statements, and/or moved within the scope
# of a database. The "by * break" portion causes evaluation of
# subsequent rules. See slapd.access(5) for details.
access to *
by dn.base="cn=replicator,dc=symas,dc=com" read
by * break

# Set the module path location
modulepath /opt/symas/lib/openldap

# Load the hdb backend
moduleload back_hdb.la

# Load the accesslog overlay
moduleload accesslog.la

#Load the syncprov overlay
moduleload syncprov.la

# Accesslog database definitions
database hdb
suffix cn=accesslog
directory /db/accesslog
rootdn cn=accesslog
index default eq
index entryCSN,objectClass,reqEnd,reqResult,reqStart

overlay syncprov
syncprov-nopresent TRUE
syncprov-reloadhint TRUE

# Let the replica DN have limitless searches
limits dn.exact="cn=replicator,dc=symas,dc=com" time.soft=unlimited time.hard=unlimited size.soft

# Primary database definitions
database hdb
suffix "dc=symas,dc=com"
rootdn "cn=manager,dc=symas,dc=com"

## Whatever other configuration options are desired
# syncprov specific indexing
index entryCSN eq
index entryUUID eq

# syncrepl Provider for primary db
overlay syncprov
syncprov-checkpoint 1000 60

# accesslog overlay definitions for primary db
overlay accesslog
logdb cn=accesslog
logops writes
logsuccess TRUE
# scan the accesslog DB every day, and purge entries older than 7 days
logpurge 07+00:00 01+00:00

# Let the replica DN have limitless searches
limits dn.exact="cn=replicator,dc=symas,dc=com" time.soft=unlimited time.hard=unlimited site

2、slave配置

# Replica database configuration
database hdb
suffix "dc=symas,dc=com"
rootdn "cn=manager,dc=symas,dc=com"

## Whatever other configuration bits for the replica, like indexing
## that you want

# syncrepl specific indices
index entryUUID eq

# syncrepl directives
syncrepl rid=0
        provider=ldap://ldapmaster.symas.com:389
        bindmethod=simple
        binddn="cn=replicator,dc=symas,dc=com"
        credentials=secret
        searchbase="dc=symas,dc=com"
        logbase="cn=accesslog"
        logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
        schemachecking=on
        type=refreshAndPersist
        retry="60 +"
        syncdata=accesslog
        
# Refer updates to the master
updateref ldap://ldapmaster.symas.com

上述配置是假定你已经在你的数据库中定义一个复制的标识(绑定master),此外,所有的数据库(primary, replica, and the accesslog storage database)还应该适当调整,以满足您的需求(DB_CONFIG文件)。

③N-Way Multi-Master

对于下面的例子中,我们将使用3个主节点。

配置数据库信息如下:

dn: cn=config
objectClass: olcGlobal
cn: config
olcServerID: 1

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW: secret

第2、3台LDAPserver区别olcServerID :

dn: cn=config
objectClass: olcGlobal
cn: config
olcServerID: 2

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW: secret

以下的配置设置syncrepl(3台master都需要配置,用来互相同步)

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/local/libexec/openldap
olcModuleLoad: syncprov.la

现在我们启动第一个master节点(替换掉以下配置中的$URL1/$URL2/* 为实际的ldap urls)

dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 $URI1
olcServerID: 2 $URI2
olcServerID: 3 $URI3

dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
    credentials=secret searchbase="cn=config" type=refreshAndPersist
    retry="5 5 300 5" timeout=1
olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
    credentials=secret searchbase="cn=config" type=refreshAndPersist
    retry="5 5 300 5" timeout=1
olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
    credentials=secret searchbase="cn=config" type=refreshAndPersist
    retry="5 5 300 5" timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE

现在启动了Master,并且在LDIF中配置了第一、第二消费,它会复制cn=config。你现在已经有了N路-多主机的数据库配置。

我们接下来还需要复制数据,不仅仅是配置信息,所以添加到主机(所有的消费队列/mater会同步这个配置)。此外,还需要替换掉所有的${}为你适当的环境配置信息。

dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
olcSuffix: $BASEDN
olcDbDirectory: ./db
olcRootDN: $MANAGERDN
olcRootPW: $PASSWD
olcLimits: dn.exact="$MANAGERDN" time.soft=unlimited time.hard=unlimited size.soft=unlimit
olcSyncRepl: rid=004 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple
    credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
    interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncRepl: rid=005 provider=$URI2 binddn="$MANAGERDN" bindmethod=simple
    credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
    interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncRepl: rid=006 provider=$URI3 binddn="$MANAGERDN" bindmethod=simple
    credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
    interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

注意:你的所有master时钟必须同步!

注意:正如slapd-config中,URLs配置( inolcSyncRepl)必须是从哪些URLs复制数据的地址。这些必须与slapd端口监听的地址一样。否则slapd可能会尝试从自身复制,造成循环。

④、MirrorMode

第一个步骤是配置syncrepl

MirrorMode node 1:

# Global section
serverID 1
# database section

# syncrepl directive
syncrepl rid=001
        provider=ldap://ldap-sid2.example.com
        bindmethod=simple
        binddn="cn=mirrormode,dc=example,dc=com"
        credentials=mirrormode
        searchbase="dc=example,dc=com"
        schemachecking=on
        type=refreshAndPersist
        retry="60 +"
        
mirrormode on

MirrorMode node 2:

# Global section
serverID 2
# database section

# syncrepl directive
syncrepl rid=001
        provider=ldap://ldap-sid1.example.com
        bindmethod=simple
        binddn="cn=mirrormode,dc=example,dc=com"
        credentials=mirrormode
        searchbase="dc=example,dc=com"
        schemachecking=on
        type=refreshAndPersist
        retry="60 +"
        
mirrormode on

原理很简单,每个MirrorMode节点的设置完全一样,不同之处在于serverID都是独一无二的,每个消费者指向到其他服务器。

故障转移配置

通常这样有2中选择:1.硬件代理/负载平衡或专用的代理软件;2.使用备用LDAP代理作为syncrepl提供商。

图片挂了,我不知道为什么,有时间我把图片改一个链接吧

普通消费者配置

slave的配置相同,它可以配置成常规的syncrepl模式,也可以是delta-syncrepl模式。(如上的例子)

优点

现在,您将有一个目录的架构,提供了所有的单主复制的一致性保证,同时也提供了多主机复制的高可用性。

⑤、Syncrepl Proxy

(由于字数限制,这一种会再写一篇)

预告:(2中模式)

基于推的方式

基于拉的方式

openldap-2.4新主从配置详细介绍(1)

时间: 2024-08-29 00:00:00

openldap-2.4新主从配置详细介绍(1)的相关文章

linux下mysql主从配置详细教程

1.修改MySQL配置:主库配置server-id = 3binlog-do-db=xmcp_gxfc #the db need to syncbinlog-ignore-db = mysql #不需要同步的数据库binlog-ignore-db = redmine #不需要同步的数据库log_slave_updates = 1binlog_format=mixedrelay_log = /usr/local/mysql/relay_log/mysql-relay-binread_only =

Ext.Net GridPanel (属性|方法|配置|详细介绍)

1.Ext.NET ---- GridPanel 主要配置项: store:表格的数据集 columns:表格列模式的配置数组,可自动创建ColumnModel列模式 autoExpandColumn:自动充满表格未用空间的列,参数为列id,该id不能为0 stripeRows:表格是否隔行换色,默认为false cm.colModel:表格的列模式,渲染表格时必须设置该配置项 sm.selModel:表格的选择模式,默认为Ext.grid.RowSelectionModel enableHdM

solr6.1-----相关配置-详细介绍-启动-全文检索

环境准备 jdk1.8.0_60  + apache-tomcat-8.5.4 + solr-6.1.0 进过测试.使用tomcat 7.x  不能正常启动solr .会报错,至于怎么原因,lz 暂时还没有找到,请大家务必按照以上版本进行配置 下载solr 地址:http://apache.fayea.com/lucene/solr/6.1.0/solr-6.1.0.zip 解压solr后 ,将D:\solr-6.1.0\server\solr-webapp 文件下的webapp  改名为sol

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-12-17 0 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置的方法: 即时生效(重启后失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 route add default gw 192.168.1.1 //添加网关 启动生效: vim /etc/sysconfig/ne

redis介绍及主从配置

redis介绍及主从配置 本文主要包含两个部分:简单介绍下什么是redis.redis主从配置及基于sentinel实现redis集群故障自动切换. redis基于内存亦可持久化的日志型.Key-Value数据库,目前接触到redis主要应用在session缓存方面. 一.系统环境 平台:Centos7.0_x86_64 主机:192.168.115.11.192.168.115.12.192.168.115.12 规划:11为master节点,12.13为slave节点 二.安装redis 1

Exchange2013 SP1 CAS实现NLB的详细配置及介绍

上一篇我们介绍了Exchange2013 sp1 DAG详细安装配置及介绍, 今天呢介绍如何部署Exchange2013 SP1 CAS服务NLB配置,那什么是NLB呢,说白了,NLB就是Exchange CAS角色的高可用,为了提高服务器可用性的一个高可用服务,需要在本机启用windows 系统自带的网络负载均衡来完成.在Exchange2010版本的啥时候启用网络负载均衡后,还需要为CAS均均衡创建一个CAS阵列,而在Exchange2013版本开始就不需要单独创建CAS阵列了,NLB会自动

Centos7+Mariadb集群-主从配置介绍

近期一直在恶补Linux相关的知识,主要是就是学Linux下的基本日常应用服务器的配置及优化,今天我们主要介绍一下在Centos7下安装及配置Mysql 集群,说到集群,其实就是为了提高服务的高可用性.对于高可用的相关服务今天不是主要介绍内容,今天主要介绍MYSQL的主从配置.对在Linux下的其他服务的介绍及服务高可用负载均衡我们将会在后期的文章中介绍.开始今天的介绍:Centos7+Mysql主从配置. 环境介绍: Hostname:A-S IP:192.168.5.21 Role:Mysq

Varnish缓存机制详细介绍及简单配置

Varnish是一款高性能的开源HTTP加速器,其主要用来做为反向代理中的缓存服务器使用,但其实Varnish本身也是具有反向代理功能的,但在创建连接和维持连接上,与Nginx相比差距很大,现在有一个很流行的架构就是前端用Nginx作为反向代理,后面加Varnish缓存服务器为Web服务加速 在将Varnish前先谈谈我们的浏览器缓存机制,现在的浏览器基本都具有缓存功能,它能将我们以前访问过的静态内容和可进行缓存的动态内容缓存再本地,而后在下次访问相同资源时,如果可以确认Server端的资源未发

MySQL主从配置:主从介绍、配置主和从 、测试主从同步

MySQL主从介绍 (两台机器数据同步) 主:-->binlog 从:-->relaylog 主上有一个log dump线程,用来和从的I/O线程传递binlog 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地(执行) 主从的应用场景: (1)做数据的备份,(主:作读写数据,从:实时同步,当 主 宕机时,从 也可以即使提供服务 ) (2)也是做备份.(客户从 从 这台机器上读取数据(但是不能再从上写),