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