elasticsearch 배포

5163 단어 Elasticsearch
홈페이지에 가서 ES 원본 패키지를 다운로드하는 것을 추천합니다. 개인적으로 yum 등 패키지 관리 도구를 통해 설치하는 것보다 유연하고 관리하기 편합니다. 예를 들어
  • 디렉터리는 독립적으로 제어할 수 있고 구성이 편리하다
  • 플러그인 설치가 편리함
  • 동의어 등 어구 라이브러리 유지보수
  • ##ES 장기 운행
    프로세스 관리 도구를 사용하여 ES를 실행하는 것을 추천합니다. 여기에서supervisor를 사용하여es를supervisor의 하위 프로세스로 실행합니다.

    supervisord 구성

    [supervisord]
    ; ....
    nodaemon=false               ; (start in foreground if true;default false)
    
    [program:elk_01]
    directory=/yikaoyan/elasticsearch-7.2.1
    command=/usr/bin/bash bin/elasticsearch
    user=elk  ;  ,ES root 
    

    위의 nodaemon=falsetrue라면, 시스템 ctl 명령을 통해supervisord 서비스를 시작할 수 없습니다.
    설치 및 설치supervisord 서비스 시작
    systemctl enable supervisord  //  
    

    전원을 켜고 시작할 수 있도록 허용하면 /lib/systemd/system 디렉터리에서 supervisord.service 파일을 생성합니다. 이 파일을 편집하면 슈퍼visord의 시작 명령을 편집할 수 있습니다. 여기서 슈퍼visor의 프로필 디렉터리를 다시 만듭니다.
    [Service]
    Type=forking
    ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
    

    구성 파일을 수정할 때마다 (이 파일과 supervisord.conf 수정 포함) 다음 명령을 통해 다시 불러온 후 서비스를 시작해야 합니다.
    systemctl daemon-reload
    systemctl start supervisord
    

    이렇게 하면 슈퍼visord를 시작할 때마다 ES를 자동으로 실행할 수 있다

    ES 비 root 사용자 실행 문제


    es 기본값은 루트로 실행할 수 없습니다. 사용자를 추가하고 이 사용자에게 es 디렉터리에 대한 조작 권한을 부여함으로써 해결할 수 있습니다.
    #  
    useadd elk
    #  es 
    chown -R elk:elk elasticsearch-folder
    

    ##ES 인증 및 NGINX
    es는 기본적으로 인증이 없습니다. 권한이 부여되지 않은 접근 빈틈의 위험이 있습니다.상업 세트 x-pack에서 인증 기능을 제공하지만 권한을 부여해야 하며 시험적으로 사용한 지 한 달밖에 되지 않습니다.또한 ES도 제3자 플러그인search-guard가 안전 기능을 제공하지만 생산 환경에서 설정이 비교적 복잡하다.여기에서 나는nginx의Http Basic Authentication를 사용하여 인증 기능(홈페이지 문서 참조)을 하고nginx를 이용하여 검색 요청을 포트를 통해 es에게 전송한다.다음은 내 nginx 구성 참조입니다.
    upstream elk {
        server 127.0.0.1:9200;
    }
    
    server {
        listen 8080;  #  8080 , 9200 
        access_log  /var/log/nginx/statistics_access.log;
    
        client_max_body_size 4G;
        fastcgi_buffers 64 8K;
        client_body_buffer_size 1024k;
        keepalive_timeout 5;
        client_body_timeout 15;
        client_header_timeout 15;
    
        send_timeout 15;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
    
        location / {
            proxy_pass http://elk;  #  ,http:// 
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_buffers 8 32k;
            proxy_buffer_size 64k;
    
            #  
            auth_basic "auth required";
            auth_basic_user_file /etc/nginx/conf.d/htpasswd/es;
        }
    }
    
    

    보안을 위해 다음과 같은 두 가지 조치를 취합니다.
  • ES 프로필 편집.../elasticsearch-7.2.1/config/elasticsearch.yml, ES 바인딩은 네이티브 액세스만 가능:
    
    # ---------------------------------- Network -----------------------------------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    network.host: 127.0.0.1
    #
    # Set a custom port for HTTP:
    #
    # http.port: 9200
    
  • 보안 그룹에서 다른 포트에 대한 액세스를 닫고 위의 8080 포트에만 액세스합니다.

  • 연결 ES


    Kibana 접속 구성 수정:
    # elasticsearch.hosts: ["http://localhost:9200"]
    elasticsearch.hosts: ["http://xx.xx.xx.xxx:8080"]
    
    # ...
    
    # If your Elasticsearch is protected with basic authentication, these settings provide
    # the username and password that the Kibana server uses to perform maintenance on the Kibana
    # index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
    # is proxied through the Kibana server.
    elasticsearch.username: "user"
    elasticsearch.password: "pwd"
    

    Python 클라이언트 연결:
    ES_CLIENT = Elasticsearch(['http://user:[email protected]:8080'])
    

    ES는 도메인 이름을 통한 액세스를 지원하지 않는 것으로 보이므로 IP 및 포트를 지정해야 합니다.

    좋은 웹페이지 즐겨찾기