elasticSearch 시리즈 (1) 소개 및 구성 0에서 1

 

1. Elasticsearch 란? 

         Elasticsearch는 확장 성이 뛰어난 오픈 소스 전체 텍스트 검색 및 분석 엔진입니다. 대량의 데이터를 거의 실시간으로 빠르게 저장, 검색 및 분석 할 수 있습니다. 일반적으로 복잡한 검색 기능 및 요구 사항이있는 응용 프로그램을 지원하기위한 기본 엔진으로 사용됩니다.

  • ES 분산 인덱스 라이브러리, nosql
  • 외부 검색 서비스 제공 : http 또는 전송 (7.0 이후 더 이상 지원되지 않음) 프로토콜은 외부 검색, Restful json을 제공합니다.
  • 내부적으로 데이터베이스 nosql입니다.

2. Elasticsearch 장면 

  1. 전자 상거래 웹 사이트. 고객이 제품을 검색 할 수 있습니다. ES를 사용하여 전체 제품 카탈로그 및 재고를 저장하고 검색 및 자동 완성 기능을 제공 할 수 있습니다. 

  2. 로그 또는 트랜잭션 데이터 수집. 그리고 데이터를 분석하고 마이닝하여 추세, 통계 정보, 요약 또는 이상 징후 등을 찾습니다. 

  3. 가격 경고 플랫폼. 이 플랫폼을 통해 고객은 "다음 달에 제품 가격이 X 이하로 떨어지면 알림"과 같이 지정할 수 있습니다. 

  4. 비즈니스 인텔리전스 분석. 대량의 데이터에 대해 신속하게 조사, 분석, 시각화하고 특별한 질문을하고 싶습니다. 

3.Elasticsearch 기능 

Elasticsearch는 Lucene을 캡슐화하고 즉시 사용할 수 있으므로 사용하기가 더 쉽습니다. Elasticsearch는 클러스터를 지원하고 클러스터 노드의 동적 확장도 지원하며 고 가용성을 위해 많은 작업을 수행했으며 인덱스 라이브러리가 아닌 검색 엔진입니다. 

  • Elasticsearch는 Lucene을 기반으로 구축되었으며 Elasticsearch는 Lucene을 사용하여 실제 작업을 수행합니다. 

  • ELasticsearch의 각 샤드는 Lucene의 개별 인스턴스입니다. 

  • Elasticsearch는 Lucene을 기반으로 (즉, Lucene의 기능을 사용하여) 분산 된 JSON 기반 REST API를 제공하여 Lucene의 기능을 더 쉽게 사용할 수 있도록합니다. 

  • Elasticsearch는 스레드 풀, 큐, 노드 / 클러스터 모니터링 API, 데이터 모니터링 API, 클러스터 관리 등과 같은 기타 지원 기능을 제공합니다. 

 

4. Elasticsearch의 기본 개념 

1. 클러스터 (클러스터)

        클러스터는 모든 데이터를 함께 저장하고 모든 노드간에 인덱싱 및 검색 기능을 제공하는 하나 이상의 노드 (서버) 모음입니다. 클러스터는 기본적으로 "elasticsearch"인 고유 한 이름으로 식별됩니다. 이 이름은 노드가 이름으로 클러스터에 결합하도록 설정된 경우 노드가 클러스터의 일부만 될 수 있기 때문에 중요합니다.

2. 노드 

        노드는 클러스터의 일부이며 데이터를 저장하고 클러스터의 인덱싱 및 검색에 참여하는 데 사용되는 단일 서버입니다. 클러스터와 마찬가지로 노드는 이름으로 식별되며 기본적으로 시작시 노드에 할당 된 임의의 고유 식별자 (UUID)가 사용됩니다. 기본 노드 이름을 사용하지 않으려면 노드 이름을 사용자 정의 할 수 있습니다. 이름은 클러스터 관리에 매우 중요합니다. 이름을 지정할 때 이름을 사용하여 가능한 한 클러스터에 해당하는 노드를 식별 할 수 있습니다.

3. 색인 

      색인은 유사한 특성을 가진 문서 모음입니다. 예를 들어 고객 데이터로 인덱스를 만들고, 제품 카탈로그로 인덱스를 만들고, 주문 데이터로 인덱스를 만들 수 있습니다.

 4.  유형 

    색인에서 하나 이상의 유형을 정의 할 수 있습니다. 유형은 인덱스의 논리적 범주 또는 파티션입니다. 일반적으로 공통 필드 집합이있는 문서의 유형을 정의합니다.

