使用指令行設定 Tivoli Directory Server 抄寫

原文地址:http://www-01.ibm.com/software/tw/sf/archive/vol1/article/t_tdsrepl.html

 

 

 

 

級別:中級

Darshan Donni ([email protected]),印度的 IBM Software Labs 系統軟體工程師 Neelam V Kulkarni ([email protected]),印度的 IBM Software Labs 系統軟體工程師

原始網頁: http://www-128.ibm.com/developerworks
/tivoli/library/t-tdsrepl/index.html

目錄伺服器隨附的 Web 管理工具是最簡單的抄寫拓蹼設定及管理方式。在某些情況下,管理者可能需要使用指令行執行Lightweight Directory Access Protocol (LDAP) 工具 來設定抄寫。本文旨在協助管理者瞭解使用指令行設定 TivoliR Directory Server (TDS) 抄寫的基本方法。

前言

Tivoli Directory Server 會隨附一個 Web 管理工具。此工具有許多用途,其中一個就是設定抄寫拓蹼。此工具不但提供管理者簡單的點按介面,以設定複雜的抄寫拓蹼,還具備認證管理視窗及拓蹼視覺化介面。但在某些情況下,卻必須使用指令行工具來設定抄寫。可能原因如下:

無論是上述哪一種情況,管理者都必須瞭解 TDS 抄寫的概念和資料結構,而本文恰好可以當作入門。我們刻意不將定義納入本文,而是採取由下而上的方法,仔細探討各項目(entries),然後說明其在拓蹼中所扮演的角色。基於實用性考量,本文將為讀者逐步介紹三大常用設定方式。管理者可利用下文所提到建置步驟為範例設計自己的拓蹼。另一篇文章 "Debugging replication in IBM Tivoli Directory Server" 會詳細介紹抄寫的定義及基本概念。該文章的鏈結在「資源」一節。

拓蹼範例

圖 1. Master-Replica 拓蹼

Master-Replica 拓撲是最常用的拓蹼之一,也是最基本的拓蹼,設定方式非常簡單。此拓蹼有一臺讀寫伺服器及一臺唯讀伺服器。

圖 2. Peer-Peer 拓蹼

對等式(Peer to Peer) 拓蹼是第二種最常用的拓蹼,多數用於高可用性應用程式,因為它有兩臺讀寫伺服器。

圖 3. Master-Forwarder-Replica 拓蹼

雖然不常用,我們還是納入這個拓蹼,因為 Forwarder 是特殊的伺服器類型。Forwarder 是一臺唯讀伺服器,可當作一組抄本之上的「路由器」。

基礎架構

本節已備妥適當的主要資料。您必須假定主機名稱、IP 位址、通訊埠、伺服器 ID 及密碼,因為我們並不是在建置真正的拓蹼。在真實情況下,您必須從實際的基礎架構取得這些資料。

供應方(Supplier)及需求方(Consumer):
在抄寫時,更新項目是透過抄寫佇列從某 LDAP 伺服器傳到另一伺服器。將更新項目送入抄寫佇列的伺服器叫供應方,而接受這些變更的伺服器則叫需求方。佇列的維護作業是在供應方上執行。

本文所提到的拓蹼需要最多三臺伺服器。

附註:供應方要能正確解析需求方的主機名稱,否則供應方會無法連到需求方,抄寫也會失敗。

伺服器主機名稱
伺服器 1 server1.in.ibm.com
伺服器 2 server2.in.ibm.com
伺服器 3 server3.in.ibm.com

所有伺服器都需將 LDAP 伺服器設定在通訊埠 389 上接聽,這是 LDAP 的預設通訊埠。如果您使用 6.0 版且有多個實例,埠號可能會有所不同。

若要針對需求方執行 LDAP 連結,供應方需要連結 DN 及連結密碼。本文假設所有供應方及需求方協議的連結 DN 及密碼如下:

每臺伺服器的伺服器 ID 是拓蹼中該伺服器的角色。也就是說,在 Master-Replica 拓蹼中,主要伺服器會將伺服器 ID 指定為 Master,而抄本則是 Replica。在 Peer-Peer 拓蹼中,一個端點是 Peer1,另一個是 Peer2。在 Master-Forwarder-Replica 拓蹼中,主要伺服器是 Master,轉送者是 Forwarder,而抄本則是 Replica。

何謂協議?

