Elasticsearch#

plans-img Enterprise 플랜 에서 사용 가능

deployment-img Cloudself-hosted 배포

Elasticsearch는 성능 저하나 타임아웃 없이 클러스터 지원을 통해 최적화된 검색 성능, 전용 인덱싱 및 사용 리소스를 제공하여 더 빠르고 예측 가능한 검색 결과를 제공합니다. Mattermost 구현은 클러스터 환경 에서 고효율 데이터베이스 검색을 지원하는 분산형 RESTful 검색 엔진으로 Elasticsearch 를 사용합니다.

중요

  • 기본 Mattermost 데이터베이스 검색은 32GB RAM과 4개의 CPU가 있는 서버에서 약 200만 개의 게시물에서 성능 저하가 시작됩니다. Mattermost 서버가 250만 개 이상의 게시물에 도달할 것으로 예상된다면, 300만 개의 게시물에 도달하기 전에 최적의 검색 성능을 위해 Elasticsearch를 활성화하는 것을 권장합니다.

  • 500만 개 이상의 게시물이 있는 배포의 경우, 검색 및 멘션에서 심각한 성능 문제(타임아웃 등)를 방지하기 위해 Elasticsearch가 필요합니다.

  • Mattermost 서버와 다른 기계에 Elasticsearch 설정 하는 것을 강력히 권장합니다.

배포 가이드#

Elasticsearch는 게시물 데이터의 인덱스를 생성하고 관리하여 대용량 데이터를 거의 실시간으로 빠르게 검색할 수 있게 합니다. 인덱싱 프로세스는 Elasticsearch 서버를 설정하고 연결한 후 시스템 콘솔에서 관리할 수 있습니다. 게시물 인덱스는 Elasticsearch 서버에 저장되며 새 게시물이 작성된 후 지속적으로 업데이트됩니다. 기존 게시물을 인덱싱하려면 전체 게시물 데이터베이스의 대량 인덱스를 생성해야 합니다.

Elasticsearch 배포에는 다음 두 단계가 포함됩니다: Elasticsearch 서버 설정Mattermost에서 Elasticsearch 구성.

Elasticsearch 서버 설정#

  1. Elasticsearch v8 또는 Elasticsearch v7.17+ 최신 릴리스를 다운로드하고 설치하세요. 설치 세부 정보는 Elasticsearch 문서를 참조하세요.

중요

  • Mattermost v9.11은 Elasticsearch v8 지원과 함께 Opensearch v1.x 및 v2.x 베타 지원을 추가했습니다.

  • Mattermost는 Elasticsearch v7.17+를 지원합니다. 하지만 Elasticsearch v7 인스턴스를 v8.x로 업그레이드하는 것을 권장합니다. 자세한 내용은 Elasticsearch 업그레이드 문서를 참조하세요.

  • Elasticsearch v8을 사용할 때는 와일드카드 작업이 작동하도록 elasticsearch.yml 에서 action.destructive_requires_namefalse 로 설정해야 합니다.

AWS Elasticsearch

AWS Elasticsearch를 사용하는 경우 다음을 수행해야 합니다:

  1. AWS Opensearch로 업그레이드하세요. 자세한 내용은 Opensearch 업그레이드 문서를 참조하세요.

  2. Opensearch에서 “호환성 모드”를 비활성화하세요.

  3. Mattermost 서버를 업그레이드하세요.

  4. Mattermost ElasticsearchSettings.Backend 구성 설정 값을 elasticsearch 에서 `opensearch` 로 수동으로 또는 mmctl 을 사용하여 업데이트하세요. 이 값은 시스템 콘솔을 사용하여 변경할 수 없습니다. 추가 세부 정보는 Mattermost Elasticsearch 백엔드 유형 문서를 참조하세요.

  5. Mattermost 서버를 재시작하세요.

  1. 다음 명령어를 실행하여 systemd 로 Elasticsearch를 설정하세요:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
  1. 다음 명령어를 실행하여 서버에서 Elasticsearch가 작동하는지 확인하세요:

curl localhost:9200
  1. 다음 명령어를 실행하여 네트워크 인터페이스 이름을 가져오세요:

ip addr
  1. 다음 명령어를 실행하여 vi 에서 Elasticsearch 구성 파일을 편집하세요:

vi /etc/elasticsearch/elasticsearch.yml
  1. 이 파일에서 _eth0_``의 ``network.host 값을 네트워크 인터페이스 이름으로 바꾸고 변경사항을 저장하세요.

  2. 다음 명령어를 실행하여 Elasticsearch를 재시작하세요:

