Ubuntu 24.04.1의 SOLR 9.6.1 및 Zookeeper 3.8.1에서 SSL 구성 문제 해결

Temp mail SuperHeros
Ubuntu 24.04.1의 SOLR 9.6.1 및 Zookeeper 3.8.1에서 SSL 구성 문제 해결
Ubuntu 24.04.1의 SOLR 9.6.1 및 Zookeeper 3.8.1에서 SSL 구성 문제 해결

Zookeeper 통합을 통해 SOLR에 SSL을 활성화하는 데 따른 과제

SOLR-Zookeeper 설정에서 SSL을 활성화하는 것은 까다로울 수 있으며, 특히 Ubuntu 24.04.1 서버로 작업할 때 더욱 그렇습니다. 이 구성 프로세스는 노드 간의 보안 통신을 보장하지만 사소한 구성 오류라도 SOLR Admin UI와 같은 서비스가 제대로 작동하지 못할 수 있습니다. 최근에 SSL 활성화를 시도하다가 문제가 발생했다면 혼자가 아닙니다.

이 기사에서는 로컬 Ubuntu 서버에서 Zookeeper 3.8.1과 통합될 때 SOLR 9.6.1에서 SSL 활성화 중에 직면하는 일반적인 문제를 살펴보겠습니다. 문제의 설정에는 단일 샤드, 다중 복제본 및 기본 인증을 사용하여 동일한 서버에서 SOLR 및 Zookeeper를 실행하는 것이 포함됩니다. SSL 설정을 업데이트한 후 발생하는 오류를 해결하는 데 중점을 둡니다.

SSL을 잘못 구성하면 로그 파일에 "관리 UI가 실행되지 않음" 또는 "깨진 파이프" 메시지와 같은 오류가 발생하는 경우가 많아 문제 해결이 어려울 수 있습니다. 이러한 오류는 일반적으로 SOLR 또는 Zookeeper 노드 내의 인증서 문제 또는 SSL 연결 실패로 인해 발생하며 이로 인해 서비스 간 통신이 중단됩니다.

다음 섹션에서는 로그 파일을 더 자세히 살펴보고 이러한 SSL 관련 오류의 잠재적 원인을 분석하며 SOLR 및 Zookeeper 설정을 위한 원활한 SSL 구성을 보장하는 단계별 솔루션을 제공합니다.

명령 사용예
keytool -genkeypair 이 명령은 키 저장소에서 키 쌍(공개 및 개인 키)을 생성하는 데 사용됩니다. SOLR 및 Zookeeper용 SSL 인증서를 생성하여 보안 통신을 보장하는 것이 중요합니다.
keytool -import -trustcacerts 그러면 신뢰할 수 있는 CA(인증 기관) 인증서를 키 저장소로 가져옵니다. 이는 SSL 설정에만 적용되며 시스템이 루트 및 중간 인증서를 신뢰할 수 있도록 합니다.
echo "ssl.client.enable=true" Zookeeper 구성 파일에 SSL 관련 구성을 반영하고 추가합니다. Zookeeper에서 SSL 클라이언트 통신을 활성화하는 데 사용됩니다.
keytool -list 이 명령은 키 저장소의 모든 항목을 나열합니다. 모든 인증서(루트, 중간, 서버)가 올바르게 추가되었고 SSL 사용에 사용할 수 있는지 확인하는 데에만 사용됩니다.
zkServer.sh restart 특히 SSL 관련 변경 후 업데이트된 구성으로 Zookeeper 서버를 다시 시작합니다. 이 명령을 사용하면 새 SSL 설정이 적용됩니다.
ssl.quorum.keyStore.location 키 저장소 파일을 가리키는 Zookeeper 관련 설정이 Zoo.cfg에 추가되었습니다. Zookeeper 노드 간의 쿼럼 통신을 위해 SSL 인증서가 올바르게 참조되는지 확인합니다.
ssl.quorum.trustStore.location 시스템이 Zookeeper 쿼럼의 다른 노드를 신뢰할 수 있도록 허용하는 신뢰 저장소 파일의 위치를 ​​정의하는 또 다른 Zookeeper 관련 구성입니다.
jetty-ssl.xml SOLR에서 사용하는 Jetty 관련 구성 파일입니다. 키 저장소 및 신뢰 저장소 경로와 같은 SSL 설정을 구성하여 SOLR이 HTTPS를 통해 안전하게 통신하도록 보장합니다.
monitor_ssl_logs() 이 Python 함수는 실패한 핸드셰이크와 같은 오류가 있는지 SSL 로그를 지속적으로 모니터링합니다. SOLR 및 Zookeeper의 SSL 연결 문제를 진단하는 데 매우 구체적입니다.