本文稍後談到定義抄寫拓蹼所需的各種項目時,會再探討協議 (Agreement)。

抄寫的相關項目

本節將探討用來建置抄寫拓蹼的不同項目類型。

附註:本文不討論進階的抄寫主題,如抄寫排程及 SSL 式的抄寫。因此,這些功能的項目在此不加以贅述。

供應方端:

需求方端:

建置拓蹼 1 (Master-Replica)

下一步是建置所有拓蹼的最基礎形式:Master-Replica 拓蹼。建置拓蹼的第一步是定義下列各項:

1.抄寫環境定義:(o=ibm,c=in)
2.供應方:在 server1.in.ibm.com:389 上的 LDAP 伺服器是唯一的供應方。伺服器 ID 是 Master。它會提供更新項目到 server2.in.ibm.com:389 上的 LDAP 伺服器。
3.需求方:在 server2.in.ibm.com:389 上的 LDAP 伺服器是唯一的需求方。伺服器 ID 是 Replica。它會從 server1.in.ibm.com:389 上的 LDAP 伺服器取用更新項目。
4.讀寫伺服器:server1.in.ibm.com:389 上,ID 為 Master 的 LDAP 伺服器是唯一的讀寫伺服器。
5.讀寫伺服器:server2.in.ibm.com:389 上,ID 為 Replica 的 LDAP 伺服器是唯一的唯讀伺服器。

配置變更:主要和抄本伺服器必須進行一些配置變更,以便正確執行抄寫。

1.伺服器 ID:

2.需求方端認證項目:將此項目新增到抄本伺服器的 ibmslapd.conf 檔。

抄本伺服器的認證項目

dn: cn=Peer1BindCredentials, o=ibm, c=in
dn: cn=Master server, cn=configuration
cn: master server
ibm-slapdMasterDN: cn=bindtoconsumer
ibm-slapdMasterPW: iamsupplier
ibm-slapdMasterReferral: ldap://server1.in.ibm.com:389
objectclass: ibm-slapdReplication

3.重新啟動主要和抄本伺服器。

附註:請留意伺服器 ID。如果其他拓蹼正在使用某伺服器 ID,改變伺服器 ID 可能會導致不利後果。建議在這種情況下使用一般伺服器 ID。例如,使用 Server1,而不是 Master。本文會假設 (o=ibm,c=in) 是唯一會抄寫的子樹狀結構。因此,會使用特定拓蹼伺服器 ID。

下一步是建置拓蹼的 LDAP 資料交換格式 (LDIF) 檔案。此 LDIF 檔會命名為 masterreplica.ldif。直接將這些項目複製到 masterreplica.ldif,並針對子樹狀結構、伺服器 ID、主機名稱及通訊埠做必要變更:

1.抄寫環境定義:

2. 抄本羣組
新增抄本羣組

dn: cn=Peer1BindCredentials, o=ibm, c=in
dn: ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaGroup
ibm-replicaGroup: default

3. 抄本子項目:

由於拓蹼中有兩個 LDAP 伺服器,所以必須新增兩個抄本子項目:
主要伺服器的子項目

dn: cn=Peer1BindCredentials, o=ibm, c=in
dn: ibm-replicaServerId=Master,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Master
ibm-replicationServerIsMaster: true
cn: Master
description: Master server of the topology.

抄本伺服器的子項目

dn: cn=Peer1BindCredentials, o=ibm, c=in
dn: ibm-replicaServerId=Replica,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Replica
ibm-replicationServerIsMaster: false
cn: Replica
description: Replica server of the topology.

4. 認證:這個步驟可定義主要伺服器用來連結到抄寫伺服器的認證。依下列所示新增項目:

主要伺服器用來連結抄本的認證

dn: cn=Peer1BindCredentials, o=ibm, c=in
dn: cn=ReplicaBindCredentials, o=ibm, c=in
changetype: add
objectclass: ibm-replicationCredentialsSimple
cn: ReplicaBindCredentials
replicaBindDN: cn=bindtoconsumer
replicaCredentials: iamsupplier
description: Bind Credentials on master to bind to replica.

主要伺服器用來連結抄本的認證

dn: cn=ReplicaBindCredentials, o=ibm, c=in
changetype: add
objectclass: ibm-replicationCredentialsSimple
cn: ReplicaBindCredentials
replicaBindDN: cn=bindtoconsumer
replicaCredentials: iamsupplier
description: Bind Credentials on master to bind to replica.

