Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

37장. 항목 프로비저닝을 위한 성능 튜닝

일반적인 워크플로우를 사용하여 많은 수의 항목을 추가합니다(예: 사용자 추가의 경우 11장. 사용자 계정 관리 ) 매우 느려질 수 있습니다. 이 장에서는 프로비저닝이 가능한 한 빨리 완료되도록 프로세스를 조정하는 방법을 설명합니다.
절차의 일부로 다음을 수행합니다.
  • IdM(Identity Management)은 LDIF 파일에서 프로비저닝할 항목을 읽은 다음 대상 IdM LDAP 인스턴스로 가져옵니다.
  • 관리자는 캐시 크기와 같은 특정 속성에 대한 사용자 지정 값을 설정하고 MemberOf 및 Schema 호환성 플러그인을 비활성화합니다. 이 절차에는 MemberOf를 비활성화하기 위해 프로비저닝된 항목에서 fixup-memberof.pl 플러그인을 실행하는 작업이 포함됩니다.
이 절차는 사용자, 사용자 그룹, 호스트, 호스트 그룹, sudo 규칙 및 HBAC(Host-based Access Control) 규칙의 입력 유형을 프로비저닝하도록 설계 및 테스트되었습니다.

프로비저닝을 위한 권장 사항 및 사전 요구 사항

권장 사항:
  • 다수의 항목(10,000 이상)을 프로비저닝할 때 LDAP 클라이언트가 항목이 프로비저닝되거나 서버의 정보를 사용하는 서버에 액세스하는 것을 허용하지 마십시오. 예를 들어 서버에서 포트 389 및 636을 비활성화하고 LDAPI를 사용하여 Unix 소켓을 통해 작업할 수 있습니다.
    이유: MemberOf 플러그인이 서버에서 비활성화되어 있으므로 서버의 멤버십 정보가 유효하지 않습니다.
  • 프로비저닝 중에 실행할 필요가 없는 애플리케이션을 중지합니다.
    이유: 이렇게 하면 시스템의 메모리를 최대한 확보할 수 있습니다. 사용 가능한 메모리는 파일 시스템 캐시에서 사용하므로 프로비저닝 성능이 향상됩니다.
    아래 절차에는 IdM 서비스를 중지하고, Directory Server(DS) 인스턴스만 다시 시작하는 단계가 이미 포함되어 있습니다. IdM 서비스, 특히 tomcat 은 많은 메모리를 사용하지만 프로비저닝 중에는 사용되지 않습니다.
  • 서버가 하나만 있는 새로운 IdM 배포에서 절차를 실행합니다. 프로비저닝이 완료된 후에만 복제본을 생성합니다.
    이유: 프로비저닝 처리량은 복제보다 훨씬 빠릅니다. 서버가 하나 이상 있는 배포에서는 복제본에 대한 정보가 상당히 오래되었습니다.
사전 요구 사항:
  • 프로비저닝할 항목이 포함된 LDIF 파일을 생성합니다. 예를 들어 기존 IdM 배포를 마이그레이션하는 경우 ldapsearch 유틸리티를 사용하여 모든 항목을 내보내서 LDIF 파일을 생성합니다.
    LDIF 형식에 대한 자세한 내용은 Red Hat Directory Server 10 관리 가이드의 LDIF 파일 형식 정보를 참조하십시오.

현재 DS 튜닝 매개 변수 값 백업

  1. DS 튜닝 매개변수의 현재 값을 검색합니다.
    • 데이터베이스 캐시 크기 및 데이터베이스 잠금:
      # ldapsearch -D "cn=directory manager" -w secret -b "cn=config,cn=ldbm database,cn=plugins,cn=config" nsslapd-dbcachesize nsslapd-db-locks
      
      ...
      nsslapd-dbcachesize: 10000000
      nsslapd-db-locks: 50000
      ...
    • 입력 캐시 크기 및 DN 캐시 크기:
      # ldapsearch -D "cn=directory manager" -w secret -b "cn=userRoot,cn=ldbm database,cn=plugins,cn=config" nsslapd-cachememsize nsslapd-dncachememsize
      
      ...
      nsslapd-cachememsize: 10485760
      nsslapd-dncachememsize: 10485760
      ...
  2. 가져온 값을 기록합니다. 배포를 완료한 후 매개 변수를 다시 이러한 값으로 재설정합니다.

데이터베이스, 도메인 항목 및 DN 캐시 크기 조정

