1. 程式人生 > >基於OpenLDAP_MirrorMode的OpenLDAP高可用

基於OpenLDAP_MirrorMode的OpenLDAP高可用

背景:

某客戶做使用者中心專案。使用OpenLDAP做為儲存使用者資訊。LDAP是一款輕量級目錄訪問協議(Lightweight Directory Access Protocol,簡稱LDAP),屬於開源集中賬號管理架構的實現,且支援眾多系統版本,被廣大網際網路公司所採用。目錄服務是一種特殊的資料庫系統,對於資料的讀取、瀏覽、搜尋有很好的效果。同時做為使用者中心,資料庫的高可用顯得尤為重要。在客戶生產環境中使用的是客戶的負載均衡裝置,基於思傑的硬體負載均衡裝置,後端配置的是OpenLDAP_MirrorMode,相當於Mysql的雙主模式,後面某一臺伺服器出現問題,負載均衡會將後端的伺服器剔除,另一臺仍能提供服務,如下圖所示
1


實驗環境:
作業系統: centos 7.2
伺服器A:10.10.1.134
伺服器B:10.10.1.132

一:環境準備

  • 下載軟體:
    mkdir /home/admin/openldap && cd /home/admin/openldap

wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap- release/openldap-2.4.23.tgz
wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz

  • 關閉selinux
    sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config && sestatus
  • 防火牆關閉
    /bin/systemctl disable firewalld.service && /bin/systemctl stop firewalld.service
  • 配置yum源為阿里雲yum源
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #從阿里雲映象網站下載yum源配置檔案到yum目錄中

sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo #修改版本號為redhat7
yum clean all #清空yum快取
yum list #生成列表

  • 安裝openldap環境所需要的依賴包。
    yum -y install libtool-ltdl libtool-ltdl-devel gcc openssl openssl-devel cyrus-sasl-lib.x86_64 cyrus-sasl-devel.x86_64 cyrus-sasl-plain.x86_64 cyrus-sasl-md5.x86_64 cyrus-sasl-ldap.x86_64

二:安裝openldap和Berkeley DB

1. 寫在安裝之前:

  • 編譯安裝openldap需要資料庫的支援,openldap的資料庫支援
    Berkeley DB,Oracle,Mysql,MariaDB,GDBM等資料庫。預設openldap採用Berkeley DB,並且openldap對資料庫有一定的要求,openldap 2.4的軟體為例,需要Berkeley DB 4.4版本以上,所以在編譯安裝openldap原始碼包時需要先下載安裝Berkeley DB

2.編譯安裝Berkeley DB

  • tar -xf db-4.6.21.tar.gz -C /usr/local/src
  • cd /usr/local/src/db-4.6.21/build_unix/ && mkdir /usr/local/BDB
  • ../dist/configure --prefix=/usr/local/BDB
  • make && make install
  • echo "/usr/local/BDB/lib/" > /etc/ld.so.conf.d/bdb.conf
  • ldconfig -v
  • ln -sv /usr/local/BDB/include /usr/include/BDB