請注意,其 DN 及密碼跟上述配置章節新增的那對一樣。

5. 抄寫協議:此拓蹼有一個供應方與需求方關係。Master 會提供抄本 (o=ibm,c=in) 子樹狀結構的更新項目,以便其使用變更。所以只會有一個協議:從主要伺服器到抄本伺服器。請注意,協議數目會因為拓蹼中的供應方與需求方關係數目而異。
從主要到抄本的抄寫協議

dn: cn=Replica,
ibm-replicaServerId=Master,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Replica
ibm-replicaConsumerId: Replica
ibm-replicaUrl: ldap://server2.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from master to replica.

上述項目位於主要伺服器的子項目之下,會供應至 ID 為 Replica 的需求方。抄本 URL 是 ldap://server2.in.ibm.com:389,即表示抄本是在 server2.in.ibm.com 的通訊埠 389 上接聽。此協議會使用上一個步驟所建立的認證,讓主要伺服器連結抄本。也就是說,主要伺服器會以 cn=bindtoconsumer 及密碼 iamsupplier 連結抄本。

請注意,抄本的子項目之下並沒有協議。這很正常,因為抄本是唯讀版本,無法接收任何用戶端更新項目,所以根本不需要協議(因為沒有更新要傳送)。

現已新增抄寫項目,masterreplica.ldif 的內容應該如下:
masterreplica.ldif 的內容

dn: o=ibm, c=in changetype: add
objectclass: top
objectclass: organization
objectclass: ibm-replicationContext
o: ibm

dn: ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaGroup
ibm-replicaGroup: default

dn: ibm-replicaServerId=Master,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Master
ibm-replicationServerIsMaster: true
cn: Master
description: Master server of the topology.

dn: ibm-replicaServerId=Replica,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Replica
ibm-replicationServerIsMaster: false
cn: Replica
description: Replica server of the topology.

dn: cn=ReplicaBindCredentials, o=ibm, c=in
changetype: add
objectclass: ibm-replicationCredentialsSimple
cn: ReplicaBindCredentials
replicaBindDN: cn=bindtoconsumer
replicaCredentials: iamsupplier
description: Bind Credentials on master to bind to replica.

dn: cn=Replica, ibm-replicaServerId=Master,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Replica
ibm-replicaConsumerId: Replica
ibm-replicaUrl: ldap://server2.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from master to replica.

請注意,如果抄寫環境定義已存在,LDIF 會有點不一樣。不會是以下內容:

dn: o=ibm, c=in
changetype: add
objectclass: top
objectclass: organization
objectclass: ibm-replicationContext
o: ibm

而是:

dn: o=ibm, c=in
changetype: modify
add: objectclass
objectclass: ibm-replicationContext

為方便說明,在下一個範例中,本文假設子樹狀結構根本不存在。

現在,將 masterreplica.ldif 檔載入主要伺服器。從建立 masterreplica.ldif 檔的位置,針對主要伺服器執行下列指令(整個指令要在同一行):

ldapmodify -h server1.in.ibm.com -p 389 -D [administrator DN] -w [administrator password] -i masterreplica.ldif -k -l

-l 選項是 6.0 版的功能,指示伺服器現在不要抄寫拓蹼。-k 選項會將管理者控制傳送給伺服器,所以即使伺服器 ID 不符以致子樹狀結構變成唯讀,項目還是會持續新增。如果您是使用 5.2 版,使用 ldif2db 指令時,-r 需設為 NO。現在,也需要將拓蹼載入抄本伺服器。如果您是用 6.0 版,可執行下列指令:

ldapexop -h server1.in.ibm.com -p 389 -D [administrator DN] -w [administrator password]
-op repltopology -rc o=ibm,c=in

這個延伸作業稱為 repltopology。它會將拓蹼傳到 (o=ibm,c=in) 抄寫環境定義下所定義的所有需求方。若使用 5.2 版,讀者也需要在抄本上使用 ldif2db,並且將 -r 設為 NO。
順利執行上述兩個指令後,即完成 Master-Replica 拓蹼。主要伺服器會接收 (o=ibm,c=in) 子樹狀結構的更新項目,然後傳到抄本。抄本不會接受更新項目,但會轉介給主要伺服器,以免用戶端想要更新。不過,抄本可以處理搜尋。