SOLR 및 Zookeeper에 대한 SSL 구성 및 스크립팅 분석

첫 번째 스크립트는 SSL 구성이 올바르게 적용되는지 확인하면서 SOLR 및 Zookeeper를 다시 시작하는 프로세스를 자동화합니다. Bash 스크립팅을 사용하여 Zookeeper 인스턴스를 반복하고 업데이트된 SSL 설정으로 다시 시작합니다. SSL 구성은 전체 클러스터에 균일하게 적용되어야 하므로 이 스크립트의 중요성은 여러 Zookeeper 노드를 관리하는 데 있습니다. 'zkServer.sh restart'를 사용하면 각 Zookeeper 노드가 해당 구성 파일로 올바르게 다시 시작되어 다중 노드 설정에서 클러스터 관리에 스크립트가 효율적으로 만들어집니다.

또한 이 스크립트는 `solr restart`를 사용하여 SOLR 인스턴스를 다시 시작하는 문제도 해결합니다. SOLR은 HTTPS 요청 처리를 위해 Jetty를 사용하며, 스크립트는 키 저장소 및 신뢰 저장소 경로와 같은 SSL 관련 설정이 올바르게 다시 로드되는지 확인합니다. 이렇게 하면 SOLR 관리 UI에 액세스할 때 오래되었거나 잘못 구성된 SSL 인증서로 인해 발생할 수 있는 잠재적인 SSL 핸드셰이크 오류를 방지할 수 있습니다. 이러한 작업을 자동화함으로써 스크립트는 특히 동일한 서버의 여러 서비스에서 SSL 인증서를 관리할 때 수동 오류를 최소화합니다.

두 번째 스크립트는 SOLR과 Zookeeper 모두에서 SSL용 Java KeyStore를 생성하고 관리하는 데 사용됩니다. Java의 Keytool 유틸리티는 키 쌍을 생성하고 인증서를 키 저장소로 가져오는 데 사용됩니다. 'keytool -genkeypair' 명령은 필요한 SSL 인증서를 생성하는 반면, 'keytool -import'는 신뢰할 수 있는 루트 및 중간 인증서를 추가하는 데 사용됩니다. 이러한 인증서는 노드 간의 SSL 통신이 신뢰할 수 있고 안전하다는 것을 보장합니다. 이 스크립트는 서비스 간의 보안 통신을 활성화하는 데 핵심적인 역할을 하는 SSL 인증서를 올바르게 설정하고 관리하는 데 중요합니다.

마지막으로, 제공된 Python 스크립트는 SSL 핸드셰이크 오류를 감지하도록 특별히 설계된 로그 모니터링 도구 역할을 합니다. 이 스크립트는 SSL 로그를 실시간으로 지속적으로 읽어 'SSL 핸드셰이크 실패'와 같은 SSL 관련 문제를 식별할 수 있습니다. 이 수준의 로깅은 Zookeeper 및 SOLR과 같은 서비스가 암호화된 채널을 통해 통신하는 복잡한 환경에서 문제를 진단하는 데 필수적입니다. 실시간 모니터링은 인증서 불일치, 잘못된 구성 또는 만료된 인증서로 인해 발생할 수 있는 SSL 실패의 근본 원인을 신속하게 식별하는 데 도움이 됩니다. 이 문제 해결 도구는 여러 노드와 SSL 복잡성이 있는 환경에서 특히 유용합니다.

SOLR 및 Zookeeper에서 SSL 구성 문제 처리

Bash 스크립팅을 사용하여 Ubuntu에서 SSL 구성으로 SOLR 및 Zookeeper 다시 시작 자동화

