目录
Part.01 关于HDP
Part.02 核心组件原理
Part.03 资源规划
Part.04 基础环境配置
Part.05 Yum源配置
Part.06 安装OracleJDK
Part.07 安装MySQL
Part.08 部署Ambari集群
Part.09 安装OpenLDAP
Part.10 创建集群
Part.11 安装Kerberos
Part.12 安装HDFS
Part.13 安装Ranger
Part.14 安装YARN+MR
Part.15 安装HIVE
Part.16 安装HBase
Part.17 安装Spark2
Part.18 安装Flink
Part.19 安装Kafka
Part.20 安装Flume
九、安装OpenLDAP
1.安装
Server端
在hdp01、hdp02上安装
bash
ansible nn -m yum -a 'name=openldap-servers state=present'
ansible nn -m yum -a 'name=migrationtools state=present'
Client端
在hdp01-05上安装
bash
ansible all -m yum -a 'name=openldap-clients state=present'
2.配置并启动
OpenLDAP的配置以树状结构存储在OpenLDAP数据库中,这些节点的配置文件以ldif格式存储在/etc/openldap/slapd.d目录下(从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件)
① cn=config
根节点用于全局性配置,它的配置文件是/etc/openldap/slapd.d/cn=config.ldif
② cn=module{0},cn=config
用于配置动态模块,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下
③ cn=schema,cn=config
用于schema配置,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下
④ olcDatabase={X},cn=config
用于配置数据库,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下
以下所有内容在hdp01和hdp02上均进行操作
(1)修改olcDatabase={2}hdb.ldif文件
/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
查看密码对应的md5值
bash
slappasswd -h {md5} -s "lnyd@LNsy115"
修改olcDatabase={2}hdb.ldif文件,将管理员密码的md5值增加到此文件中
其中cn=admin中的admin表示OpenLDAP管理员的用户名,可将cn和dc按照实际情况修改,而olcRootPW表示OpenLDAP管理员的密码。
bash
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=hdp315,dc=com
olcRootDN: cn=admin,dc=hdp315,dc=com
olcRootPW: {MD5}WL8F9lXqbxOxR0xwaIG9Jg==
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 22848b60-4563-103d-8500-c5b20ff267b6
creatorsName: cn=config
createTimestamp: 20230220120913Z
entryCSN: 20230220120913.754062Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230220120913Z
(2)修改olcDatabase={1}monitor.ldif文件
/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
将dn.base中OpenLDAP管理员的相关信息修改为{2}hdb.ldif中相同的内容
bash
dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=admin,dc=hdp315,dc=com" read by * none
structuralObjectClass: olcDatabaseConfig
entryUUID: 2284858e-4563-103d-84ff-c5b20ff267b6
creatorsName: cn=config
createTimestamp: 20230220120913Z
entryCSN: 20230220120913.753913Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230220120913Z
(3)修改olcDatabase={0}config.ldif文件
/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
增加olcRootDN和olcRootPW项
bash
dn: olcDatabase={0}config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" manage by * none
olcRootDN: cn=config
olcRootPW: {MD5}WL8F9lXqbxOxR0xwaIG9Jg==
structuralObjectClass: olcDatabaseConfig
entryUUID: 228480e8-4563-103d-84fe-c5b20ff267b6
creatorsName: cn=config
createTimestamp: 20230220120913Z
entryCSN: 20230220120913.753793Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230220120913Z
(4)验证LDAP基本配置
对上述配置进行测试验证
bash
slaptest -u
(5)启动
启动LDAP程序
bash
systemctl start slapd
systemctl status slapd
LDAP默认监听端口为389,通过netstat进行验证
bash
netstat -tunalp | grep 389
3.配置数据库
Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAP的Schema定义了LDAP目录所应遵循的结构和规则,被LDAP服务器识别。schema是一个标准,定义了ldap的对象和属性,也就是ldap能够存储什么数据,数据有什么属性等。
以下操作在hdp01和hdp02上均进行。
(1)导入基础schema
从/etc/openldap/schema/中导入3个基础的schema
bash
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
(2)修改migrate_common.ph文件
migrate_common.ph文件主要是用于生成ldif文件使用
bash
vim /usr/share/migrationtools/migrate_common.ph
修改内容如下
bash
$DEFAULT_MAIL_DOMAIN = "hdp315.com";
$DEFAULT_BASE = "dc=hdp315,dc=com";
$EXTENDED_SCHEMA = 1;
4.启用HA
本次配置采用MirrorMode方式。
(1)mod_syncprov.ldif
在hdp01和hdp02上,创建mod_syncprov.ldif文件,ldap双主复制功能的实现依赖于syncprov模块,这个模块位于/usr/lib64/openldap目录下
/etc/openldap/syncprov_mod.ldif
bash
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
加载模块
bash
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/syncprov_mod.ldif
(2)syncprov.ldif
在hdp01和hdp02上,创建syncprov.ldif文件,导入同步配置日志信息,/etc/openldap/syncprov_enable.ldif
bash
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 1 1
olcSpSessionLog: 32767
olcSpCheckpoint:表示当修改1条或者1分钟时,以实现实时同步
olcSpSessionLog:session log会话日志条目的最大数量
加载模块
bash
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/syncprov_enable.ldif
(3)master_node_1.ldif
在hdp01上,创建master_node_1.ldif文件,/etc/openldap/master_node_1.ldif
(注:每个dn属于u一部分,上面需要加一个空行,否则会报错)
2个主节点属性olcServerID的值不能相同,provider指向对方
provider:同步来源,也就是主节点,可以包含多个主节点
binddn:主节点管理账户
credentials主节点管理账户密码
searchbase:根目录
bash
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 0
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://hdp02.hdp.com:389/
bindmethod=simple
binddn="cn=admin,dc=hdp315,dc=com"
credentials=lnyd@LNsy115
searchbase="dc=hdp315,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
注:credentials为其他主节点的密码,只能用明文,不能用md5加密等格式
加载生效
bash
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/master_node_1.ldif
(4)master_node_2.ldif
在hdp02上,创建master_node_2.ldif文件,/etc/openldap/master_node_2.ldif
bash
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://hdp01.hdp.com:389/
bindmethod=simple
binddn="cn=admin,dc=hdp315,dc=com"
credentials=lnyd@LNsy115
searchbase="dc=hdp315,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
加载生效
bash
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/master_node_2.ldif
(5)KeepAlived+HAProxy
① 安装
在hdp04和hdp05安装keepalived和HAProxy服务
bash
yum install -y haproxy keepalived
② 配置HAProxy
在hdp04和hdp05上,修改配置文件,/etc/haproxy/haproxy.cfg
bash
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend tcp_389_openldap
bind *:389
mode tcp
stats uri /haproxy?stats
default_backend tcp_389_openldap
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend tcp_389_openldap
mode tcp
balance roundrobin
server server1 hdp01.hdp.com:389 check weight 100
server server2 hdp02.hdp.com:389 check weight 1
启动keepalived服务
bash
systemctl start haproxy
systemctl status haproxy
③ 配置KeepAlived
在hdp04上,修改配置文件,/etc/keepalived/keepalived.conf
bash
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id hdp04.hdp.com
script_user root
enable_script_security
}
vrrp_script chk_ha_port {
script "/etc/keepalived/chk_ha.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface ens192
virtual_router_id 128
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.111.222
}
track_script {
chk_ha_port
}
}
在hdp05上,修改配置文件,/etc/keepalived/keepalived.conf
bash
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id hdp05.hdp.com
script_user root
enable_script_security
}
vrrp_script chk_ha_port {
script "/etc/keepalived/chk_ha.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 128
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.111.222
}
track_script {
chk_ha_port
}
}
监测脚本,/etc/keepalived/chk_ha.sh
bash
#!/bin/bash
counter=$(ps -C haproxy --no-heading | wc -l)
if [ "${counter}" = "0" ]; then
systemctl start haproxy
sleep 1
counter=$(ps -C haproxy --no-heading | wc -l)
if [ "${counter}" = "0" ]; then
systemctl stop keepalived
fi
fi
启动keepalived服务
bash
systemctl start keepalived
systemctl status keepalived
在hdp04上查看ens192端口上的IP增加了192.168.111.222
bash
ip a
测试切换的时候,可以将chk_ha.sh中的启动haproxy注释掉,防止再次被拉起
5.添加用户及用户组
默认情况下OpenLDAP是没有普通用户的,但是有一个管理员用户。
(1)创建ldif模板
现在需要Linux系统中的用户tenant1,添加到OpenLDAP中。
bash
useradd tenant1
echo "Aa123456" | passwd --stdin tenant1
提取tenant1的信息
bash
grep -E "tenant1[^.]" /etc/passwd > /root/users
grep -E "tenant1[^.]" /etc/group > /root/groups
cat /root/users /root/groups
根据上述生成的用户和用户组属性,使用migrate_passwd.pl文件生成要添加用户和用户组的ldif(可以从/etc/passwd、/etc/shadow、/etc/groups中生成ldif更新ldap数据库,需要用到migrationtools工具)
bash
/usr/share/migrationtools/migrate_passwd.pl /root/users > /root/template.ldif
/usr/share/migrationtools/migrate_group.pl /root/groups >> /root/template.ldif
cat /root/template.ldif
在模板的末尾添加
bash
memberUid: uid=tenant1,ou=People,dc=hdp315,dc=com
后续如果要新加用户到OpenLDAP中的话,可以直接修改template.ldif文件即可。
注:增加LDAP用户,无需在OS层面添加用户,tenant1的添加只是为了生成ldif模板
(2)初始化
在hdp01上,创建/etc/openldap/base.ldif文件,先创建hdp315这个organization(简称O),然后在其下面创建三个OU:
ou=People,dc=hdp315,dc=com用于存放用户账号
ou=services,dc=hdp315,dc=com用户存放服务账号
ou=Group,dc=hdp315,dc=com用户存放组账号
bash
dn: dc=hdp315,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: hdp315
dn: cn=admin,dc=hdp315,dc=com
objectClass: organizationalRole
cn: admin
description: Directory Admin
dn: ou=People,dc=hdp315,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=services,dc=hdp315,dc=com
objectclass: organizationalUnit
ou: services
dn: ou=Group,dc=hdp315,dc=com
objectClass: organizationalUnit
ou: Group
导入
bash
ldapadd -x -D "cn=admin,dc=hdp315,dc=com" -w "lnyd@LNsy115" -f /etc/openldap/base.ldif
(3)添加账号
使用管理员账号admin添加普通用户tenant1到LDAP中,其中-D指定了管理员账号去执行,-w为管理员账号的口令
bash
ldapadd -x -w "lnyd@LNsy115" -D "cn=admin,dc=hdp315,dc=com" -f /root/template.ldif
(4)确认账号信息
使用ldapsearch查询全部用户信息
bash
ldapsearch -x -H ldap://hdp01.hdp.com:389 -b 'ou=People,dc=hdp315,dc=com'
(5)HA同步情况确认
在hdp01上创建的tenant1用户,在hdp02的LDAP上查询
bash
ldapsearch -x -H ldap://hdp01.hdp.com:389 -b 'ou=People,dc=hdp315,dc=com' 'uid=tenant1'
ldapsearch -x -H ldap://hdp02.hdp.com:389 -b 'ou=People,dc=hdp315,dc=com' 'uid=tenant1'
ldapsearch -x -H ldap://192.168.111.222:389 -b 'ou=People,dc=hdp315,dc=com' 'uid=tenant1'
关闭hdp01上的slapd程序,测试是否负载至hdp02上
6.部署web服务
在hdp01上分别进行Yum安装phpldapadmin服务
bash
yum install -y phpldapadmin
yum安装完phpldapadmin后会默认在/etc/httpd/conf.d加入,修改配置文件/etc/httpd/conf.d/phpldapadmin.conf
bash
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
# Apache 2.4
#Require local
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
修改phpldapadmin的设置,首先备份配置文件
bash
cp /etc/phpldapadmin/config.php /etc/phpldapadmin/config.php.bak.20230222
/etc/phpldapadmin/config.php,修改内容如下:
bash
#注释掉以下行
#287行
#$servers->newServer('ldap_pla');
#291行
#$servers->setValue('server','name','Local LDAP Server');
#388行
#$servers->setValue('appearance','pla_password_hash','');
#398行
#$servers->setValue('login','attr','uid');
#取消注释并增加以下行,537行开始
$servers->newServer('ldap_pla');
$servers->setValue('server','name','hdp01 Server');
$servers->setValue('server','host','192.168.111.201');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=hdp315,dc=com'));
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=admin,dc=hdp315,dc=com');
$servers->setValue('login','bind_pass','lnyd@LNsy115');
$servers->setValue('login','anon_bind',false); !此行为新增
$servers->setValue('server','tls',false);
$servers->newServer('ldap_pla');
$servers->setValue('server','name','hdp02 Server');
$servers->setValue('server','host','192.168.111.202');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=hdp315,dc=com'));
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=admin,dc=hdp315,dc=com');
$servers->setValue('login','anon_bind',false);
$servers->setValue('login','bind_pass','lnyd@LNsy115');
重启httpd服务
bash
systemctl restart httpd
systemctl status httpd
访问页面http://192.168.111.201/phpldapadmin,可以分别选择不同的OpenLDAP Server进行登录,用户名为在config.php中设置的内容
在hdp02上进行同样的部署,然后对页面进行HA高可用。