天天看點

openldap mirrormode 配置

LDAP的主從同步從2.4版本以後有了很大的改動,新版本的主從同步有5中模式:

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伺服器的讀權限。

MirrorMode配置

用的比較多的模式可能是MirrorMode

在測試環境中,我隻研究了MirrorMode模式的配置,下面是具體的操作過程。

1、首先安裝兩台openldap伺服器,要求配置一樣,即域名、管理者賬号、密碼完全一樣。

環境:

LDAP SERVER1 172.16.42.136

LDAP SERVER2 172.16.42.137

域名:beyond.org   

管理者賬号:admin

密碼:123456

注意:在做主主同步配置前,確定兩台伺服器時間一緻。并確定兩台LDAP伺服器的slapd服務正常啟動,并且能用phpLDAPadmin管理工具正常登陸。

mirromode配置

1、編輯兩台機器上的/etc/openldap/slapd.conf檔案,(該配置檔案之前最好備份下)

将注釋掉的下面三行指令啟用, 即将

1

2

3

<code>modulepath </code><code>/usr/lib/openldap</code>

<code>modulepath </code><code>/usr/lib64/openldap</code>

<code>moduleload syncprov.la</code>

三行前面的“#”删除掉。

2、LDAP SERVER1的配置

編輯/etc/openldap/slapd.conf檔案,在檔案結尾追加以下内容

4

5

6

7

8

9

10

11

12

13

14

15

<code>index objectclass,entryCSN,entryUUID </code><code>eq</code>

<code>overlay syncprov</code>

<code>syncprov-checkpoint 100 10</code>

<code>syncprov-sessionlog 100</code>

<code>serverID    1</code>

<code>syncrepl      rid=123</code>

<code>              </code><code>provider=ldap:</code><code>//172</code><code>.16.42.137</code>

<code>              </code><code>bindmethod=simple</code>

<code>              </code><code>binddn=</code><code>"cn=admin,dc=beyondh,dc=org"</code>

<code>              </code><code>credentials=123456</code>

<code>              </code><code>searchbase=</code><code>"dc=beyondh,dc=org"</code>

<code>              </code><code>schemachecking=on</code>

<code>              </code><code>type</code><code>=refreshAndPersist</code>

<code>              </code><code>retry=</code><code>"60 +"</code>

<code>mirrormode on</code>

注意:由于原檔案中有下面這條指定

<code>index objectClass         </code><code>eq</code><code>,pres</code>

是以當加入

後會報錯,提示objectclass已定義。是以我将原檔案中的

注釋掉了,然後就不報錯了。

3、LDAP SERVER2的配置

<code>index  objectClass,entryCSN,entryUUID </code><code>eq</code>

<code>serverID    2</code>

<code>              </code><code>provider=ldap:</code><code>//172</code><code>.16.42.136</code>

可以看到,兩台伺服器上serverID不一樣,provider配置的是對方的IP位址,其他配置完全一緻

注意:修改了配置檔案,别以為重新開機伺服器就好了,你需要删除原slapd.d目錄中的檔案,然後重新生成新的配置檔案。删除就得配置緩存(暫且這麼了解吧)

<code>rm</code> <code>-rf </code><code>/etc/openldap/slapd</code><code>.d/*</code>

<code>#生成新的</code>

<code>slaptest -f </code><code>/etc/openldap/slapd</code><code>.conf -F </code><code>/etc/openldap/slapd</code><code>.d/</code>

<code>chown</code> <code>-R ldap.ldap </code><code>/etc/openldap/slapd</code><code>.d</code>

啟動slapd服務

<code>/etc/init</code><code>.d</code><code>/slapd</code> <code>restart</code>

附上其中一台伺服器的配置檔案

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

<code>[root@localhost openldap]</code><code># cat slapd.conf | egrep -v "^$|^#"</code>

<code>include         </code><code>/etc/openldap/schema/corba</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/core</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/cosine</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/duaconf</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/dyngroup</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/inetorgperson</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/java</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/misc</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/nis</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/openldap</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/ppolicy</code><code>.schema</code>

<code>include         </code><code>/etc/openldap/schema/collective</code><code>.schema</code>

<code>allow bind_v2</code>

<code>pidfile         </code><code>/var/run/openldap/slapd</code><code>.pid</code>

<code>argsfile        </code><code>/var/run/openldap/slapd</code><code>.args</code>

<code>TLSCACertificatePath </code><code>/etc/openldap/certs</code>

<code>TLSCertificateFile </code><code>"\"OpenLDAP Server\""</code>

<code>TLSCertificateKeyFile </code><code>/etc/openldap/certs/password</code>

<code>database config</code>

<code>access to *</code>

<code>        </code><code>by dn.exact=</code><code>"gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"</code> <code>manage</code>

<code>        </code><code>by * none</code>

<code>database monitor</code>

<code>        </code><code>by dn.exact=</code><code>"gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"</code> <code>read</code>

<code>        </code><code>by dn.exact=</code><code>"cn=Manager,dc=my-domain,dc=com"</code> <code>read</code>

<code>database        bdb</code>

<code>suffix          </code><code>"dc=beyondh,dc=org"</code>

<code>checkpoint      1024 15</code>

<code>rootdn          </code><code>"cn=admin,dc=beyondh,dc=org"</code>

<code>rootpw {SSHA}dA8Pvv20Tr4rMM99dVtRmp6tYwh8OrKs</code>

<code>directory       </code><code>/var/lib/ldap</code>

<code>index ou,cn,mail,surname,givenname      </code><code>eq</code><code>,pres,sub</code>

<code>index uidNumber,gidNumber,loginShell    </code><code>eq</code><code>,pres</code>

<code>index uid,memberUid                     </code><code>eq</code><code>,pres,sub</code>

<code>index nisMapName,nisMapEntry            </code><code>eq</code><code>,pres,sub</code>

<code>loglevel  296</code>

<code>cachesize 1000</code>

<code>index objectclass,entryCSN,entryUUID </code><code>eq</code>  

<code>overlay syncprov  </code>

<code>syncprov-checkpoint 100 10  </code>

<code>syncprov-sessionlog 100  </code>

<code> </code> 

<code>serverID    1  </code>

<code>syncrepl      rid=123  </code>

<code>              </code><code>bindmethod=simple  </code>

<code>              </code><code>binddn=</code><code>"cn=admin,dc=beyondh,dc=org"</code>  

<code>              </code><code>credentials=123456 </code>

<code>              </code><code>searchbase=</code><code>"dc=beyondh,dc=org"</code>  

<code>              </code><code>schemachecking=on </code>

<code>              </code><code>type</code><code>=refreshAndPersist  </code>

<code>              </code><code>retry=</code><code>"60 +"</code>  

驗證:

登入LDAP SERVER1,建立一個組HR

<a href="https://s5.51cto.com/wyfs02/M01/8F/1F/wKioL1jUhROBcvHIAAFXNHnKUzk813.png" target="_blank"></a>

登入LDAP SERVER2,可以看到HR組已經同步過來了。表示雙組同步沒有問題。

<a href="https://s1.51cto.com/wyfs02/M00/8F/22/wKiom1jUhSGQMgz7AAFbDzlCaqA413.png" target="_blank"></a>

本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1909924,如需轉載請自行聯系原作者

繼續閱讀