天天看點

Ldap雙主模式+keepalived實作ldap高可用一.安裝OpenLDAP二.安裝phpldapadmin(ldap管理工具)到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。三.配置雙主複制功能,在主1和主2上執行下面的步驟四.驗證

一.安裝OpenLDAP

yum install openldap openldap-clients openldap-servers           
安裝完直接啟動
```
systemctl start  slapd
```
設定管理者密碼 ```

slappasswd -h {SSHA}    
    ```

然後會讓你輸入一個明文密碼,傳回給你一個加密的密碼,記住這個傳回的密碼           

使用ldapsearch指令查詢管理者的dn:

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,而知道密碼的加密方式就可以使用該加密方式生成新密碼。

使用ldapmodify修改條目

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+           

如圖:

Ldap雙主模式+keepalived實作ldap高可用一.安裝OpenLDAP二.安裝phpldapadmin(ldap管理工具)到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。三.配置雙主複制功能,在主1和主2上執行下面的步驟四.驗證

使用下面的指令來修改管理者條目:

ldapmodify -Y EXTERNAL -H ldapi:/// -f  chrootpw.ldif            

如果出現:

modifying entry "olcDatabase={2}bdb,cn=config"           

導入基本資料結構

我們需要向 LDAP 中導入一些基本的 Schema。這些 Schema 檔案位于 /etc/openldap/schema/ 目錄中,schema控制着條目擁有哪些對象類和屬性

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,這個工具使用的人較多,網上文檔多,出現問題容易解決。

二.安裝phpldapadmin(ldap管理工具)

首先安裝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           

界面:

Ldap雙主模式+keepalived實作ldap高可用一.安裝OpenLDAP二.安裝phpldapadmin(ldap管理工具)到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。三.配置雙主複制功能,在主1和主2上執行下面的步驟四.驗證

登陸

使用者名,預設是 cn=Manager,dc=my-domain,dc=com(這個也可以改的,仿照修改密碼的步驟)

密碼就輸入剛開始設定的密碼

登陸進去後,我的管理界面報這個資訊:

This base cannot be created with PLA

顯示結果如下:

Ldap雙主模式+keepalived實作ldap高可用一.安裝OpenLDAP二.安裝phpldapadmin(ldap管理工具)到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。三.配置雙主複制功能,在主1和主2上執行下面的步驟四.驗證

經過查詢,原因是根結點需要初始化後才能使用,最終處理如下:

1、建立一個initroot.ldif檔案,為建立初始化根節點做準備工作,如下所示:

dn: dc=xinniu,dc=com

#域名的字尾

o: ldap

objectclass: dcObject

objectclass: organization

Ldap雙主模式+keepalived實作ldap高可用一.安裝OpenLDAP二.安裝phpldapadmin(ldap管理工具)到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。三.配置雙主複制功能,在主1和主2上執行下面的步驟四.驗證

2、執行ldapadd -f initroot.ldif -x -D cn=admin,dc=xinniu,dc=com -W 輸入之前配置OpenLDAP的密碼後,即可完成建立LDAP根節點,如下圖所示:

Ldap雙主模式+keepalived實作ldap高可用一.安裝OpenLDAP二.安裝phpldapadmin(ldap管理工具)到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。三.配置雙主複制功能,在主1和主2上執行下面的步驟四.驗證

完成以上操作後,再回到phpldapadmin頁面,可以看到,已經正常出現了根節點,并可以建立相關OU、Group、Account等對象,如下圖所示:

Ldap雙主模式+keepalived實作ldap高可用一.安裝OpenLDAP二.安裝phpldapadmin(ldap管理工具)到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。三.配置雙主複制功能,在主1和主2上執行下面的步驟四.驗證

到這裡就搭建好了一台openldap+phpldapadmin的伺服器了,在另外一台也按照此步驟操作搭建好另一台。

三.配置雙主複制功能,在主1和主2上執行下面的步驟

ldap雙主複制功能的實作依賴于syncprov子產品,這個子產品位于/usr/lib64/openldap目錄下

1.mod_syncprov.ldif

[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

2.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

在主1和主2上執行下面的步驟,隻需要替換olcServerID和provider的值

[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的管理界面,如果可以看到我們剛才建立的條目,那麼就說明雙主已經配置成功了。

五.Keepalived搭建

1.安裝

#兩個節點都要操作

yum -y install keepalived

很簡單,一條指令就安裝好了

2.配置

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

vim /etc/keepalived/keepalived.conf

#node1的配置:
! Configuration File for keepalived
global_defs {
    notification_email {
       [email protected]
    }
   notification_email_from  [email protected]
   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 {
       [email protected]
    }
   notification_email_from  [email protected]
   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}"  [email protected]           

有一點需要注意,以上這幾個腳本,需要一個使用者來執行:keepalived_script,是以需要建立這個使用者,還要把這個使用者加到/etc/sudoers中,否則腳本中systemctl啟動slapd服務,壓根沒有權限,這個點網上的文檔都沒有提到,調試了一段時間才發現這個問題。其他的,如果發現腳本配置以後沒有生效,那麼1.檢查keepalived.conf檔案的格式,看是否出錯,2.腳本的輸出可以重定向到檔案,然後可以發現問題。

前兩天搭建好了,今天開啟iptables防火牆後就有問題了:

1.兩個節點的虛拟ip不能飄移了,發生了腦裂,兩邊都有虛拟ip

2.其他節點可以從真實ip通路服務,但是無法從虛拟ip通路服務