建置拓蹼 2(對等式)
對等式抄寫拓蹼跟 Master-Replica
拓蹼差不多。同樣有兩臺伺服器,但這兩臺現在是讀寫伺服器,可彼此提供變更。一如往常,建置拓蹼的第一步是定義下列各項:

1.抄寫環境定義:(o=ibm,c=in)
2.供應方:server1.in.ibm.com:389 上,伺服器 ID 為 Peer1 的 LDAP 伺服器會提供更新項目給 server2.in.ibm.com:389 上,伺服器 ID 為 Peer2 的 LDAP 伺服器。server2.in.ibm.com:389 上,伺服器 ID 為 Peer2 的 LDAP 伺服器也會提供更新項目給 server1.in.ibm.com:389 上,伺服器 ID 為 Peer1 的 LDAP 伺服器。
3.需求方:server2.in.ibm.com:389 上,伺服器 ID 為 Peer2 的 LDAP 伺服器會取用 server1.in.ibm.com:389 上,伺服器 ID 為 Peer1 的 LDAP 伺服器提供的更新項目。server1.in.ibm.com:389 上,伺服器 ID 為 Peer1 的 LDAP 伺服器也會取用 server2.in.ibm.com:389 上,伺服器 ID 為 Peer2 的 LDAP 伺服器所提供之更新項目。
4.讀寫伺服器:server1.in.ibm.com 和 server2.in.ibm.com 上的 LDAP 伺服器 peer1 及 peer2 都是讀寫伺服器。
5.唯讀伺服器:本拓蹼沒有唯讀伺服器。

配置變更:peer1 和 peer2 伺服器都要進行一些變更,才能正確執行抄寫。我們假設剛完成伺服器配置。如果您是使用 Master-Replica 設定所用的相同伺服器,只要取消您在該節所做的變更即可。

1.伺服器 ID:

開啟 peer1 伺服器 (server1.in.ibm.com) 的 ibmslapd.conf 檔。搜尋 ibm-slapdServerId 屬性,將其改為 "Peer1"。
開啟 peer2 伺服器 (server2.in.ibm.com) 的 ibmslapd.conf 檔。搜尋 ibm-slapdServerId 屬性,將其改為 "Peer2"。

2.需求方端認證項目:

將此項目新增到 peer1 伺服器的 ibmslapd.conf 檔。

peer1上的認證項目

dn: cn=Master server, cn=configuration
cn: master server
ibm-slapdMasterDN: cn=bindtoconsumer
ibm-slapdMasterPW: iamsupplier
ibm-slapdMasterReferral: ldap://server2.in.ibm.com:389
objectclass: ibm-slapdReplication

將此項目新增到 peer2 伺服器的 ibmslapd.conf 檔。
peer2 上的認證項目

dn: cn=Master server, cn=configuration
cn: master server
ibm-slapdMasterDN: cn=bindtoconsumer
ibm-slapdMasterPW: iamsupplier
ibm-slapdMasterReferral: ldap://server1.in.ibm.com:389
objectclass: ibm-slapdReplication

3.重新啟動 peer1 和 peer2 伺服器。

現在來建置拓蹼的 LDIF 檔,稱為 peer2peer.ldif。直接將這些項目複製到 peer2peer.ldif,並針對子樹狀結構、伺服器 ID、主機名稱及通訊埠做必要變更:
1.抄寫環境定義:
新增抄寫環境定義。

dn: o=ibm, c=in changetype: add
add: objectclass
objectclass: ibm-replicationContext

2. 抄本羣組:


新增抄本羣組

dn: ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaGroup
ibm-replicaGroup: default

3. 抄本子項目:
由於拓蹼中有兩個 LDAP 伺服器,所以需要兩個抄本子項目:
peer1 的子項目

dn: ibm-replicaServerId=Peer1,ibm-replicaGroup=default, o=ibm, c=in changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Peer1
ibm-replicationServerIsMaster: true
cn: Peer1
description: Subentry for Peer1.

peer2 的子項目

dn: ibm-replicaServerId=Peer2,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Peer2
ibm-replicationServerIsMaster: true
cn: Peer2
description: Subentry for Peer2.