sudo systemctl stop elasticsearch
sudo systemctl start elasticsearch
  1. 다음 명령어를 실행하여 포트가 수신 대기 중인지 확인하세요:

netstat -plnt

You should see the following ports, including the ones listening on ports 9200 and 9300. Confirm these are listening on your server’s IP address.

  1. Elasticsearch 디렉토리를 생성하고 적절한 권한을 부여하세요.

  2. 다음 명령어를 실행하여 icu-analyzer 플러그인/usr/share/elasticsearch/plugins 디렉토리에 설치하세요:

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
  1. 다음 명령어를 실행하여 Mattermost에서 Elasticsearch로의 연결을 테스트하세요:

curl 172.31.80.220:9200

Mattermost에서 Elasticsearch 구성하기#

Mattermost가 Elasticsearch 서버를 사용하도록 구성하고 게시물 인덱스를 생성하려면 다음 단계를 따르세요.

대규모 배포를 위한 고급 Elasticsearch 구성 설정은 System Console 외부의 config.json 파일에서 구성할 수 있습니다. 자세한 내용은 Elasticsearch 구성 설정 문서를 참조하세요.

  1. 시스템 콘솔 > 환경 > Elasticsearch 로 이동하세요.

  2. 페이지의 다른 설정을 활성화하려면 Elasticsearch 인덱싱 활성화true 로 설정하세요. 구성이 저장되면 데이터베이스에 새로 작성된 게시물이 Elasticsearch 서버에 자동으로 인덱싱됩니다.

  3. Elasticsearch 서버 연결 세부 정보를 설정하세요:

  1. 이전에 설정한 Elasticsearch 서버의 서버 연결 주소 를 입력하세요.

  2. (선택 사항) Elasticsearch 서버에 접근하는 데 사용할 서버 사용자 이름 을 입력하세요. AWS Elasticsearch의 경우 이 필드를 비워두세요.

  3. (선택 사항) 사용자 이름과 연결된 서버 비밀번호 를 입력하세요. AWS Elasticsearch의 경우 이 필드를 비워두세요.

  4. 클러스터 스니핑 활성화 를 설정하세요(선택 사항). 스니핑은 클러스터의 모든 데이터 노드를 자동으로 찾아 연결합니다. AWS Elasticsearch의 경우 이 필드를 false 로 설정해야 합니다.

Mattermost v7.8부터 기본 인증 자격 증명과 함께 사용하거나 이를 대체하기 위한 선택적 CA 및 클라이언트 인증서 구성 설정을 사용할 수 있습니다. 자세한 내용은 Elasticsearch 구성 설정 문서를 참조하세요.

  1. 연결 테스트 를 선택한 다음 저장 을 선택하세요. 서버 연결이 실패하면 구성을 저장하거나 Elasticsearch로 검색을 활성화할 수 없습니다.

  2. 기존 게시물의 게시물 인덱스를 구축하려면 인덱스 구축 을 선택하세요. 이 프로세스는 게시물 데이터베이스의 크기와 메시지 수에 따라 몇 시간이 걸릴 수 있습니다. 인덱스가 생성되는 동안 진행률을 확인할 수 있습니다. 다운타임을 방지하려면 인덱싱 프로세스 중에 데이터베이스 검색을 사용할 수 있도록 검색 쿼리에 Elasticsearch 활성화false 로 설정하세요.

중요

다음 단계에서 Elasticsearch를 활성화하기 전에 대량 인덱싱을 완료하세요. 그렇지 않으면 검색 결과가 불완전할 수 있습니다.

  1. 검색 쿼리에 Elasticsearch 활성화자동완성에 Elasticsearch 활성화true 로 설정하여 Elasticsearch를 활성화하세요.

  2. 구성 업데이트를 저장하고 Mattermost 서버를 재시작하세요.

