目錄是一個特殊的數據庫,專門用於搜索和瀏覽,另外也支持基本的查詢和更新功能。
前端
目錄是一個爲查詢、瀏覽和搜索而優化的專業分佈式數據庫,它呈樹狀結構組織數據,就好象Linux/Unix
系統中的文件目錄同樣。目錄數據庫和關係數據庫不一樣,它有優異的讀性能,但寫性能差,而且沒有事務
處理、回滾等複雜功能,不適於存儲修改頻繁的數據。因此目錄天生是用來查詢的,就好象它的名字一
樣。shell
基於X.500 目錄訪問協議,以及基於X.500基礎發展而來的LDAP協議,其【具體實現】有: OpenLDAP, ApacheDS, Active Directory, Red Hat Directory Service, IBM Directory Server。
數據庫
LDAP是 Lightweight Directory Access Protocol的縮寫, 翻譯爲: 輕型目錄訪問協議。國內一般讀做: L-DAP 或者 L-D-A-P。後端
顧名思義,它是指輕量級目錄訪問協議(這個主要是相對另外一目錄訪問協議X.500而言的;LDAP略去了x.500中許多不太經常使用的功能,且以TCP/IP協議爲基礎)。目錄服務和數據庫很相似,但又有着很大的不一樣之處。數據庫設計爲方便讀寫,但目錄服務專門進行了讀優化的設計,所以不太適合於常常有寫操做的數據存儲。同時,LDAP只是一個協議,它沒有涉及到如何存儲這些信息,所以還須要一個後端數據庫組件來實現。這些後端能夠是bdb(BerkeleyDB)、ldbm、shell和passwd等。安全
What kind of information can be stored in the directory? The LDAP information model is based on entries(條目). An entry is a collection of attributes that has a globally-unique Distinguished Name(DN). The DN is used to refer to the entry unambiguously. Each of the entry's attributes has a type and one or more values. The syntax of values depend on the attribute type.
服務器
信息如何組織?
網絡
目錄條目以層次型的樹狀結構來組織。傳統上, 這種結構反映地域和組織機構界限。負載均衡
樹也能夠根據互聯網域名(Internet命名)組織。這種命名方式也愈來愈受歡迎,由於它容許使用DNS爲目錄服務定位。
dom
LDAP目錄以樹狀的層次結構來存儲數據(相似於 DNS),最頂層即根稱做「基準DN(base DN)」,形如「dc=mydomain,dc=com」或 「o=mydomain.org」,前一種方式更爲靈活也是Windows AD 中使用的方式。在根目錄的下面有不少的文件和目錄,爲了把這些大量的數據從邏輯上分開,LDAP像其它的目錄服務協議同樣也使用OU(Organization Unit),能夠用來表示公司內部機構,如部門等,也能夠用來表示設備、人員等。同時OU還能夠有子OU,用來表示更爲細緻的分類。數據庫設計
How is the information referenced ?
LDAP中每一條記錄都有一個惟一的區別於其它記錄的名字DN(Distinguished Name),其處在「葉子」位置的部分稱做RDN;如 dn:cn=tom,ou=animals,dc=mydomain,dc=org中tom即爲RDN; RDN在一個OU中必須是惟一的。
How is the information accessed ?
LDAP定義了查詢和更新目錄操做。提供的操做包括,從目錄中增長和刪除一個條目,變動某個已經存在的條目,以及變動一個條目的名字。儘管,絕大部分時間, LDAP 是用於在目錄中搜索信息. LDAP搜索操做容許目錄的一些部分被搜索以尋找那些知足搜索過濾器規定的條件的條目. 能夠請求每一個和要求相匹配的條目的信息。
How does LDAP work ?
LDAP utilizes a Client-Server(C/S)模型。One or more LDAP servers contain the data making up the directory information tree (DIT). The client connects to servers and asks it a question. The server responds with an answer and/or with a pointer to where the client can get additional information (typically, another LDAP server). No matter which LDAP server a client connects to, it sees the same view of the directory; a name presented to one LDAP server references the same entry it would at another LDAP server. This is an important feature of a global directory service.
What is the difference between LDAPv2 and LDAPv3 ?
LDAPv3在1990's 末期開發出來用來替代 LDAPv2。LDAPv3 爲 LDAP增長了如下功能:
使用SASL實現強驗證和數據安全服務
使用TLS(SSL)實現證書驗證和數據安全服務
使用Unicode編碼實現國際化
轉發和配置
Schema Discovery
擴展性(控制,操做擴展,等等)
LDAPv2 過期了 (RFC3494)。大部分所謂LDAPv2實現(including slapd(8))已經不符合LDAPv2技術規範了,那些聲稱支持LDAPv2的實現之間的互操做性是有限的。因爲LDAPv2和LDAPv3顯著的差別, 同時部署LDAPv2和LDAPv3是存在問題的。 應該避免使用LDAPv2。 LDAPv2缺省是被禁用的。
What is slapd and what can it do ?
slapd(Standalone LDAP Daemon) is an LDAP directory server that runs on many different platforms。 slapd 其實就是基於LDAP協議的一個具體開源實現(OpenLDAP Software 2.4), 它實現了輕量級目錄訪問協議版本3(LDAPv3),並支持 IPv4 和 IPv6 (TCP/IP)以及 Unix IPC 網絡協議。
總結:
LDAP是什麼?
LDAP是輕量目錄訪問協議(Lightweight Directory Access Protocol)的縮寫【注意:它是協議】。LDAP協議其實是在X.500標準協議基礎之上產生的一個簡化版本。LDAP是一種開放的Internet標準,LDAP協議是跨平臺的。與X.500不一樣,LDAP支持TCP/IP(便可以支持分佈式部署)。
LDAP幾個特色:
LDAP的數據存儲以層次的樹狀結構,而不是二維表。
LDAP能夠高效的查詢,不過在寫方面,就慢不少。
LDAP是Client-Server(C/S)模型。
OpenLDAP是什麼?
OpenLDAP 是 LDAPv3 協議的具體實現, 可支持多平臺,以提供目錄服務。其進程爲 slapd。
本地目錄服務:
在這種配置中,只爲您的本地網域提供目錄服務,它不以任何方式與其餘目錄服務器交互。
帶轉發的本地服務:
在這種配置中,爲您的本地網域提供目錄服務,並配置它返回轉發到其餘可以處理請求的服務器。
可複製的目錄服務:
OpenLDAP支持同步複製,即所謂的 syncrepl,可用於在多個目錄服務器上維持目錄信息的影子複製。最基本的配置,主服務器做爲 syncrepl 供應商, 而一個或多個從服務器是 syncrepl 消費者。
分佈式本地目錄服務:
在這種配置中,當地的服務被分割成較小的服務,每一個都是可複製的,和上下級粘在一塊兒轉發。
爲了提供一個有彈性的企業部署,複製目錄是一個基礎需求。
OpenLDAP 2.3 同步複製問題(網上摘抄,沒有通過測試):
slurpd 守護進程是以推(push)模式操做, 主服務器推送變動數據到從服務器(不可靠)
對replog中記錄的次序極爲敏感
很容易失去同步,這時須要手工干預來從新同步從服務器數據庫
若是一個從服務器長時間停機,致使replog可能變得太大以致於slurpd沒法處理
須要中止和從新啓動主服務器來新增從服務器
只支持單一主服務器複製(1主對多從)
LDAP syncrepl 同步複製是一個基於對象的複製機制. 當提供者的一個被複制對象中的任何屬性值改變時, 每一個消費者在複製過程當中擷取並處理完整的變動對象, 包括全部改變和沒改變的屬性值(同步整個條目對象,而不是改變的某個屬性). 這方法的一個好處是當多個變動發生在單一對象上時, 那些變動的精確順序不須要保存; 只有最終狀態是有意義的. 可是當使用模式(匹配的方式)在一次變動中處理不少對象時,這個方法可能有缺點。
例如, 假設你有一個數據庫包含 100,000 對象,每一個對象是 1 KB . 進一步, 假設你常常運行一個批處理工做來變動主服務器上的 100,000 對象的每個對象中的一個兩字節的屬性值. 不算LDAP和TCP/IP協議的開銷, 每次你運行這個工做每一個消費者將傳送並處理 1 GB 的數據,只是爲了處理這個 200KB 的變動!
在相似這樣的案例中,99.98% 被傳送和處理的數據將是多餘的, 由於它們表明那些未變動的值. 這是一個對寶貴的傳輸和處理帶寬的浪費而且可能致使發展出不可接受的複製日誌的積壓. 雖然這個情形是一個極端, 但它有助於演示某些LDAP部署的一個很是真實的問題.
Delta-syncrepl, 一個基於變動日誌syncrepl變種, 被設計用來處理相似上面所說的狀況. Delta-syncrepl經過在提供者一端維護一個可選擇深度的變動日誌來起做用. 複製消費者爲它須要的變動檢查這個變動日誌,只要變動日誌包含它須要的變動,消費者就從變動日誌擷取這些變動並把它們應用到本身的數據庫. 不過,一個複製(譯者注:指變動日誌裏的變動)若是離上一次同步的狀態太遠(或消費者根本就是空的), 能夠用常規的syncrepl把它(指消費者)恢復到最新的狀態而後複製從新切換到delta-syncrepl模式.
Multi-Master複製是一個使用Syncrepl複製數據到多個提供者(「主服務器」)目錄服務器的複製技術.
若是任何提供者失敗了, 其餘提供者將繼續接受更新
避免了單點失效
提供者們能夠在不一樣的物理位置例如跨越全球網絡.
好的自動容錯/高可用性
(這些常常被聲稱是Multi-Master複製的優勢可是那些說法是錯誤的):
它不關負載均衡任何事
提供者必須對全部其餘的服務器進行寫操做,這意味着分佈在全部的服務器上的網絡交通和寫操做負載,和單一主服務器是同樣的。
多服務器的服務器利用率和負載在最好的狀況下和單服務器同樣; 最壞的狀況下單服務器更優,由於在提供者和消費者之間使用不一樣的模式的時候索引能夠作出不一樣的優化調整.
MirrorMode是一個混合配置,既提供單主服務器複製的全部一致性保障,也提供多主服務器模式的高可用性. 在 MirrorMode 兩個提供者都被設置成從對方複製(就象一個多主服務器配置), 可是一個額外的前段被用來引導全部的寫操做到僅僅到兩臺服務器中的其中一臺. 第二個提供者將只在第一臺服務器崩潰時進行寫操做, 那時這個前端將切換路徑引導全部的寫操做到第二個提供者. 當一個崩潰的提供者被修復而且重啓動後將自動從正在運行的提供者那裏活得任何更新並從新同步.
由於LDAP同步協議同時支持基於「拉」和「推」的複製, 「推」模式 (refreshAndPersist) 在提供者開始"推"變動以前仍必須由消費者初始化. 在一些網絡配置中, 特別是防火牆限制了鏈接的方向時, 一個提供者初始化的推模式是須要的.
這個模式能夠被配置成LDAP Backend (Backends and slapd-ldap(8)). 不用在實際的消費者服務器上運行syncrepl引擎, 而是一個slapd-ldap代理設置在靠近(或搭配在)提供者的地方指向消費者, 而這個syncrepl引擎運行在這個代理服務器上.
OpenLDAP 2.4
舊的slurpd機制只操做主服務器初始化的推模式. Slurpd複製被Syncrepl複製取代了而且在OpenLDAP 2.4中被徹底移除了.
LDIF文件的一般規則適用於配置信息:以'#'字符開始的註釋行會被忽略。若是一行的開始是一個空格,它被認爲是延續前行(即便前行是註釋)而且這個單個的空格會被刪除。條目是由空白行分開的。