5. 문서 

   파일은 인덱싱 할 수있는 기본 정보 단위입니다.

 탄력적 검색 

 관계형 데이터베이스 

 인덱스 (지수) 

 데이터베이스 

 유형

(유형 6.x는 하나만 있고 이전에는 여러 개가있을 수 있으며 7.x는 사라짐) 

 표 

 문서 

 열 

 들 

 기둥 

 매핑 

 개요 

 구조화 된 쿼리 언어 (쿼리 DSL) 

 SQL 

http : 9200 / index 가져  오기  ... 

 SELECT * FROM table ... 여기서 ... 

es의 치명적인 단점 : 비 관계형 유형, 즉 교차 인덱스 쿼리에 대한 쿼리를 연결할 수있는 방법이 없습니다.

6. 샤드 

       실제 프로젝트에서 인덱스 데이터는 매우 클 수 있으며 이러한 데이터는 단일 노드의 하드웨어 조건을 초과 할 수 있습니다. 예를 들어, 10 억 개의 문서로 구성된 단일 인덱스는 1TB의 디스크 공간을 차지하는데, 이때 단일 노드의 디스크 스토리지를 사용할 수 없거나 검색 프로세스가 너무 느려 검색 요청을 충족 할 수 없습니다. 

       이 문제를 해결하기 위해 Elasticsearch는 인덱스를 여러 샤드 (샤드)로 세분화하는 기능을 제공합니다. 인덱스를 생성 할 때 필요한 샤드 수만 정의하면됩니다. 각 샤드 자체는 완전히 작동하고 독립적 인 "인덱스"이며 클러스터의 모든 노드에서 호스팅 될 수 있습니다. 

7. 복제본 

     샤드 / 노드가 어떤 이유로 (고 가용성 메커니즘 제공) 오프라인 상태가되거나 사라지는 것을 방지하려면 장애 조치 메커니즘을 사용하는 것이 좋습니다. 이러한 이유로 Elasticsearch는 인덱스 샤드의 하나 이상의 복사본을 소위 복제본 샤드 (줄여서 복제)로 만들 수 있습니다.

8. 거의 실시간 검색 

    세그먼트 별 검색이 개발됨에 따라 새 문서의 인덱싱에서 검색 가능까지의 대기 시간이 크게 단축되었습니다. 새 문서는 몇 분 내에 검색 할 수 있지만 빠르지 않습니다. 

    디스크는 여기서 병목 현상이됩니다. 새 세그먼트를 디스크에 커밋하려면 fsyn 작업을 수행하여 세그먼트가 물리적으로 디스크에 기록되어 정전시 데이터가 손실되지 않도록해야합니다. 그러나 fsyn 작업은 비용이 많이 들고 문서가 인덱싱 될 때마다 실행되면 큰 성능 문제가 발생합니다. 

     우리에게 필요한 것은 문서를 검색 가능하게 만드는 더 가벼운 방법입니다. 즉, 전체 프로세스에서 fsyn을 제거해야합니다. 

     Elasticsearch와 디스크 사이에는 파일 시스템 캐시가 있습니다. 앞에서 설명한 것처럼 메모리 인덱스 버퍼의 문서는 새 세그먼트에 기록됩니다. 그러나 여기서 새 세그먼트는 먼저 파일 시스템 캐시에 기록됩니다.이 단계의 비용은 더 낮고 나중에 디스크로 플러시됩니다.이 단계는 더 많은 비용이 듭니다. 그러나 파일이 이미 캐시에있는 한 다른 파일처럼 열고 읽을 수 있습니다. 

     Lucene을 사용하면 새 세그먼트를 작성하고 열 수 있으므로 여기에 포함 된 문서를 완전히 제출하지 않고도 검색 할 수 있습니다. 이 방법은 제출 방법보다 훨씬 저렴하며 성능에 영향을주지 않고 자주 실행할 수 있습니다. 

5. Elasticsearch 설치 및 구성 

버전 선택 