참고

  • 대규모 배포를 위한 추가 고급 Elasticsearch 설정은 System Console 외부의 config.json 파일에서 구성할 수 있습니다. 자세한 내용은 Elasticsearch 구성 설정 문서를 참조하세요.

  • 배포에 많은 수의 게시물(일반적으로 100만 개 이상이지만 엄격하게 정의되지 않음)이 있는 경우, 재인덱싱 진행률이 99%에서 오랫동안 머물 수 있습니다. 인덱싱할 데이터의 크기는 추정되며, 대규모 데이터베이스에서는 추정이 부정확해질 수 있습니다. 진행률 추정이 부정확하고 진행률이 완료 직전에 멈춘 것처럼 보일 수 있지만, 인덱싱은 완료될 때까지 백그라운드에서 계속 진행됩니다.

  • Mattermost Server v5.35로 업그레이드하기 전에 공유된 파일의 검색 결과는 mmctl 를 사용하여 추출 명령을 실행할 때까지 불완전할 수 있습니다. 이 명령을 실행한 후에는 검색 인덱스를 다시 구축해야 합니다. 시스템 콘솔 > 환경 > Elasticsearch > 대량 인덱싱 으로 이동한 다음 지금 인덱싱 을 선택하여 이전 파일 내용을 포함하도록 검색 인덱스를 다시 구축하세요.

  • 게시물 수가 많은 배포의 경우 Mattermost LiveIndexingBatchSize 구성 설정을 읽고 적절히 구성하는 것을 강력히 권장합니다.

제한 사항#

  1. Elasticsearch는 검색 결과의 관련성을 유지하기 위해 “불용어”의 표준 선택을 사용합니다. 다음 단어에 대한 결과는 반환되지 않습니다: “a”, “an”, “and”, “are”, “as”, “at”, “be”, “but”, “by”, “for”, “if”, “in”, “into”, “is”, “it”, “no”, “not”, “of”, “on”, “or”, “such”, “that”, “the”, “their”, “then”, “there”, “these”, “they”, “this”, “to”, “was”, “will”, “with”.

  2. 따옴표로 묶은 불용어 검색은 검색어만 검색했을 때보다 더 많은 결과를 반환합니다(ticket).

  3. 검색 결과는 사용자의 팀 및 채널 멤버십으로 제한됩니다. 이는 Mattermost 서버에 의해 적용됩니다. 엔티티는 Mattermost가 쿼리할 때 필터링할 수 있도록 Elasticsearch에 인덱싱되므로, Mattermost 서버는 모든 Elasticsearch 요청에서 이러한 필터를 적용하여 결과를 좁힙니다.

자주 묻는 질문(FAQ)#

Elasticsearch를 사용해야 하나요?#

Elasticsearch 엔진은 클러스터 환경에서 고효율 데이터베이스 검색을 실행하기 위해 대규모 엔터프라이즈 배포용으로 설계되었습니다. 기본 Mattermost 데이터베이스 검색은 데이터베이스 서버의 사양에 따라 약 250만 개의 게시물에서 성능 저하가 시작됩니다. Mattermost 서버가 250만 개 이상의 게시물을 가질 것으로 예상된다면, 최적의 검색 성능을 위해 Elasticsearch 사용을 권장합니다.

Mattermost 서버와 동일한 머신에 Elasticsearch를 설치해야 하나요?#

아니요. Mattermost 서버와 다른 머신에 Elasticsearch를 설치하는 것을 강력히 권장합니다.

어떤 유형의 인덱스가 생성되나요?#

Mattermost는 사용자, 채널, 게시물의 세 가지 유형의 인덱스를 생성합니다. 사용자와 채널은 각각 하나의 인덱스를 가집니다. 게시물은 날짜별로 여러 인덱스로 집계됩니다.

Elasticsearch 인덱싱 작업을 일시 중지할 수 있나요?#

네. Mattermost v6.7부터 Elasticsearch 인덱싱 작업은 재개 가능합니다. Elasticsearch 인덱싱 작업이 실행 중일 때 서버를 중지하면 작업이 대기 상태가 됩니다. 서버가 재시작되면 작업이 재개됩니다. 시스템 관리자는 시스템 콘솔을 통해 인덱싱 작업을 취소할 수 있습니다.

인덱스 롤오버 정책을 정의할 수 있나요?#

AggregatePostsAfterDays 구성 설정은 기준값을 정의합니다. 이 값 이전의 모든 게시물은 재인덱싱되어 새로운 더 큰 인덱스로 집계됩니다. 기본 설정은 365일입니다.

Elasticsearch에서 제공하는 새로운 검색 기능이 있나요?#

현재 Elasticsearch 구현은 데이터베이스 검색에서 현재 사용 가능한 검색 기능과 일치합니다. Mattermost 팀은 파일 이름 및 내용 검색, 날짜 필터, 연산자 및 수정자로 Elasticsearch 기능 세트를 확장하는 작업을 진행 중입니다.