#!/bin/bash
# Script to automate SOLR and Zookeeper restart with SSL configuration
# Paths to configuration files
ZOOKEEPER_DIR="/opt/zookeeper"
SOLR_DIR="/opt/solr"
SSL_KEYSTORE="/opt/solr-9.6.1/server/etc/solr-ssl.jks"
ZOOKEEPER_CONFIG="$ZOOKEEPER_DIR/conf/zoo.cfg"
SOLR_CONFIG="$SOLR_DIR/server/etc/jetty-ssl.xml"

# Restart Zookeeper with SSL configuration
echo "Restarting Zookeeper..."
for i in {1..3}; do
    /bin/bash $ZOOKEEPER_DIR/bin/zkServer.sh restart $ZOOKEEPER_DIR/data/z$i/zoo.cfg
done

# Restart SOLR with SSL configuration
echo "Restarting SOLR..."
/bin/bash $SOLR_DIR/bin/solr restart -c -p 8983 -z localhost:2181,localhost:2182,localhost:2183 -m 5g -force

SOLR 및 Zookeeper에서 SSL용 Java 키 저장소 구성

JKS(Java KeyStore) 및 Keytool을 사용하여 SSL 인증서 생성 및 구성

#!/bin/bash
# Generate a keystore with a self-signed certificate
keytool -genkeypair -alias solr -keyalg RSA -keystore /opt/solr-9.6.1/server/etc/solr-ssl.jks

# Import intermediate and root certificates
keytool -import -trustcacerts -alias root -file /path/to/rootCA.pem -keystore /opt/solr-9.6.1/server/etc/solr-ssl.jks
keytool -import -trustcacerts -alias intermediate -file /path/to/intermediateCA.pem -keystore /opt/solr-9.6.1/server/etc/solr-ssl.jks

# Configure Zookeeper SSL settings
echo "ssl.client.enable=true" >> $ZOOKEEPER_DIR/conf/zoo.cfg
echo "ssl.quorum.keyStore.location=/opt/solr-9.6.1/server/etc/solr-ssl.jks" >> $ZOOKEEPER_DIR/conf/zoo.cfg
echo "ssl.quorum.trustStore.location=/opt/solr-9.6.1/server/etc/solr-ssl.jks" >> $ZOOKEEPER_DIR/conf/zoo.cfg

SSL 핸드셰이크 문제 해결 자동화

문제 해결을 위해 Python을 사용하여 SSL 핸드셰이크 로그 모니터링

import subprocess
import time

def monitor_ssl_logs(log_file):
    with open(log_file, 'r') as f:
        f.seek(0, 2)  # Move to the end of file
        while True:
            line = f.readline()
            if not line:
                time.sleep(0.1)
                continue
            if "SSL handshake failed" in line:
                print(f"Error: {line.strip()}")

# Start monitoring Zookeeper SSL logs
monitor_ssl_logs("/opt/zookeeper/logs/zookeeper.log")

SOLR 및 Zookeeper의 SSL 핸드셰이크 및 구성 복잡성

SOLR 및 Zookeeper에서 SSL을 활성화할 때 해결해야 할 중요한 측면 중 하나는 SSL 핸드셰이크 프로세스가 작동합니다. 핸드셰이크에는 클라이언트와 서버 간의 인증서 교환이 포함되어 암호화된 데이터 전송이 시작되기 전에 신뢰를 확인합니다. SOLR 및 Zookeeper 구성 모두에서 인증서가 올바르게 설정되지 않은 경우 문제가 자주 발생합니다. 예를 들어, 일치하지 않는 인증서 체인이나 키 저장소 비밀번호로 인해 시스템이 SSL 연결을 성공적으로 시작하지 못할 수 있습니다. SOLR은 SSL 통신 관리를 위해 Jetty를 사용하므로 Jetty 구성이 키 저장소 설정과 동기화되어 있는지 확인하는 것이 중요합니다.