peer1 子項目會將伺服器 ID 指定為 Peer1,並將伺服器宣告為主要伺服器。此伺服器可接收來自用戶端的更新項目。peer2 子項目會將伺服器 ID 指定為 Peer2,也將伺服器宣告為主要伺服器。此伺服器也會從跟其連結的 LDAP 用戶端接收更新項目。

4. 認證:若要定義 peer1 要用來連結 peer2 的認證,請新增下列項目:

peer1 和 peer2 用來連結彼此的認證

dn: cn=ReplicaBindCredentials, o=ibm, c=in
changetype: add
objectclass: ibm-replicationCredentialsSimple
cn: ReplicaBindCredentials
replicaBindDN: cn=bindtoconsumer
replicaCredentials: iamsupplier
description: Bind Credentials on peer1 and peer2 to bind to each other.

5. 抄寫協議:此拓蹼有兩個供應方與需求方關係。Peer1 會提供 Peer2 (o=ibm,c=in) 子樹狀結構的更新,以便其進行變更。另一方面,Peer2 也會接收來自用戶端的 (o=ibm,c=in) 子樹狀結構更新,然後再傳給 Peer1,以便進行變更。所以,會有兩個協議:Peer1 至 Peer2,以及 Peer2 至 Peer1。請注意,協議數目會因為拓蹼中的供應方與需求方關係數目而異。

peer1 至 peer2 的抄寫協議

dn: cn=Peer2, ibm-replicaServerId=Peer1,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Peer2
ibm-replicaConsumerId: Peer2
ibm-replicaUrl: ldap://server2.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from peer1 to peer2.

peer2 至 peer1 的抄寫協議

dn: cn=Peer1, ibm-replicaServerId=Peer2,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Peer1
ibm-replicaConsumerId: Peer1
ibm-replicaUrl: ldap://server1.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from peer2 to peer1.

此拓蹼的兩個協議如上所示。第一個協議是從 Peer1 到 Peer2,位於 Peer1 子項目之下。第二個協議是從 Peer2 到 Peer1,位於 Peer2 子項目之下。請注意,兩個協議都使用相同的認證項目,這是完全可行的。該認證項目會新增到 peer1 及 peer2。

現已新增抄寫項目,peer2peer.ldif 的內容應該如下:
peer2peer.ldif 的內容

dn: o=ibm, c=in
changetype: add
objectclass: top
objectclass: organization
objectclass: ibm-replicationContext
o: ibm

dn: ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaGroup
ibm-replicaGroup: default

dn: ibm-replicaServerId=Peer1,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Peer1
ibm-replicationServerIsMaster: true
cn: Peer1
description: Subentry for Peer1.

dn: ibm-replicaServerId=Peer2,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Peer2
ibm-replicationServerIsMaster: true
cn: Peer2
description: Subentry for Peer2.

dn: cn=ReplicaBindCredentials, o=ibm, c=in
changetype: add
objectclass: ibm-replicationCredentialsSimple
cn: ReplicaBindCredentials
replicaBindDN: cn=bindtoconsumer
replicaCredentials: iamsupplier
description: Bind Credentials on peer1 and peer2 to bind to each other.

dn: cn=Peer2, ibm-replicaServerId=Peer1,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Peer2
ibm-replicaConsumerId: Peer2
ibm-replicaUrl: ldap://server2.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from peer1 to peer2.

dn: cn=Peer1, ibm-replicaServerId=Peer2,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Peer1
ibm-replicaConsumerId: Peer1
ibm-replicaUrl: ldap://server1.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from peer2 to peer1.

現在,將 peer2peer.ldif 檔載入 peer1 伺服器。從建立peer2peer.ldif檔的位置,針對 peer1 伺服器執行下列指令(整個指令要在同一行):

ldapmodify -h server1.in.ibm.com -p 389 -D [administrator DN] -w [administrator password]
-i peer2peer.ldif -k -l

現在,也將拓蹼載入抄本。若是 6.0 版,您可執行下列指令:

ldapexop -h server1.in.ibm.com -p 389 -D [administrator DN] -w [administrator password]
-op repltopology -rc o=ibm,c=in

若是 5.2 版,則針對抄本使用 ldif2db,並將 -r 設為 No。

順利執行上述兩個指令後,即完成 Peer-Peer 拓蹼。這兩個對等伺服器會接受更新項目,並傳送給彼此。

建置拓蹼 3 (Master-Forwarder-Replica)