3. 編譯安裝openldap

  • tar -xf openldap-2.4.23.tgz -C /usr/local/src/
  • cd /usr/local/src/openldap-2.4.23/
  • ./configure --prefix=/usr/local/openldap --enable-syslog --enable-modules --enable-debug --with-tls CPPFLAGS=-I/usr/local/BDB/include/ LDFLAGS=-L/usr/local/BDB/lib/ --enable-ldap --enable-relay --enable-accesslog --enable-auditlog --enable-syncprov --with-cyrus-sasl --enable-spasswd
  • make depend
  • make && make install
  • echo "/usr/local/openldap/lib/" > /etc/ld.so.conf.d/ldap.conf
  • ldconfig -v
  • ln -sv /usr/local/openldap/include/ /usr/include/ldap
  • ln -s /usr/local/openldap/bin/* /usr/local/bin/
  • ln -s /usr/local/openldap/sbin/* /usr/local/sbin/

三:配置openldap

1 配置openldap的方法有兩種:

  • 通過修改配置檔案實現配置
  • 通過配置資料庫的形式完成配置(slapd.d下的資料庫配置檔案),屬於動態配置不需要重啟slapd程序,
    此配置檔案在cn=config目錄下的LDIF的配置檔案 。此檔案不建議手動修改,用ldap命令生成。

2配置rootdn密碼(optional)

  • /usr/local/openldap/bin/slappasswd
    此密碼記住,後面配置openldap會用到。

3 建立使用者ldap

  • useradd ldap

4建立資料目錄以及日誌檔案

  • mkdir /data/openldap/{data,log,var} -p
  • cd /data/openldap/var/
  • mkdir run

5 修改許可權:

  • cp /usr/local/openldap/etc/openldap/DB_CONFIG.example /data/openldap/data/DB_CONFIG
  • chown -R ldap:ldap /data/openldap/data
  • chmod 700 -R /data/openldap/data

6修改openldap配置檔案

編輯配置檔案vim slapd.conf
include /usr/local/openldap/etc/openldap/schema/core.schema
include /usr/local/openldap/etc/openldap/schema/collective.schema
include /usr/local/openldap/etc/openldap/schema/corba.schema
include /usr/local/openldap/etc/openldap/schema/cosine.schema
include /usr/local/openldap/etc/openldap/schema/duaconf.schema
include /usr/local/openldap/etc/openldap/schema/dyngroup.schema
include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include /usr/local/openldap/etc/openldap/schema/java.schema
include /usr/local/openldap/etc/openldap/schema/misc.schema
include /usr/local/openldap/etc/openldap/schema/nis.schema
include /usr/local/openldap/etc/openldap/schema/openldap.schema
include /usr/local/openldap/etc/openldap/schema/ppolicy.schema
pidfile /data/openldap/var/run/slapd.pid
argsfile /data/openldap/var/run/slapd.args
loglevel 256
logfile /data/openldap/log/slapd.log
moduleload syncprov.la # 需要資料同步需要開啟此模組
database bdb
directory /data/openldap/data
suffix "dc=boe,dc=com"
rootdn "cn=Manager,dc=boe,dc=com"
rootpw {SSHA}eJtr5umAo23PqTKATU/X6D8swJ9yIlSx #用slappasswd命令生成的密碼
index objectclass,entryCSN,entryUUID eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
serverID 2
syncrepl rid=123
provider=ldap://10.10.1.160
bindmethod=simple
binddn="cn=Manager,dc=boe,dc=com"
credentials=123456
searchbase="dc=boe,dc=com"
schemachecking=off
type=refreshAndPersist
retry="60 +"
mirrormode on
兩個伺服器的配置檔案有兩個地方不一致
1)serverID不一致
2)provider=ldap://對端的ip

7開啟日誌功能

  • 通過修改配置檔案開啟日誌功能
  1. /etc/rsyslog.d/slapd.conf

local4.* /data/openldap/log/openldap.log
重啟rsyslog和slapd
service rsyslog restart

  • 通過修改資料庫配置檔案開啟
  1. /root/loglevel.ldif << EOF

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
ldapadd -x -D "cn=Manager,dc=boe,dc=com" -f ./loglevel.ldif -w secret

四:配置phpldpadmin工具

1 安裝和配置LDAP管理工具PHPldapadmin

  • yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
  • yum -y install epel-release
  • yum --enablerepo=epel -y install phpldapadmin

2 修改配置檔案

  • vim /etc/phpldapadmin/config.php +398
    397行取消註釋,398行添加註釋

$servers->setValue('login','attr','dn');

  • vi /etc/httpd/conf.d/phpldapadmin.conf
    Apache 2.4

Require all granted (修改此處)
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1

3 設定開機自啟並啟動Apache

[[email protected] ~]# systemctl enable httpd
[[email protected] ~]# systemctl start httpd
啟動openldap
/usr/local/openldap/libexec/slapd
訪問用http://ip/phpldapadmin訪問如圖
111
222
在10.10.1.132上建立了一個OU名為testou,會發現10.10.1.132會自動同步到本地,如圖:
333
444
兩伺服器日誌如下:
555
666
以上結果得知,在映象模式下,當其中一臺伺服器增加操作OU時,另一臺也會同步增加,兩臺伺服器均可進行讀寫操作,任何一臺資訊發生變化,都會以推的方式進行通知。