또 다른 일반적인 과제는 특히 Zookeeper 쿼럼에서 여러 노드에 걸쳐 SSL을 설정하는 것입니다. 여러 Zookeeper 노드를 사용하는 경우 SSL 구성은 모든 서버에서 일관되어야 클라이언트 간 및 서버 간 통신이 안전하게 가능해야 합니다. 각 노드에는 동일한 키 저장소와 신뢰 저장소 설정은 물론 다음과 같은 동일한 SSL 프로토콜이 있어야 합니다. TLSv1.2. 이러한 구성은 `zoo.cfg` 파일에 있습니다. 문제 시나리오에서 볼 수 있듯이 노드 간의 불일치로 인해 "깨진 파이프" 또는 "소켓이 닫혔습니다" 오류와 같은 문제가 발생할 수 있습니다.

또한 Zookeeper가 SSL을 활성화한 상태에서 쿼럼 통신을 처리하는 방법을 고려하는 것도 중요합니다. `ssl.quorum.enabledProtocols`를 설정하면 TLS와 같은 신뢰할 수 있는 프로토콜을 통해 Zookeeper 노드 간의 보안 통신이 발생하도록 할 수 있습니다. 또한 호스트 이름이 일치하지 않으면 SSL 핸드셰이크가 중단될 수 있으므로 Zookeeper 노드가 호스트 이름이 아닌 IP로 참조되는 경우 `ssl.quorum.hostnameVerification=false`를 유지해야 할 수 있습니다. 이러한 설정을 미세 조정하면 분산 설정 전체의 보안 통신을 크게 향상시킬 수 있습니다.

SOLR 및 Zookeeper SSL 구성에 대한 일반적인 질문 및 문제 해결

  1. SOLR 키 저장소의 목적은 무엇입니까?
  2. SOLR의 키 저장소에는 서버와 클라이언트 간의 암호화된 통신에 사용되는 SSL 인증서와 개인 키가 포함되어 있습니다. 다음을 사용하여 생성할 수 있습니다. keytool.
  3. SSL 구성이 변경된 후 Zookeeper를 어떻게 다시 시작합니까?
  4. SSL 변경 사항을 적용하려면 다음 명령을 사용하여 Zookeeper를 다시 시작하십시오. /bin/bash zkServer.sh restart zoo.cfg 클러스터의 각 노드에 대해.
  5. Zookeeper에서 `ssl.client.enable=true`는 무엇을 합니까?
  6. `zoo.cfg`의 이 설정은 Zookeeper 클라이언트와 Zookeeper 서버 간의 SSL 통신을 활성화합니다.
  7. SSL을 활성화한 후 SOLR 관리 UI가 로드되지 않는 이유는 무엇입니까?
  8. 일반적인 원인 중 하나는 SSL 인증서 체인의 불일치입니다. 올바른 키 저장소와 신뢰 저장소가 구성되어 있는지 확인하십시오. solr.in.sh 그리고 Jetty의 구성 파일.
  9. "SSL/TLS 레코드가 아님" 오류를 해결하려면 어떻게 해야 합니까?
  10. 이 오류는 SSL이 아닌 데이터가 SSL 연결을 통해 전송될 때 발생합니다. SOLR과 Zookeeper가 모두 동일한 SSL 프로토콜을 사용하도록 올바르게 구성되었는지 확인하십시오. TLSv1.2.

SOLR 및 Zookeeper 보안에 대한 최종 생각

Zookeeper를 사용하여 SOLR의 SSL 문제를 해결하려면 키 저장소, 신뢰 저장소 및 SSL 프로토콜과 같은 SSL 매개변수를 올바르게 구성하는 데 집중하세요. 이러한 단계를 통해 모든 노드와 클라이언트에서 보안 통신이 안정적으로 유지됩니다.

프로세스 중에 오류 및 경고가 있는지 로그 파일을 모니터링하는 것이 중요합니다. 모든 SSL 관련 구성이 클러스터 노드 전체에서 일관되고 SSL 표준을 준수하도록 하여 "깨진 파이프" 및 SSL 핸드셰이크 실패와 같은 문제를 해결합니다.

참고자료 및 출처
  1. SOLR 및 Zookeeper에서 SSL 구성에 대한 설명은 공식 Solr 문서를 기반으로 했습니다. Apache Solr 가이드
  2. SSL 문제에 대한 문제 해결 단계는 Zookeeper 설명서에서 파생되었습니다. 사육사 공식 문서
  3. Java SSL 소켓 구성에 대한 추가 세부 정보는 다음에서 참조되었습니다. Oracle JSSE 참조 가이드