接下來是 Master-Forwarder-Replica 複寫拓蹼。有關轉送者 (Forwarder) 的一些注意事項:這是特殊抄本。抄本是唯讀的,轉送者也是。抄本不會傳送他們所使用的變更。但轉送者會抄寫他們所使用的變更。為了將變更提供給整個拓蹼,轉送者的子項目下會有協議。試把轉送者當作是配電板,會從電源插座取得電源,然後再提供給兩個或以上的插座使用。

附註:閘道也很像配電板。唯一的差別是,轉送者是特殊抄本,而閘道是特殊主要伺服器。

掌握這些資訊後,現在來開始建置拓蹼。此拓蹼要再加入一臺伺服器:server3.in.ibm.com。同樣地,建置拓蹼的第一步是定義下列各項:

1.抄寫環境定義:(o=ibm,c=in)
2.供應方:server1.in.ibm.com:389 上,伺服器 ID 為 Master 的 LDAP 伺服器會提供更新項目給 server2.in.ibm.com:389 上,伺服器 ID 為 Forwarder 的 LDAP 伺服器。server2.in.ibm.com:389 上,伺服器 ID 為 Forwarder 的 LDAP 伺服器也會提供更新項目給 server1.in.ibm.com:389 上,伺服器 ID 為 Replica 的 LDAP 伺服器。
3.需求方:server2.in.ibm.com:389 上,伺服器 ID 為 Forwarder 的 LDAP 伺服器會取用 server1.in.ibm.com:389 上,伺服器 ID 為 Master 的 LDAP 伺服器提供的更新項目。server3.in.ibm.com:389 上,伺服器 ID 為 Replica 的 LDAP 伺服器也會取用 server2.in.ibm.com:389 上,伺服器 ID 為 Forwarder 的 LDAP 伺服器所提供之更新項目。
4.讀寫伺服器:只有伺服器 ID 為 Master 的 LDAP 伺服器纔是讀寫伺服器。
5.唯讀伺服器:伺服器 ID 為 Forwarder 及 Replica 的 LDAP 伺服器則是唯讀的。

配置變更:主要、轉送者及抄寫伺服器都要進行一些變更,才能正確執行抄寫。本節假設現在使用的伺服器剛好完成配置。若要重複使用 Master-Replica 設定所用的相同伺服器,只要取消該節所做的變更即可。若要重複使用 Peer-Peer 設定所用的相同伺服器,請取消該節所做的變更。

1.伺服器 ID:

開啟主要伺服器 (server1.in.ibm.com) 的 ibmslapd.conf 檔。搜尋 ibm-slapdServerId 屬性,將屬性改為 "Master"。
開啟轉送者伺服器 (server2.in.ibm.com) 的 ibmslapd.conf 檔。搜尋 ibm-slapdServerId 屬性,將屬性改為 "Forwarder"。
開啟抄本伺服器 (server3.in.ibm.com) 的 ibmslapd.conf 檔。搜尋 ibm-slapdServerId 屬性,將屬性改為 "Replica"。
2.需求方端認證項目:

將此項目新增到轉送者伺服器的 ibmslapd.conf 檔。

轉送者上的認證項目

dn: cn=Master server, cn=configuration
cn: master server
ibm-slapdMasterDN: cn=bindtoconsumer
ibm-slapdMasterPW: iamsupplier
ibm-slapdMasterReferral: ldap://server1.in.ibm.com:389
objectclass: ibm-slapdReplication

將此項目新增到抄本伺服器的 ibmslapd.conf 檔。

抄本伺服器的認證項目

dn: cn=Master server, cn=configuration
cn: master server
ibm-slapdMasterDN: cn=bindtoconsumer
ibm-slapdMasterPW: iamsupplier
ibm-slapdMasterReferral: ldap://server1.in.ibm.com:389
objectclass: ibm-slapdReplication

3.重新啟動主要、轉送者和抄本伺服器。
現在,開始建置拓蹼的 LDIF 檔,此 LDIF 檔稱為 mfr.ldif。直接將這些項目複製到 mfr.ldif,並針對子樹狀結構、伺服器 ID、主機名稱及通訊埠做必要變更:

1. 抄寫環境定義:

新增抄寫環境定義

dn: o=ibm, c=in
changetype: add
add: objectclass
objectclass: ibm-replicationContext

2.抄本羣組:

新增抄本羣組

dn: ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaGroup
ibm-replicaGroup: default

