• LDAP-HA安装与配置(Keepalived方式实现)


    LDAP部署

    安装LDAP(主节点)

    安装LDAP Server

    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 服务。
    导入基本的配置
    导入基本的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 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
    

    删除文件

    [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
    

    创建数据库
    数据库没有数据,需要添加数据,你可以手动编写 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。步骤如下:
    1、主从两个节点上启动keepalived
    先启动keepalived命令:service keepalived start
    2、A节点上查看虚拟IP情况
    使用命令:ip a 查看
    发现虚拟IP绑定在LDAP A节点,因为KDC/LDAP A优先级高。
    3、手动停止OpenLDAP A节点的ldap server,3s后OpenLDAP A节点的keepalived的server会停止,此时可以查看OpenLDAP B节点(keepalived此时是开启状态)有虚拟IP。

  • 相关阅读:
    python线程、线程池
    day10 知识点
    socketserver 进阶之I/O多路复用
    socketserver
    socket
    设计模式
    剑指offer:整数中1出现的次数
    剑指offer:二叉搜索树与双向链表
    剑指offer:扑克牌顺子
    剑指offer:孩子们的游戏(圆圈中最后剩下的数)
  • 原文地址:https://www.cnblogs.com/xiaodf/p/10689928.html
Copyright © 2020-2023  润新知