데이터베이스 캐시 크기의 경우:
  1. 필요한 값을 확인합니다.
    권장 값은 일반적으로 200MB에서 500MB 사이입니다. 사용 사례에 적합한 값은 시스템에서 사용 가능한 메모리에 따라 다릅니다.
    • 8GB 이상의 메모리 → 500MB
    • 8GB - 메모리 4GB → 200MB
    • 메모리 4GB 미만 → 100MB
  2. 이 템플릿을 사용하여 결정된 값을 설정합니다.
    dn: cn=config,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-dbcachesize
    nsslapd-dbcachesize: db_cache_size_in_bytes
    ldapmodify 유틸리티를 사용하여 LDAP 속성을 수정하는 예는 예 37.1. “ldapmodify 를 사용하여 LDAP 속성 변경” 를 참조하십시오.

예 37.1. ldapmodify 를 사용하여 LDAP 속성 변경

  1. ldapmodify 명령을 실행한 다음, 특성 값을 수정할 문을 추가합니다. 예를 들어 다음과 같습니다.
    # ldapmodify -D "cn=directory manager" -w secret -x
    dn: cn=config,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-dbcachesize
    nsslapd-dbcachesize: 200000000
  2. Ctrl+D 눌러 변경 사항을 확인하고 서버에 보냅니다. 작업이 성공적으로 완료되면 다음 메시지가 표시됩니다.
    modifying entry "cn=config,cn=ldbm database,cn=plugins,cn=config"
도메인 항목 캐시 크기의 경우 다음을 수행합니다.
  1. 필요한 값을 확인합니다.
    권장 값은 100MB에서 400MB 사이입니다. 적절한 값은 시스템에서 사용 가능한 메모리에 따라 다릅니다.
    • 4GB 이상의 메모리 → 400MB
    • 2GB - 메모리 4GB → 200MB
    • 2GB 이상의 메모리 → 100MB 미만
    큰 정적 그룹을 프로비저닝하는 경우 항목 캐시가 모든 항목(그룹 및 멤버)에 맞게 충분히 큰 것이 좋습니다.
  2. 이 템플릿을 사용하여 결정된 값을 설정합니다.
    dn: cn=userRoot,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-cachememsize
    nsslapd-cachememsize: entry_cache_size_in_bytes
DN(도메인 이름) 캐시 크기의 경우 다음을 수행합니다.
  1. 가능한 최상의 성능을 위해 DN 캐시가 프로비저닝된 항목의 모든 DN에 맞는 것이 좋습니다. 사용 사례에 적합한 값을 추정하려면 다음을 수행합니다.
    1. 파일에서 모든 DN 항목 수를 확인합니다. DN 항목은 dn: 로 시작하는 행에 있습니다. 예를 들어 # grep,sed, wc 를 사용합니다.
      # grep '^dn: ' ldif_file | sed 's/^dn: //' | wc -l
      92200
    2. LDIF 파일에서 모든 DN 항목 문자열의 크기를 확인합니다.
      # grep '^dn: ' ldif_file | sed 's/^dn: //' | wc -c
      9802460
    3. 평균 DN 크기 가져오기: 모든 DN 입력 문자열의 크기를 파일의 모든 DN 항목 수로 나눕니다.
      예를 들어 다음과 같습니다. 9,802,460 / 92,200 ≈ 106
    4. 평균 메모리 크기: 평균 DN 크기를 2만큼 여러 개 가져온 다음 결과에 32를 추가합니다.
      예를 들어 다음과 같습니다. (106 * 2) + 32 = 244
    5. 적절한 DN 캐시 크기를 가져오기: 평균 메모리 크기를 LDIF 파일의 전체 DN 항목 수에 곱합니다.
      예를 들어 다음과 같습니다. 244 * 92,200 = 22,496,800
  2. 이 템플릿을 사용하여 결정된 값을 설정합니다.
    dn: cn=userRoot,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    Replace: nsslapd-dncachememsize
    Nsslapd-dncachememsize: dn_cache_size