3.抄本子項目:
由於拓蹼中有三臺 LDAP 伺服器,所以需要三個抄本子項目:

主要伺服器的子項目

dn: ibm-replicaServerId=Master,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Master
ibm-replicationServerIsMaster: true
cn: Master
description: Subentry for Master.

轉送者伺服器的子項目

dn: ibm-replicaServerId=Forwarder,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Forwarder
ibm-replicationServerIsMaster: false
cn: Forwarder
description: Subentry for the Forwarder.

抄本伺服器的子項目

dn: ibm-replicaServerId=Replica,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Replica
ibm-replicationServerIsMaster: false
cn: Replica
description: Subentry for the Replica.

主要伺服器子項目會將伺服器 ID 指定為 Master,並宣告此伺服器是主要伺服器,也就是說,伺服器可接受來自用戶端的更新項目。轉送者子項目會將伺服器 ID 指定為 Forwarder,並宣告為非主要伺服器,無法從用戶端取得更新項目。抄本子項目會將伺服器 ID 指定為Replica,並宣告為非主要伺服器,無法從用戶端取得更新項目。

4. 認證:現在,定義主要伺服器用來連結轉送者的認證。將類以下列內容的項目新增到 mfr.ldif:

主要伺服器用來連結轉送者的認證

dn: cn=ReplicaBindCredentials, o=ibm, c=in
changetype: add
objectclass: ibm-replicationCredentialsSimple
cn: ReplicaBindCredentials
replicaBindDN: cn=bindtoconsumer
replicaCredentials: iamsupplier
description: Bind Credentials on master to bind to forwarder.

5. 抄寫協議:此拓蹼有兩個供應方與需求方關係。Master 會提供 Forwarder (o=ibm,c=in) 子樹狀結構的更新,然後再將這些變更提供給 Replica。所以會有兩個協議:Master 至 Forwarder,以及Forwarder 至 Replica。請注意,協議數目會因為拓蹼中的供應方與需求方關係數目而異。 Master 至 Forwarder 的抄寫協議

dn: cn=Forwarder, ibm-replicaServerId=Master,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Forwarder
ibm-replicaConsumerId: Forwarder
ibm-replicaUrl: ldap://server2.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from Master to Forwarder.

Forwarder 至 Replica 的抄寫協議

dn: cn=Replica, ibm-replicaServerId=Forwarder,
ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Replica
ibm-replicaConsumerId: Replica
ibm-replicaUrl: ldap://server3.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from Forwarder to Replica.

此拓蹼的兩個協議如上所示。第一個協議是從 Master到 Forwarder,位於 Master 子項目之下。第二個協議是從 Forwarder到 Replica,位於 Forwarder 子項目之下。請注意,兩個協議都使用相同的認證項目,這是完全可行的。我們會將認證項目新增到 Master 及 Forwarder。現已新增抄寫項目,mfr.ldif 的內容應該如下:

現已新增抄寫項目,mfr.ldif 的內容應該如下:

mfr.ldif 的內容 dn: o=ibm, c=in
changetype: add
objectclass: top
objectclass: organization
objectclass: ibm-replicationContext
o: ibm

dn: ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaGroup
ibm-replicaGroup: default

dn: ibm-replicaServerId=Master,
ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Master
ibm-replicationServerIsMaster: true
cn: Master
description: Subentry for Master.

dn: ibm-replicaServerId=Forwarder,
ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Forwarder
ibm-replicationServerIsMaster: false
cn: Forwarder
description: Subentry for the Forwarder.

dn: ibm-replicaServerId=Replica,ibm-replicaGroup=default, o=ibm, c=in
changetype: add
objectclass: top
objectclass: ibm-replicaSubentry
ibm-replicaServerId: Replica
ibm-replicationServerIsMaster: false
cn: Replica
description: Subentry for the Replica.

dn: cn=ReplicaBindCredentials, o=ibm, c=in
changetype: add
objectclass: ibm-replicationCredentialsSimple
cn: ReplicaBindCredentials
replicaBindDN: cn=bindtoconsumer
replicaCredentials: iamsupplier
description: Bind Credentials on master
to bind to forwarder.

dn: cn=Forwarder, ibm-replicaServerId=Master,ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Forwarder
ibm-replicaConsumerId: Forwarder
ibm-replicaUrl: ldap://server2.in.ibm.com:389
ibm-replicaCredentialsDN:
cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from Master to Forwarder.

