yum install openldap openldap-clients openldap-servers
安裝完直接啓動 ``` systemctl start slapd ``` 設置管理員密碼 ``` slappasswd -h {SSHA} ``` 而後會讓你輸入一個明文密碼,返回給你一個加密的密碼,記住這個返回的密碼
使用ldapsearch命令查詢管理員的dn:php
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config "olcRootDN=cn=Manager,dc=my-domain,dc=com" dn olcRootDN olcRootPW
這裏返回的dn是olcDatabase={2}hdb,cn=config,密碼等信息也都一併返回。這裏有用的是dn和密碼的加密方式,好比這裏是SSHA,dn是後面修改的Entry DN,而知道密碼的加密方式就可使用該加密方式生成新密碼。java
使用ldapmodify修改條目node
vim chrootpw.ldif
#這是第1步獲取的管理員dn dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix #你想要改爲的域名的後綴 olcSuffix: dc=xinniu,dc=com #olcSuffix這幾行必定要加,不然修改以後會出錯,後面重啓openldap都會失敗 dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN #你想要改爲的域名 olcRootDN: cn=admin,dc=xinniu,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootPW #這裏就是剛纔保存下來的那個加密後的密碼 olcRootPW: {SSHA}uYnICxla0NrUC5b/ha4i1JeOTCoUchV+
如圖:
apache
使用下面的命令來修改管理員條目:vim
ldapmodify -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
若是出現:api
modifying entry "olcDatabase={2}bdb,cn=config"
導入基本數據結構
咱們須要向 LDAP 中導入一些基本的 Schema。這些 Schema 文件位於 /etc/openldap/schema/ 目錄中,schema控制着條目擁有哪些對象類和屬性bash
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/collective.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/corba.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/core.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/duaconf.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/dyngroup.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/inetorgperson.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/java.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/misc.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/openldap.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/pmi.ldif ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/ppolicy.ldif
開啓ldap日誌服務器
mkdir -p /var/log/slapd chown ldap:ldap /var/log/slapd/ touch /var/log/slapd/slapd.log chown ldap . /var/log/slapd/slapd.log echo "local4.* /var/log/slapd/slapd.log" >> /etc/rsyslog.conf
到此就設定好了管理員的密碼。能夠用客戶端去管理openldap了數據結構
打算使用phpldapadmin來管理openldap,這個工具使用的人較多,網上文檔多,出現問題容易解決。app
首先安裝Apache和PHP:
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
而後安裝phpldapadmin:
yum -y install phpldapadmin
httpd與phpldapadmin進行集成:
修改配置文件:
[root@localhost ~]# vim /etc/phpldapadmin/config.php
#397行取消註釋,398行添加註釋
$servers->setValue('login','attr','dn'); // $servers->setValue('login','attr','uid');
這裏須要修改,若是不修改,phpldapadmin會去用uid去搜索條目,不會用dn去搜索,致使報密碼錯誤。
[root@localhost ~]# phpldapadmin的ip過濾規則默認是拒絕全部ip訪問,先去修改一下規則,咱們才能夠訪問
vim /etc/httpd/conf.d/phpldapadmin.conf
##這是Apache2.2和之前的修改方法
// 修改配置
把下面的Deny from all 改成Allow from all
##這是apache2.4和之後的修改方法
#容許172.16.10.16訪問 Require ip 172.16.10.16 #容許172.16這個網段訪問 Require ip 172.16.0.0/16 #容許全部ip訪問 Require all granted
咱們能夠根據本身須要修改來
修改完以後啓動:
systemctl restart httpd
界面:
登錄
用戶名,默認是 cn=Manager,dc=my-domain,dc=com(這個也能夠改的,仿照修改密碼的步驟)
密碼就輸入剛開始設置的密碼
登錄進去後,個人管理界面報這個信息:
This base cannot be created with PLA
顯示結果以下:
通過查詢,緣由是根結點須要初始化後才能使用,最終處理以下:
一、建立一個initroot.ldif文件,爲建立初始化根節點作準備工做,以下所示:
dn: dc=xinniu,dc=com
#域名的後綴
o: ldap
objectclass: dcObject
objectclass: organization
二、執行ldapadd -f initroot.ldif -x -D cn=admin,dc=xinniu,dc=com -W 輸入以前配置OpenLDAP的密碼後,便可完成建立LDAP根節點,以下圖所示:
完成以上操做後,再回到phpldapadmin頁面,能夠看到,已經正常出現了根節點,並能夠建立相關OU、Group、Account等對象,以下圖所示:
ldap雙主複製功能的實現依賴於syncprov模塊,這個模塊位於/usr/lib64/openldap目錄下
[root@server1] vim mod_syncprov.ldif
# create new dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib64/openldap olcModuleLoad: syncprov.la
[root@server1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif
[root@server1] vim syncprov.ldif
# create new dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpSessionLog: 100
[root@server1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
[root@server1] ~/ldif$ vim master01.ldif
# create new dn: cn=config changetype: modify replace: olcServerID # specify uniq ID number on each server olcServerID: 1 # 惟一值,主2上替換爲2 dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://basic-server-2:389/ ##此處爲主2服務器地址,主2此處相應地上替換爲主1服務器地址 bindmethod=simple binddn="cn=admin,dc=xinniu,dc=com" credentials=bigdata123! #管理員的明文密碼 searchbase="dc=xinniu,dc=com" scope=sub schemachecking=on type=refreshAndPersist retry="30 5 300 3" interval=00:00:05:00 - add: olcMirrorMode olcMirrorMode: TRUE dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
root@SERVER ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f master01.ldif
這部完成以後,咱們在master1的管理界面上建立一個條目,再打開master2的管理界面,若是能夠看到咱們剛纔建立的條目,那麼就說明雙主已經配置成功了。
#兩個節點都要操做
yum -y install keepalived
很簡單,一條命令就安裝好了
#兩個節點都要操做
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
#node1的配置: ! Configuration File for keepalived global_defs { notification_email { xhh@cmss.chinamobile.com } notification_email_from root@cmss.chinamobile.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ldap_A #節點標識 } vrrp_script chk { script "/etc/keepalived/script/check-ldap-server.sh" interval 3 weight -5 } vrrp_instance VI_1 { state MASTER interface eth0 #使用的網卡爲eth0 virtual_router_id 150 #虛擬路由標識,兩個節點必須一致 priority 100 #優先級,兩個節點的優先級高者爲master nopreempt #不搶佔 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.22.88 #虛擬ip } notify_master "/etc/keepalived/script/to_master.sh" notify_backup "/etc/keepalived/script/to_backup.sh" notify_stop "/etc/keepalived/script/to_stop.sh" track_script { chk } }
#node2的配置 ! Configuration File for keepalived global_defs { notification_email { xhh@cmss.chinamobile.com } notification_email_from root@cmss.chinamobile.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ldap_B #節點標識 } vrrp_script chk { script "/etc/keepalived/script/check-ldap-server.sh >> /tmp/log/chk.log 2>&1" interval 3 weight -5 } vrrp_instance VI_1 { state BACKUP interface eth0 #使用的網卡爲eth0 virtual_router_id 150 #虛擬路由標識,兩個節點必須一致 priority 98 #優先級 nopreempt #不搶佔 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.22.88 } notify_master "/etc/keepalived/script/to_master.sh" notify_backup "/etc/keepalived/script/to_backup.sh" notify_stop "/etc/keepalived/script/to_stop.sh" track_script { chk } }
另外幾個腳本的內容(兩個節點一致)
check-ldap-server.sh:
#!/bin/bash counter=$(ps -C slapd --no-heading|wc -l) if [ "${counter}" = "0" ]; then sudo systemctl start slapd sleep 2 counter=$(ps -C slapd --no-heading|wc -l) if [ "${counter}" = "0" ]; then sudo systemctl stop keepalived fi fi
/etc/keepalived/script/to_master.sh:
#!/bin/bash sudo systemctl start slapd; sh /etc/keepalived/script/send_email.sh "Ldap主備切換" "$(hostname)切換爲Active"
/etc/keepalived/script/to_backup.sh:
#!/bin/bash sudo systemctl start slapd; sh /etc/keepalived/script/send_email.sh "Ldap主備切換" "$(hostname)切換爲Backup"
/etc/keepalived/script/to_stop.sh:
#!/bin/bash sh /etc/keepalived/script/send_email.sh "Ldap主備切換" "$(hostname)切換爲Stop"
/etc/keepalived/script/send_email.sh:
#!/bin/bash SUBJECT=$1 CONTENT=$2 echo "${CONTENT}" | mail -s "${SUBJECT}" dongguashaorou@163.com
前兩天搭建好了,今天開啓iptables防火牆後就有問題了:
1.兩個節點的虛擬ip不能飄移了,發生了腦裂,兩邊都有虛擬ip
2.其餘節點能夠從真實ip訪問服務,可是沒法從虛擬ip訪問服務
折騰一番後發現要在2臺真實節點的iptables配置(/etc/sysconfig/iptables)上面分別加上下面2行
-A INPUT -d 172.18.22.88(虛擬ip) -j ACCEPT
-A INPUT -p vrrp -j ACCEPT
以後重啓iptables,再重啓keepalived便可訪問服務
最後,後面發現阿里雲的機器上面用這個keepalive真的不太好使,不少節點上去telnet虛擬ip的端口會出現不通的狀況,就不打算用了,ldap的訪問量很小,是個比較穩定的服務,原本爲了以防萬一,再引入新的問題還不如不用,最終仍是用了haproxy去作了個load balance,比這個還簡單多了。不過實際上keepalived和haproxy並非一個用途的東西,只是我以爲服務也沒那麼容易掛,最可靠的方案實際上是,haproxy和keepalived都用上,用keepalived去監控haproxy。
附上一下haproxy的部分配置listen ldap :25001mode tcpoption tcplogbalance leastconnserver ldap1 172.18.20.27:389 checkserver ldap2 172.18.20.35:389 check