Elasticsearch의 기본 버전은 머신의 성능을 고려하여 5/6/7이며 버전 5는 많은 세대 환경에서 여전히 사용되고 있습니다.

 ES는 Java를 기반으로 개발되었으므로 설치하기 전에 시스템에 jdk가 설치되어 있는지 확인해야합니다. ES는 다음과 같이 java에 의존합니다.

  • ES5.x 이상에는 Java8 이상이 필요합니다.
  • Java 11은 ES6.5부터 지원되었습니다.
  • ES7.0부터 ES에는 기본 제공 Java 환경이 있습니다.

버전 : Elasticsearch-6.6.0.tar

JDK : 최소 버전은 JDK 1.8.0_133입니다. 시스템의 기본 opendJDK를 사용하지 마십시오. 항상 예기치 않은 문제가 있습니다.

다운로드 링크 : https://elasticsearch.cn/download/

대체 다운로드 주소 : 링크 :  https://pan.baidu.com/s/14Xk0gv128mRVjsk89xFy9Q  추출 코드 : fdx7

# 下载elasticsearch-6.6.0
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz
 
# 解压文件
$ tar xvzf elasticsearch-6.6.0.tar.gz
 
# 移动到指定目录
$ mv ./elasticsearch-6.6.0 /usr/path/to

구성 (상세 구성 파일)

 구성 항목 

 구성 항목 설명 

 cluster.name 

 Elasticsearch 클러스터 이름. 기본 이름은 elasticsearch입니다. 

 node.name 

 노드 이름. 기본적으로 Elasticsearch는 임의로 생성 된 UUID의 처음 7자를 노드 ID로 사용합니다. 노드 ID는 영구적이며 다시 시작할 때 변경되지 않으므로 기본 노드 이름도 변경되지 않습니다. 

 node.attr.rack 

 노드 서버가있는 랙에 대한 정보 

 path.data 

 인덱스 데이터의 저장 경로를 설정합니다. 기본값은 Elasticsearch 루트 디렉터리 아래의 데이터 폴더입니다. 쉼표로 구분 된 여러 저장 경로를 설정할 수 있습니다. 

 path.log 

 로그 파일의 저장 경로를 설정합니다. 기본값은 Elasticsearch 루트 디렉터리 아래의 logs 폴더입니다. 

 bootstrap.memory_lock 

 true로 설정하면 JVM 메모리가 디스크로 스왑되지 않아 Elasticsearch 메모리가 스왑되지 않고 성능에 영향을주지 않습니다. 

 network.host 

 Elasticsearch 노드의 IP 주소 지정 

 http.port 

 Elasticsearch 외부 서비스의 http 포트 번호를 설정합니다. 기본 9200 

 discovery.zen.ping.unicast.hosts 

 클러스터에서 마스터 노드의 초기 목록을 설정하면 이러한 노드를 사용하여 클러스터에 가입하는 새 노드를 자동으로 검색 할 수 있습니다. 

 discovery.zen.minimum_master_nodes 

 이 매개 변수는 "split brain"의 발생을 방지하고 클러스터를 형성하기 위해 표시되어야하는 최소 호스트 수를 정의합니다. 기본값은 1입니다. 

 gateway.recover_after_nodes 

 예상 노드 수가 클러스터에 가입되어있는 한 로컬 샤드 복구가 시작됩니다. 기본값은 0입니다. 

 action.destructive_requires_name 

 지정된 이름의 데이터 만 삭제할 수 있습니다. _all 또는 와일드 카드는 일치하는 인덱스 라이브러리를 삭제할 수 없습니다. 이 설정은 Rest API에 의해 동적으로 업데이트 될 수 있습니다. 

시스템 구성 파일 

memory_lock 구성 

memory_lock이 true로 설정되고 오류가 발생하면 다음 두 Linux 시스템 파일을 수정해야합니다. 

/etc/security/limits.conf 수정  

soft nofile 65536
hard nofile 65536
soft nproc 32000
hard nproc 32000
hard memlock unlimited
soft memlock unlimited

/etc/systemd/system.conf 수정 

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

 max_map_count 경고 

시작할 때 경고가 나타나는 경우 : 

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

임시 설정 

임시 설정, Linux가 다시 시작되면 설정 이전의 값으로 복원됩니다.

$ sysctl -w vm.max_map_count=262144
 
# 查看结果:
$ sysctl -a|grep vm.max_map_count
 
# 显示:
$ vm.max_map_count = 262144

영구적으로 설정 

/etc/sysctl.conf 파일 끝에 행 추가 

vm.max_map_count=262144

 

추천

출처blog.csdn.net/qq_38130094/article/details/108101316