LDAP-HA安裝與配置(Keepalived方式實現)

LDAP部署

安裝LDAP(主節點)

安裝LDAP Servernode

yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -y

查看安裝的版本:linux

rpm -qa openldap
openldap-2.4.40-8.el7.x86_64

rpm -qa krb5-server-ldap
krb5-server-ldap-1.13.2-10.el7.x86_64

LDAP 服務端配置
更新配置庫:shell

rm -rf /var/lib/ldap/*
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /var/lib/ldap

在2.4之前的版本中,OpenLDAP 使用 slapd.conf 配置文件來進行服務器的配置,而2.4開始則使用 slapd.d 目錄保存細分後的各類配置,這一點須要注意,其數據存儲位置即目錄 /etc/openldap/slapd.d 。儘管該系統的數據文件是透明格式的,仍是建議使用 ldapadd, ldapdelete, ldapmodify 等命令來修改而不是直接編輯。
默認配置文件保存在 /etc/openldap/slapd.d,將其備份:數據庫

cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d.bak
chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

注意:若是是配置有問題須要重裝,上面兩句命令改爲下面三句:vim

rm -rf /etc/openldap/slapd.d
cp -r /etc/openldap/slapd.d.bak /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

啓動服務
啓動 LDAP 服務:centos

#centos7啓動命令
systemctl start slapd
systemctl enable slapd

#centos6啓動命令
chkconfig --add slapd
chkconfig --level 345 slapd on
/etc/init.d/slapd start
查看狀態,驗證服務端口
$ ps aux | grep slapd | grep -v grep
  ldap      9225  0.0  0.2 581188 44576 ?        Ssl  15:13   0:00 /usr/sbin/slapd -h ldap:/// -u ldap

$ netstat -tunlp  | grep :389
  tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      8510/slapd
  tcp        0      0 :::389                      :::*                        LISTEN      8510/slapd

若是啓動失敗,則運行下面命令來啓動 slapd 服務並查看日誌:
slapd -h ldap://127.0.0.1 -d 481
待查明緣由以後,中止該進程使用正常方式啓動 slapd 服務。
導入基本的配置
導入基本的Schema
cat /etc/openldap/slapd.confbash

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema

pidfile     /var/run/openldap/slapd.pid
argsfile    /var/run/openldap/slapd.args

allow bind_v2
modulepath /usr/lib64/openldap
moduleload syncprov

# TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
# TLSCertificateFile /etc/pki/tls/certs/slapd.pem
# TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem

#########################################
# Main LDAP database #
#########################################
database bdb
suffix "dc=cdh,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=cdh,dc=com"
rootpw 111111

directory /var/lib/ldap

# Indices to maintain for this database M-eM-"M-^^M-eM-^JM- M-gM-4M-"M-eM-<M-^U
index objectClass eq,pres       
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
index entryCSN,entryUUID eq

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
serverID    1   

syncrepl rid=100
         provider=ldap://10.1.2.235     
         type=refreshAndPersist     
         retry="60 +"       
         searchbase="dc=cdh,dc=com"     
         scope=sub
         schemachecking=on
         bindmethod=simple      
         binddn="cn=Manager,dc=cdh,dc=com"   
         credentials=111111     
mirrormode on

##################################################
# Database for the monitoring #
##################################################
database monitor

access to *
       by dn.exact="cn=Manager,dc=cdh,dc=com" read
       by * none

測試服務器

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d
chown -R ldap.ldap /var/lib/ldap

刪除文件session

[root@node1a220 ~]# cd /etc/openldap/slapd.d/cn\=config/
[root@node1a220 cn=config]# rm -rf olcDatabase={2}hdb.ldif
[root@node1a220 cn=config]# rm -rf olcDatabase={2}monitor.ldif

重啓服務app

chown -R ldap.ldap /var/lib/ldap
systemctl restart slapd

建立數據庫
數據庫沒有數據,須要添加數據,你能夠手動編寫 ldif 文件來導入一些用戶和組,或者使用 migrationtools 工具來生成 ldif 模板。建立 setup.ldif 文件以下:

dn: dc=cdh,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: cdh com
dc: cdh

dn: ou=People,dc=cdh,dc=com
objectclass: organizationalUnit
ou: people
description: Users

dn: ou=group,dc=cdh,dc=com
objectClass: organizationalUnit
ou: group

使用下面命令導入數據,密碼是前面設置的111111。
ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f setup.ldif
參數說明:
• -w 指定密碼
• -x 是使用一個匿名的綁定

LDAP 的使用

導入系統用戶
接下來你能夠從 /etc/passwd, /etc/shadow, /etc/groups 中生成 ldif 更新 ldap 數據庫,這須要用到 migrationtools 工具。
安裝:
yum install migrationtools -y
利用遷移工具生成模板,先修改默認的配置:
vim /usr/share/migrationtools/migrate_common.ph

#line 71 defalut DNS domain
$DEFAULT_MAIL_DOMAIN="HADOOP.COM";
#line 74 defalut base
$DEFAULT_BASE="dc=cdh,dc=com";

生成模板文件:
/usr/share/migrationtools/migrate_base.pl > /opt/base.ldif

而後,能夠修改該文件,而後執行導入命令:
ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f /opt/base.ldif
將當前節點上的用戶導入到 ldap 中,能夠有選擇的導入指定的用戶:
先添加用戶
useradd test

查找系統上的 test、hive 等用戶

grep -E "test" /etc/passwd  >/opt/passwd.txt
/usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif
ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f /opt/passwd.ldif

將用戶組導入到 ldap 中:
生成用戶組的 ldif 文件,而後導入到 ldap

grep -E "test" /etc/group  >/opt/group.txt
/usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif
ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f /opt/group.ldif

查詢
查詢新添加的 test 用戶:
ldapsearch -LLL -x -D 'cn=Manager,dc=cdh,dc=com' -w 111111 -b 'dc=cdh,dc=com' 'uid=admin'

dn: uid=test,ou=People,dc=cdh,dc=com
  objectClass: inetOrgPerson
  objectClass: posixAccount
  objectClass: shadowAccount
  cn: test account
  sn: test
uid: test
uidNumber: 1001
  gidNumber: 100
  homeDirectory: /home/test
  loginShell: /bin/bash

能夠看到,經過指定 ‘uid=test’,咱們只查詢這個用戶的數據,這個查詢條件叫作filter。有關 filter 的使用能夠查看 ldapsearch 的 manpage。

修改
用戶添加好之後,須要給其設定初始密碼,運行命令以下:

ldappasswd -x -D 'cn=Manager,dc=cdh,dc=com' -w 111111"uid=test,ou=People,dc=cdh,dc=com" -S

刪除
刪除用戶或組條目:

ldapdelete -x -w 111111 -D 'cn=Manager,dc=cdh,dc=com'"uid=test,ou=People,dc=cdh,dc=com"
ldapdelete -x -w 111111 -D 'cn=Manager,dc=cdh,dc=com'"cn=test,ou=group,dc=cdh,dc=com"

LDAP-HA配置(從節點)

安裝LDAP Server

同【3.1安裝】步驟:

yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -y
查看安裝的版本:
$ rpm -qa openldap
openldap-2.4.40-8.el7.x86_64
$ rpm -qa krb5-server-ldap
krb5-server-ldap-1.13.2-10.el7.x86_64

LDAP 服務端配置
更新配置庫:

rm -rf /var/lib/ldap/*
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /var/lib/ldap

在2.4之前的版本中,OpenLDAP 使用 slapd.conf 配置文件來進行服務器的配置,而2.4開始則使用 slapd.d 目錄保存細分後的各類配置,這一點須要注意,其數據存儲位置即目錄 /etc/openldap/slapd.d 。儘管該系統的數據文件是透明格式的,仍是建議使用 ldapadd, ldapdelete, ldapmodify 等命令來修改而不是直接編輯。
默認配置文件保存在 /etc/openldap/slapd.d,將其備份:

cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d.bak
chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

注意:若是是配置有問題須要重裝,上面兩句命令改爲下面三句:

rm -rf /etc/openldap/slapd.d
cp -r /etc/openldap/slapd.d.bak /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

啓動服務
啓動 LDAP 服務:

centos7啓動命令
systemctl start slapd
systemctl enable slapd

centos6啓動命令
chkconfig --add slapd
chkconfig --level 345 slapd on
/etc/init.d/slapd start

查看狀態,驗證服務端口
ps aux | grep slapd | grep -v grep

ldap      9225  0.0  0.2 581188 44576 ?        Ssl  15:13   0:00 /usr/sbin/slapd -h ldap:/// -u ldap

netstat -tunlp  | grep :389
  tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      8510/slapd
  tcp        0      0 :::389                      :::*                        LISTEN      8510/slapd

若是啓動失敗,則運行下面命令來啓動 slapd 服務並查看日誌:
$ slapd -h ldap://127.0.0.1 -d 481
待查明緣由以後,中止該進程使用正常方式啓動 slapd 服務。
導入基本的配置
添加一些基本配置,並引入 openldap 的ldif:
導入基本的Schema
cat /etc/openldap/slapd.conf

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema

pidfile     /var/run/openldap/slapd.pid
argsfile    /var/run/openldap/slapd.args

allow bind_v2
modulepath /usr/lib64/openldap
moduleload syncprov

# TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
# TLSCertificateFile /etc/pki/tls/certs/slapd.pem
# TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem

#########################################
# Main LDAP database #
#########################################
database bdb
suffix "dc=cdh,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=cdh,dc=com"
rootpw 111111

directory /var/lib/ldap

# Indices to maintain for this database 增長索引
index objectClass eq,pres       
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
index entryCSN,entryUUID eq

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
serverID    2

syncrepl rid=101
         provider=ldap://10.1.2.234
         type=refreshAndPersist     
         retry="60 +"       
         searchbase="dc=cdh,dc=com"     
         scope=sub
         schemachecking=on
         bindmethod=simple      
         binddn="cn=Manager,dc=cdh,dc=com"   
         credentials=111111     
mirrormode on

##################################################
# Database for the monitoring #
##################################################
database monitor

access to *
       by dn.exact="cn=Manager,dc=cdh,dc=com" read
       by * none

測試

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

注意

serverID    2   ##保證惟一

syncrepl rid=100        ##同步進程id,必須爲三位數
         provider=ldap://10.1.2.234 ##另外一節點的IP   
         type=refreshAndPersist     
         searchbase="dc=cdh,dc=com" ##BaseDn    
         scope=sub
         schemachecking=on
         bindmethod=simple      ##認證方式爲簡單模式
         binddn=" cn=Manager,dc=cdh,dc=com"  ##用戶名
         credentials=111111     ##密碼
         retry="60 +"        ##嘗試時間,切記之間有空格

刪除文件

[root@node1a220 ~]# cd /etc/openldap/slapd.d/cn\=config/
[root@node1a220 cn=config]# rm -rf olcDatabase={2}hdb.ldif
[root@node1a220 cn=config]# rm -rf olcDatabase={2}monitor.ldif

重啓服務

chown -R ldap.ldap /var/lib/ldap
systemctl restart slapd

LDAP HA 驗證
假設A節點有數據,而B節點無數據,配置安裝好後,那麼B節點會同步A節點的數據;或不管兩個節點的數據發生改變,兩個節點的數據會保持同步。
查詢A節點用戶是否同步到B節點:

$ ldapsearch -LLL -x -D 'cn=Manager,dc=cdh,dc=com' -w 111111 -b 'dc=cdh,dc=com''uid=test'
  dn: uid=test,ou=People,dc=cdh,dc=com
  objectClass: inetOrgPerson
  objectClass: posixAccount
  objectClass: shadowAccount
  cn: test account
  sn: test
uid: test
uidNumber: 1001
  gidNumber: 100
  homeDirectory: /home/test
  loginShell: /bin/bash

LDAP HA VIP配置

Keepalived安裝

使用Keepalived配置VIP(虛擬IP)實現LDAP HA,即對外提供VIP給用戶訪問LDAP,內部用Keepalived監控主從LDAP服務器狀態並實現VIP自動在LDAP主從服務器上的切換已達到LDAP HA的效果。
CentOS自帶了Keepalived,直yum install keepalived便可。若是是其它linux,須要下載keepalived rpm包,而後進行安裝。假設虛擬IP爲10.1.2.249.

Keepalived配置

KDC/LDAP A節點配置
修改keepalived的配置文件/etc/keepalived/keepalived.conf以下:

! Configuration File for keepalived
vrrp_script chk_http_port {
script "/etc/keepalived/chk_ldap_process.sh"   #進程檢測腳本
interval 5  # 腳本檢測時間間隔,單位秒
weight 0  #檢查失敗時權重遞減值

global_defs {
   router_id LVS_DEVEL #標識本節點的字條串,一般爲hostname 
}

vrrp_instance VI_1 {
    state BACKUP
    interface bond0     #節點綁定的網卡
    virtual_router_id 151  #取值在0-255之間,組播ID,組內同樣,同網不能重複
    priority 100   #優先級,數字越大優先級越高
    advert_int 1  #發送組播的間隔,默認1秒
    nopreempt  #不搶佔

    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    track_script {
    chk_http_port
    }
   
    virtual_ipaddress {
    10.1.2.249   #虛擬IP
    }
}
}

注意:#註釋內容實際配置文件中請刪除

監控LDAP服務進程腳本chk_ldap_process.sh,當LDAP服務進程不在時,中止keepalived進程,VIP會自動切換到另外一個LDAP服務器。
chk_ldap_process.sh內容以下:

#!/bin/bash
ldapPid=$(ps -ef |grep slapd|grep -v grep|awk '{print $2}'|grep -v PID)
#echo $ldapPid
if test  "$ldapPid" == ""; then
   systemctl stop keepalived
   exit 1   
else
   exit 0
fi

KDC/LDAP B節點配置
修改keepalived的配置文件/etc/keepalived/keepalived.conf以下:

! Configuration File for keepalived
vrrp_script chk_http_port {
script "/etc/keepalived/chk_ldap_process.sh"   #進程檢測腳本
interval 5  # 腳本檢測時間間隔,單位秒
weight 0

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface bond0     #節點綁定的網卡
    virtual_router_id 151  #虛擬路由標識,兩個節點必須一致
    priority 100   #優先級
    advert_int 1
    nopreempt

    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    track_script {
    chk_http_port
    }
   
    virtual_ipaddress {
    10.1.2.249   #虛擬IP
    }
}
}

注意:#註釋內容實際配置文件中請刪除

測試驗證 可使用以下步驟驗證LDAP HA。步驟以下: 一、主從兩個節點上啓動keepalived 先啓動keepalived命令:service keepalived start 二、A節點上查看虛擬IP狀況 使用命令:ip a 查看 發現虛擬IP綁定在LDAP A節點,由於KDC/LDAP A優先級高。 三、手動中止OpenLDAP A節點的ldap server,3s後OpenLDAP A節點的keepalived的server會中止,此時能夠查看OpenLDAP B節點(keepalived此時是開啓狀態)有虛擬IP。

相關文章
相關標籤/搜索