내 파일이 Elasticsearch에 저장되나요?#

아니요, 파일과 첨부 파일은 저장되지 않습니다.

Elasticsearch 서버의 시스템 상태를 어떻게 모니터링하나요?#

이 Prometheus 익스포터를 사용하여 Elasticsearch의 다양한 메트릭 을 모니터링할 수 있습니다: justwatchcom/elasticsearch_exporter.

Elasticsearch 성능 모니터링에 관한 기사 도 참조할 수 있습니다. 이는 Mattermost의 성능 모니터링 시스템이 사용하는 Prometheus를 위해 특별히 작성된 것은 아니지만, 여러 팁과 모범 사례를 포함하고 있습니다.

Elasticsearch로 어떤 형태의 데이터가 전송되나요?#

Mattermost는 엔티티 인덱싱 및 쿼리를 위해 JSON 메시지를 사용하여 REST API를 통해 Elasticsearch와 통신합니다.

Elasticsearch로 얼마나 많은 데이터가 언제 전송되나요?#

메시지가 게시되거나, 채널이 생성되거나, 사용자가 변경될 때마다(예: 이름 변경과 같은 속성 변경이나 채널 참여/나가기 때문에), 해당 이벤트와 관련된 데이터가 Elasticsearch로 전송됩니다.

Elasticsearch를 통한 검색이 활성화된 경우, 모든 검색이 쿼리를 생성합니다. 자동 완성이 활성화된 경우, 메시지 작성이나 사용자 검색과 관련된 모든 사용자 또는 채널 자동 완성이 쿼리를 생성합니다.

Elasticsearch 작업이 실패했는지 어떻게 알 수 있나요?#

Mattermost는 시스템 콘솔 > 환경 > Elasticsearch 에서 각 Elasticsearch 인덱싱 작업의 상태를 제공합니다. 여기서 작업이 성공했는지 실패했는지, 오류 세부 정보를 포함하여 확인할 수 있습니다.

실패는 서버 로그에 반환됩니다. 오류 로그는 Failed job 문자열로 시작하며 job_id 키/값 쌍을 포함합니다. Elasticsearch 작업 실패는 EnterpriseElasticsearchAggregatorEnterpriseElasticsearchIndexer 작업자 이름으로 식별됩니다. 이러한 실패를 프로그래밍 방식으로 쿼리하고 적절한 시스템에 알리는 스크립트를 선택적으로 생성할 수 있습니다.

Elasticsearch 인덱스가 완료되지 않는데 어떻게 해야 하나요?#

일시 중지된 Elasticsearch 인덱싱 작업이 있다면, Elasticsearch 서버가 재시작되었을 가능성이 높습니다. Elasticsearch 서버를 재시작하는 경우, 작업이 완료되도록 Mattermost도 재시작해야 합니다. Mattermost 서버를 재시작해도 문제가 해결되지 않으면 Mattermost 지원팀 에 문의하세요.

매번 먼저 삭제한 후 대량 인덱싱을 해야 하나요?#

네.

Mattermost 서비스 계정에 필요한 권한#

“최소 권한” 환경에서는 Elasticsearch 서비스 계정의 액세스를 제한하기 위해 서비스 계정 권한을 추가로 제한해야 할 수 있습니다. 다음 JSON은 Mattermost가 Elasticsearch와 올바르게 작동할 수 있도록 하는 “최소 권한” 권한 세트의 예를 제공합니다:

{
  "cluster_permissions": [
    "cluster:monitor/*",
    "indices:admin/template/put",
    "indices:data/write/bulk"
  ],
  "index_permissions": [
    {
      "index_patterns": [
        "\<IndexPrefix\>*"
      ],
      "allowed_actions": [
        "indices:admin/get",
        "indices:admin/create",
        "indices:admin/delete",
        "indices:admin/mapping/put",
        "indices:admin/mappings/fields/get*",
        "indices:data/read*",
        "indices:data/write*"
      ]
    }
  ]
}

위의 더 간단하고 유연하며 복원력 있는 변형은 다음과 같습니다:

{
  "cluster_permissions": [
    "cluster:monitor/*",
    "indices:admin/template/put",
    "indices:data/write/bulk"
  ],
  "index_permissions": [
    {
      "index_patterns": [
        "\<IndexPrefix\>*"
      ],
      "allowed_actions": [
        "indices:*"
      ]
    }
  ]
}