dn: cn=Replica, ibm-replicaServerId=Forwarder,
ibm-replicaGroup=default,o=ibm,c=in
changetype: add
objectclass: top
objectclass: ibm-replicationAgreement
cn: Replica
ibm-replicaConsumerId: Replica
ibm-replicaUrl: ldap://server3.in.ibm.com:389
ibm-replicaCredentialsDN: cn=ReplicaBindCredentials, o=ibm, c=in
description: Replication agreement from Forwarder to Replica.

現在將 mfr.ldif 檔載入 Forwarder 伺服器。從建立 mfr.ldif 檔的位置,針對 Master 伺服器執行下列指令(整個指令要在同一行):

ldapmodify -h server1.in.ibm.com -p 389 -D [administrator DN] -w [administrator password] -i mfr.ldif -k -l

現在將 mfr.ldif 檔載入 Forwarder 伺服器。從建立 mfr.ldif 檔的位置,針對 Master 伺服器執行下列指令(整個指令要在同一行):

ldapmodify -h server2.in.ibm.com -p 389 -D [administrator DN] -w [administrator password] -i mfr.ldif -k -l

現在,也將拓蹼載入抄本。若是 6.0 版,請在轉送者執行下列指令:

ldapexop -h server2.in.ibm.com -p 389 -D [administrator DN] -w [administrator password] -op repltopology -rc o=ibm,c=in

若是 5.2 版,必須針對轉送者及抄本上使用 ldif2db,並將 -r 設為 No。

順利執行上述指令後,即完成 Master-Forwarder-Replica 拓蹼。Master 會接受更新項目,然後傳給 Forwarder,再傳給 Replica。如果要將另一抄本新增到拓蹼,您只要在 Forwarder 之下新增另一個抄本子項目,並從轉送者將協議新增到該抄本。

一些基本定律

1.拓蹼中的所有對等式都必須供應其中的所有伺服器,除非它們用閘道隔開。若用閘道隔開,同一閘道下的所有對等式必須供應其他伺服器,包括閘道。這是因為對等伺服器並不會抄寫其他對等式提供的變更,以致對等式會接受本身起始的更新項目。
2.拓蹼中的所有閘道都需要彼此供應。一個拓蹼必須有至少兩個閘道纔有用。
唯讀伺服器的相關資訊

唯讀伺服器不會接收用戶端傳送的更新項目。如果不會,那些更新要求怎麼辦呢? 請看下列圖解: 圖 4. 有轉介的認證項目(類型 1)

有轉介的認證項目(類型 1)

當用戶端傳送更新要求給唯讀伺服器時,該伺服器會將轉介傳回用戶端。然後,用戶端可追蹤該轉介,並將更新項目放到該伺服器上。轉介通常會指向唯讀伺服器的供應方。類型 2 的認證項目並沒有轉介。上述認證項目類型源自前版 TDS,其中並沒有使用子樹狀結構抄寫。只有 5.1 版採用的子樹狀結構抄寫纔有用到類型 2 的認證項目。

圖 5. 沒有轉介的認證項目(類型 2)

沒有轉介的認證項目

在這種情況下,抄寫環境定義會用作轉介的位置保留元。環境定義項目類似以下內容:

圖 6. 抄寫環境定義用作轉介的位置保留元

抄寫環境定義用作轉介的位置保留元

反向工程抄寫拓蹼

本文只探討三種抄寫拓蹼。但您可能想進一步瞭解複雜的拓蹼,或有興趣分析 Web 管理工具建立的拓蹼,使用本文提到的概念,即可輕鬆分析該工具建立的抄寫拓蹼。事實上,您甚至可以使用 Web 管理工具(在測試環境中)建置複雜的拓蹼,擷取必要項目和屬性,然後在目標環境上複製確切設定方法。


作者簡介

Darshan 是位於印度的 IBM Software Labs 系統軟體工程師。他是 IBM Tivoli Directory Server L2 支援團隊成員,過去曾服務於 Component Verification Team for TDS 將近一年時間。他的興趣涵蓋抄寫和分散式目錄。
Neelam 是位於印度的 IBM Software Labs TDS 測試團隊的系統軟體工程師。她操作過大部分目錄元件,興趣涵蓋抄寫及 Proxy 伺服器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章