불필요한 서비스 비활성화 및 데이터베이스 잠금 조정

  1. MemberOf 및 Schema 호환성 플러그인을 비활성화합니다.
    dn: cn=MemberOf Plugin,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: off
    dn: cn=Schema Compatibility,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: off
    MemberOf를 비활성화하면 프로비저닝 속도가 훨씬 빨라집니다. 스키마 호환성을 비활성화하면 작업 기간도 줄일 수 있습니다.
    ldapmodify 유틸리티를 사용하여 LDAP 속성을 수정하는 예는 예 37.1. “ldapmodify 를 사용하여 LDAP 속성 변경” 를 참조하십시오.
  2. 토폴로지에 복제본이 설치되어 있지 않은 경우 ( “프로비저닝을 위한 권장 사항 및 사전 요구 사항”에서 권장) Content Synchronization and Retro Changelog 플러그인을 비활성화합니다.
    dn: cn=Content Synchronization,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: off
    dn: cn=Retro Changelog Plugin,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: off
    이러한 추가 플러그인을 비활성화하면 프로비저닝의 성능이 향상됩니다.
  3. IdM 서버를 중지합니다. 이렇게 하면 DS 인스턴스도 중지됩니다.
    # ipactl stop
    다음 단계에서 데이터베이스 잠금 수를 설정하려면 DS를 중지해야 합니다. 나중에 다시 시작합니다.
  4. 데이터베이스 잠금 수를 조정합니다. 적절한 값은 프로비저닝된 항목 수의 절반과 같습니다.
    • 최소 값은 10,000입니다.
    • 최대 값은 200,000입니다.
    DS가 중지되었으므로 /etc/dirsrv/slapd-EXAMPLE-COM/dse.ldif 파일을 수정하여 값을 설정해야 합니다.
    dn: cn=config,cn=ldbm database,cn=plugins,cn=config
    ...
    nsslapd-db-locks: db_lock_number
    IdM은 컴퓨팅 멤버십 시 다수의 데이터베이스 페이지에 액세스합니다. 페이지에 액세스할수록 배포에 더 많은 잠금이 필요합니다.
  5. DS를 시작하십시오.
    # systemctl start dirsrv.target

항목 가져오기

새 항목을 LDIF 파일에서 IdM LDAP 인스턴스로 가져오려면 다음을 수행합니다. 예를 들어 ldapadd 유틸리티를 사용합니다.
# ldapadd -D "binddn" -y password_file -f ldif_file
ldapadd 사용에 대한 자세한 내용은 ldapadd(1) 도움말 페이지를 참조하십시오.

비활성화된 서비스 다시 활성화 및 원래 속성 값 복구

  1. MemberOf 활성화:
    dn: cn=MemberOf Plugin,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: on
    ldapmodify 유틸리티를 사용하여 LDAP 속성을 수정하는 예는 예 37.1. “ldapmodify 를 사용하여 LDAP 속성 변경” 를 참조하십시오.
  2. DS를 다시 시작하십시오.
    # systemctl restart dirsrv.target
    이전 단계에서 MemberOf를 활성화했기 때문에 이 시점에서 DS를 다시 시작해야 합니다.
  3. (objectClass=*) 필터를 사용하여 fixup-memberof.pl 스크립트를 실행하여 모든 프로비저닝된 항목에서 memberOf 속성을 다시 생성하고 업데이트합니다. 예를 들어 다음과 같습니다.
    # fixup-memberof.pl -D "cn=directory manager" -j password_file -Z server_id -b "suffix" -f "(objectClass=*)" -P LDAP
    항목을 가져올 때 MemberOf 플러그인이 비활성화되어 있었기 때문에 fixup-memberof.pl 을 실행해야 합니다. 프로비저닝을 계속하려면 스크립트가 성공적으로 완료해야 합니다.
    fixup-memberof.pl 에 대한 자세한 내용은 fixup-memberof.pl(8) 매뉴얼 페이지를 참조하십시오.
  4. 스키마 호환성 플러그인을 활성화합니다.
    dn: cn=Schema Compatibility,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: on
  5. “불필요한 서비스 비활성화 및 데이터베이스 잠금 조정” 에서 콘텐츠 동기화 및 Retro Changelog 플러그인을 비활성화한 경우 다시 활성화합니다.
    dn: cn=Content Synchronization,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: on
    dn: cn=Retro Changelog Plugin,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: on
  6. 데이터베이스 캐시, 항목 캐시, DN 캐시의 원래 값을 “현재 DS 튜닝 매개 변수 값 백업” 에서 백업합니다.
    dn: cn=config,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-dbcachesize
    nsslapd-dbcachesize: backup_db_cache_size
    
    dn: cn=userRoot,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    Replace: nsslapd-dncachememsize
    Nsslapd-dncachememsize: backup_dn_cache_size
    -
    replace: nsslapd-cachememsize
    nsslapd-cachememsize: backup_entry_cache_size
  7. DS 중지:
    # systemctl stop dirsrv.target
  8. 데이터베이스 잠금의 원래 값을 “현재 DS 튜닝 매개 변수 값 백업” 백업합니다. DS가 중지되었으므로 /etc/dirsrv/slapd-EXAMPLE-COM/dse.ldif 파일을 수정하여 값을 설정해야 합니다.
    dn: cn=config,cn=ldbm database,cn=plugins,cn=config
    ...
    nsslapd-db-locks: backup_db_lock_number
  9. IdM 서버를 시작합니다.
    # ipactl start
    이렇게 하면 DS를 포함한 모든 IdM 서비스가 시작됩니다.