InfoGrab DocsInfoGrab Docs

AWS OpenSearch 서버 설정

요약

AWS OpenSearch Service는 게시물 데이터의 인덱스를 생성하고 관리하여 대용량 데이터를 거의 실시간으로 빠르게 검색할 수 있게 합니다. AWS OpenSearch 배포는 AWS OpenSearch 설정과 Mattermost 구성 두 단계로 구성됩니다.

사용 가능 플랜: Enterprise, Enterprise Advanced

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

AWS OpenSearch 배포는 AWS OpenSearch 설정과 Mattermost 구성 두 단계로 구성됩니다.

AWS OpenSearch 설정#

Mattermost v9.11부터 AWS OpenSearch v1.x 및 v2.x에 대한 베타 지원이 제공됩니다. 이 문서에서는 수동 단계와 Terraform 예시를 포함하여 온프레미스 및 AWS OpenSearch 설정 모두를 다룹니다.

Mattermost 서버와 별도의 머신에 AWS OpenSearch 서버를 설정하는 것을 강력히 권장합니다.

Important

2026년 10월 출시되는 Mattermost v12.0부터 OpenSearch v1.x는 더 이상 지원되지 않습니다. OpenSearch v2.x 이상으로 업그레이드해야 합니다.

  1. 온프레미스 OpenSearch를 설치하려면 전용 서버(예: Ubuntu 22.04 LTS)를 프로비저닝하세요.

  2. Java를 설치하세요 (OpenSearch는 Java 11 이상이 필요합니다):

    sudo apt update 
    sudo apt install -y openjdk-11-jdk 
    java -version
    
  3. OpenSearch 2.x를 다운로드 및 압축 해제하세요:

    wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.9.0/opensearch-2.9.0-linux-x64.tar.gz 
    tar -xzf opensearch-2.9.0-linux-x64.tar.gz 
    sudo mv opensearch-2.9.0 /usr/share/opensearch
    
  4. 전용 사용자를 생성하고 권한을 설정하세요:

    sudo useradd --no-create-home --shell /bin/false opensearch 
    sudo chown -R opensearch:opensearch /usr/share/opensearch
    
  5. systemd를 구성하세요:

    [Unit] 
      Description=OpenSearch 
      Wants=network-online.target 
      After=network-online.target 
    
    [Service] 
      Type=notify 
      User=opensearch 
      Group=opensearch 
      ExecStart=/usr/share/opensearch/bin/opensearch 
      Restart=on-failure 
      LimitNOFILE=65536 
      LimitNPROC=4096 
    
    [Install] 
      WantedBy=multi-user.target
    
  6. 다음을 포함하도록 opensearch.yml을 편집하세요:

    cluster.name: mattermost-cluster
    node.name: node-1
    path.data: /var/lib/opensearch
    path.logs: /var/log/opensearch
    network.host: 0.0.0.0
    discovery.seed_hosts: ["<other-node-ip>"]
    cluster.initial_master_nodes: ["node-1", "node-2"]
    
Note
서비스를 시작하기 전에 `path.data`와 `path.logs` 디렉터리가 존재하고 `opensearch` 사용자가 소유하고 있는지 확인하세요:

``` sh
sudo mkdir -p /var/lib/opensearch /var/log/opensearch
sudo chown -R opensearch:opensearch /var/lib/opensearch /var/log/opensearch
```

  1. OpenSearch를 활성화하고 시작하세요:

    sudo systemctl daemon-reload 
    sudo systemctl enable opensearch 
    sudo systemctl start opensearch 
    sudo systemctl status opensearch
    
  2. 다음 명령을 실행하여 /usr/share/opensearch/plugins 디렉터리에 icu-analyzer 플러그인을 설치하세요:

Important
`analysis-icu` 플러그인은 선택 사항이 아니라 **클러스터의 모든 노드에 필요합니다**. Mattermost의 게시물 및 파일 인덱스 템플릿이 이 플러그인에 의존합니다. 플러그인이 없으면 Mattermost가 이러한 템플릿을 생성할 수 없습니다.

``` sh
sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-icu
```

새로 설치한 플러그인을 로드하려면 확인하기 전에 각 노드에서 OpenSearch를 재시작하세요. `_cat/plugins`는 활성화된 플러그인만 보고하므로 먼저 재시작해야 합니다. 프로덕션 클러스터에서는 모든 노드를 한꺼번에 재시작하지 말고 한 번에 한 노드씩 재시작(롤링 재시작)하세요. 계속하기 전에 모든 노드에 플러그인이 설치되어 활성화되어 있는지 확인하세요. 호스트, 관리자 비밀번호, 클러스터의 CA 인증서 경로를 사용자 환경에 맞게 바꾸세요:

``` sh
curl --silent --show-error --fail-with-body --cacert <path-to-root-ca.pem> --user 'admin:<password>' 'https://<your-opensearch-host>:9200/_cat/plugins?v&h=name,component,version&s=name,component'
```

이 명령을 실행하면 클러스터의 노드마다 `analysis-icu`가 한 번씩 표시됩니다. 어느 노드에서든 `analysis-icu` 줄이 없으면 해당 노드에 플러그인이 설치되지 않은 것입니다.

(선택 사항) CJK 언어 분석기 플러그인: 한국어, 일본어 또는 중국어 콘텐츠 검색을 개선하려면 다음 언어별 분석기 플러그인 중 하나 이상을 설치하세요: analysis-nori(한국어), analysis-kuromoji(일본어), analysis-smartcn(중국어).

sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-nori
sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-kuromoji
sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-smartcn

CJK 플러그인을 설치한 후 로드하려면 OpenSearch를 재시작하세요:

sudo systemctl restart opensearch

그런 다음 EnableCJKAnalyzers 구성 설정을 활성화하세요. 추가 CJK 검색 구성 옵션은 중국어, 일본어, 한국어 검색 활성화를 참조하세요.

Important

기존 인덱싱된 콘텐츠가 있는 서버에서 CJK 분석기를 활성화하는 경우, 기존 게시물에 CJK 분석기가 적용되도록 System Console > Environment > Elasticsearch에서 검색 인덱스를 초기화하고 재빌드해야 합니다.

Terraform (Docker) 예시#

provider "docker" { 
  host = "unix:///var/run/docker.sock" 
}

resource "docker_image" "opensearch" { 
  name = "opensearchproject/opensearch:2.9.0" 
}

resource "docker_container" "opensearch" { 
  name = "opensearch" 
  image = docker_image.opensearch.latest 

  ports { 
    internal = 9200 
    external = 9200 
  }
  ports { 
    internal = 9600 
    external = 9600 
  }

  env = [
    "cluster.name=mattermost-cluster",
    "network.host=0.0.0.0",
    "discovery.type=single-node", # remove for multi-node 
  ]

  restart = "unless-stopped" 
}

resource "null_resource" "install_icu_plugin" {
  depends_on = [docker_container.opensearch]

  provisioner "local-exec" {
    command = "docker exec opensearch /usr/share/opensearch/bin/opensearch-plugin install analysis-icu && docker restart opensearch"
  }
}
  1. AWS OpenSearch를 설치하려면 AWS Console > OpenSearch Service를 여세요.

  2. 다음과 같이 도메인을 생성하세요:

    • 도메인 이름: mattermost-os
    • 엔진 버전: OpenSearch 2.x.
  3. 다음과 같이 클러스터를 구성하세요:

    • 인스턴스 유형: r6g.xlarge.search
    • 데이터 노드: 2
    • 마스터 노드: 2
    • 스토리지: EBS gp3 (1536 GiB, 4608 IOPS, 250 MiB/s)
  4. 네트워크를 다음으로 지정하세요: VPC에 서브넷 2개, 포트 443에서 Mattermost IP를 허용하는 보안 그룹.

Note

포트 9200은 일반적으로 로컬 또는 온프레미스 OpenSearch에 사용됩니다. AWS OpenSearch 도메인은 포트 443을 통한 HTTPS만 지원합니다.

  1. 접근 정책을 구성하세요 (JSON). Mattermost는 AWS SigV4로 OpenSearch 요청에 서명하지 않으므로, 4단계의 VPC와 보안 그룹을 사용해 네트워크 계층에서 접근을 제한하고, 도메인 접근 정책에서는 개방형 principal을 사용하세요:

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": { "AWS": "*" },
        "Action": "es:ESHttp*",
        "Resource": "arn:aws:es:us-east-1:123456789012:domain/mattermost-os/*" }]
    }
    
Warning

IAM principal 기반 접근 정책(예: "Principal": { "AWS": "arn:aws:iam::<account-id>:role/<role-name>" })은 지원되지 않습니다. Mattermost의 OpenSearch 클라이언트는 AWS SigV4로 요청에 서명하지 않으므로, AWS는 이러한 요청을 익명으로 처리하며 IAM으로 제한된 정책은 User: anonymous is not authorized to perform: es:ESHttpGet 오류와 함께 요청을 거부합니다. 네트워크 계층이 아닌 OpenSearch 계층에서 인증을 적용해야 하는 경우, 내부 마스터 사용자와 함께 도메인에서 세분화된 접근 제어를 활성화하고, 해당 자격 증명을 Mattermost Elasticsearch 구성의 서버 사용자 이름 및 서버 비밀번호로 입력하세요.

  1. 다음 고급 설정을 구성하세요 (JSON):

    {
      "action.destructive_requires_name": "false", 
      "rest.action.multi.allow_explicit_index": "true", 
      "indices.query.bool.max_clause_count": "1024", 
      "indices.fielddata.cache.size": "20" 
    }
    
  2. 자동화된 스냅샷 시작 시간을 23 (UTC)으로 구성하고, HTTPS를 적용한 다음 검토 및 생성하세요.

  3. 테스트하려면 다음 명령을 실행하세요:

    curl https://mattermost-os-xxxxxxxxxxx.us-east-1.es.amazonaws.com
    

AWS Terraform 예시#

provider "aws" { 
  region = "us-east-1" 
}

resource "aws_iam_role" "os_service_role" { 
  name = "OSServiceRole" 
  assume_role_policy = <<EOF 
{
  "Version": "2012-10-17", 
  "Statement": [{ 
    "Action": "sts:AssumeRole", 
    "Effect": "Allow", 
    "Principal": { "Service": "es.amazonaws.com" } 
  }]
}
EOF
}

resource "aws_opensearch_domain" "mattermost" { 
  domain_name = "mattermost-os" 
  engine_version = "OpenSearch_2.9"
  cluster_config { 
    instance_type = "r6g.xlarge.search" 
    instance_count = 2 
    dedicated_master_enabled = true 
    dedicated_master_type = "r6g.xlarge.search" 
    dedicated_master_count = 2 
    zone_awareness_enabled = true 
  }

  ebs_options { 
    ebs_enabled = true 
      volume_type = "gp3" 
      volume_size = 1536 
      iops = 4608 
  }

  vpc_options { 
    subnet_ids = ["subnet-blah1", "subnet-blah2"] 
    security_group_ids = ["sg-1234567890"] 
  }

  advanced_options = { 
    "rest.action.multi.allow_explicit_index" = "true" 
    "indices.query.bool.max_clause_count" = "1024" 
    "indices.fielddata.cache.size" = "20" 
    "action.destructive_requires_name" = "false" 
  }

  access_policies = <<POLICY 
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "*"
    },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-east-1:123456789012:domain/mattermost-os/*" 
    }]
  }
  POLICY
    service_software_options { 
      automated_snapshot_start_hour = 23 
    }

    domain_endpoint_options { 
      enforce_https = true 
    }
}

Mattermost 구성#

다음 단계에 따라 AWS OpenSearch 서버를 사용하도록 Mattermost를 구성하고 게시물 인덱스를 생성하세요:

  1. System Console > Environment > Elasticsearch로 이동하세요.

  2. 페이지의 다른 설정을 활성화하려면 Elasticsearch 인덱싱 활성화를 true로 설정하세요.

  3. 백엔드 유형이 opensearch로 설정되어 있는지 확인하세요.

  4. 서버 연결 주소를 Elasticsearch 또는 OpenSearch 클러스터 엔드포인트로 설정하세요.

  5. 클러스터 상태를 모니터링하세요: curl https://mattermost-os-xxxxx.us-east-1.es.amazonaws.com/_cluster/health

  6. (선택 사항) 엔터프라이즈 검색 서버에 접근하기 위한 서버 사용자 이름을 입력합니다.

  7. (선택 사항) 사용자 이름과 연결된 서버 비밀번호를 입력합니다.

  8. 클러스터 스니핑 활성화 (선택 사항)를 설정합니다. 스니핑은 클러스터의 모든 데이터 노드를 자동으로 찾아 연결합니다.

Warning

Elastic Cloud 또는 Amazon OpenSearch Service와 같은 클라우드 호스팅 검색 제공업체를 사용하는 경우 클러스터 스니핑을 활성화하지 마세요. 클라우드 제공업체는 일반적으로 프록시 뒤에 검색 클러스터 노드를 숨기므로, 스니핑된 노드 주소는 네트워크에서 도달할 수 없을 수 있습니다. 제공업체가 연결 풀링을 처리하므로 스니핑은 불필요하며 잠재적으로 문제를 일으킬 수 있습니다.

  1. 기본 인증 자격 증명과 함께 사용하거나 대체하기 위한 선택적 CA 및 클라이언트 인증서 구성 설정을 사용할 수 있습니다. 자세한 내용은 엔터프라이즈 검색 구성 설정 문서를 참조하세요.
  2. 연결 테스트를 선택한 다음 저장을 선택합니다. 서버 연결이 실패하면 구성을 저장하거나 Elasticsearch 또는 AWS OpenSearch로 검색을 활성화할 수 없습니다.
Note

Mattermost v11부터 엔터프라이즈 검색 서버 연결은 지원 패킷 생성 중에 테스트됩니다. 지원 패킷 생성 중 발생하는 연결 오류는 구성 문제 진단에 도움이 되도록 자동으로 패킷에 포함됩니다.

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

엔터프라이즈 검색을 활성화하기 전에 대량 인덱싱이 완료되어야 합니다. 그렇지 않으면 검색 결과가 불완전합니다.

검색 쿼리에 Elasticsearch 활성화를 true로, 자동 완성에 Elasticsearch 활성화를 true로 설정합니다. 구성 업데이트를 저장하고 Mattermost 서버를 재시작합니다.

Note

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

Warning

게시물 볼륨이 높은 배포의 경우 Elasticsearch 또는 AWS OpenSearch가 완전히 구성되고 실행된 후 데이터베이스 검색을 비활성화하는 것도 강력히 권장합니다. Mattermost 서버는 Elasticsearch 또는 OpenSearch를 사용할 수 없는 경우 데이터베이스 검색으로 폴백하며, 이는 게시물 볼륨이 높은 배포에서 성능 저하로 이어질 수 있습니다. Mattermost v11.7부터 서버는 주기적인 상태 확인을 통해 장애를 사전에 감지하고, 요청 타임아웃을 기다리는 대신 첫 번째 상태 확인 실패 시 데이터베이스 검색으로 전환합니다. 자세한 내용은 장애 처리 FAQ를 참조하세요.

구성이 저장되면 데이터베이스에 새로 작성된 게시물이 Elasticsearch 또는 AWS OpenSearch 서버에 자동으로 인덱싱됩니다.

엔터프라이즈 검색 제한 사항#

  1. Elasticsearch 및 AWS OpenSearch는 검색 결과의 관련성을 유지하기 위해 표준 "불용어(stop words)" 세트를 사용합니다. 다음 단어에 대한 결과는 반환되지 않습니다: "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. 따옴표 안의 불용어를 검색하면 검색된 단어 이상의 결과가 반환됩니다 (티켓).
  3. 기본적으로 검색 결과는 사용자의 팀 및 채널 멤버십으로 제한됩니다. 이는 Mattermost 서버에 의해 적용됩니다. 항목은 Mattermost가 쿼리 시 필터링할 수 있는 방식으로 Elasticsearch 또는 AWS OpenSearch에 인덱싱되므로, Mattermost 서버는 모든 Elasticsearch 또는 AWS OpenSearch 요청에서 해당 필터를 적용하여 결과를 좁힙니다. Mattermost v11.6부터 관리자는 멤버십 없이 공개 채널 검색 허용을 설정하여 사용자가 참여하지 않은 공개 채널의 메시지를 속한 팀 범위 내에서 찾을 수 있게 할 수 있습니다.
  4. Elasticsearch 또는 AWS OpenSearch가 제공하는 사용자 검색 및 자동 완성은 사용자 이름, 닉네임, 이름과 성만 일치시킵니다. 이메일 주소는 인덱싱되지 않으므로 시스템 관리자를 포함해 어떤 사용자도 이메일 주소로 찾을 수 없습니다. 데이터베이스에서 제공되는 사용자 검색은 계속해서 이메일 주소와 일치합니다. 채널 및 팀 구성원 검색의 경우 시스템 관리자는 항상 이메일 주소와 일치하며, 다른 모든 사용자는 이메일 주소 표시가 활성화되어 있어야 합니다. System Console > User Management > Users 목록은 해당 설정과 무관하게 항상 이메일 주소와 일치합니다.

AWS OpenSearch 서버 설정

Mattermost v12.0
원문 보기

요약

AWS OpenSearch Service는 게시물 데이터의 인덱스를 생성하고 관리하여 대용량 데이터를 거의 실시간으로 빠르게 검색할 수 있게 합니다. AWS OpenSearch 배포는 AWS OpenSearch 설정과 Mattermost 구성 두 단계로 구성됩니다.

사용 가능 플랜: Enterprise, Enterprise Advanced

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

AWS OpenSearch 배포는 AWS OpenSearch 설정과 Mattermost 구성 두 단계로 구성됩니다.

AWS OpenSearch 설정#

Mattermost v9.11부터 AWS OpenSearch v1.x 및 v2.x에 대한 베타 지원이 제공됩니다. 이 문서에서는 수동 단계와 Terraform 예시를 포함하여 온프레미스 및 AWS OpenSearch 설정 모두를 다룹니다.

Mattermost 서버와 별도의 머신에 AWS OpenSearch 서버를 설정하는 것을 강력히 권장합니다.

Important

2026년 10월 출시되는 Mattermost v12.0부터 OpenSearch v1.x는 더 이상 지원되지 않습니다. OpenSearch v2.x 이상으로 업그레이드해야 합니다.

  1. 온프레미스 OpenSearch를 설치하려면 전용 서버(예: Ubuntu 22.04 LTS)를 프로비저닝하세요.

  2. Java를 설치하세요 (OpenSearch는 Java 11 이상이 필요합니다):

    sudo apt update 
    sudo apt install -y openjdk-11-jdk 
    java -version
    
  3. OpenSearch 2.x를 다운로드 및 압축 해제하세요:

    wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.9.0/opensearch-2.9.0-linux-x64.tar.gz 
    tar -xzf opensearch-2.9.0-linux-x64.tar.gz 
    sudo mv opensearch-2.9.0 /usr/share/opensearch
    
  4. 전용 사용자를 생성하고 권한을 설정하세요:

    sudo useradd --no-create-home --shell /bin/false opensearch 
    sudo chown -R opensearch:opensearch /usr/share/opensearch
    
  5. systemd를 구성하세요:

    [Unit] 
      Description=OpenSearch 
      Wants=network-online.target 
      After=network-online.target 
    
    [Service] 
      Type=notify 
      User=opensearch 
      Group=opensearch 
      ExecStart=/usr/share/opensearch/bin/opensearch 
      Restart=on-failure 
      LimitNOFILE=65536 
      LimitNPROC=4096 
    
    [Install] 
      WantedBy=multi-user.target
    
  6. 다음을 포함하도록 opensearch.yml을 편집하세요:

    cluster.name: mattermost-cluster
    node.name: node-1
    path.data: /var/lib/opensearch
    path.logs: /var/log/opensearch
    network.host: 0.0.0.0
    discovery.seed_hosts: ["<other-node-ip>"]
    cluster.initial_master_nodes: ["node-1", "node-2"]
    
Note
서비스를 시작하기 전에 `path.data`와 `path.logs` 디렉터리가 존재하고 `opensearch` 사용자가 소유하고 있는지 확인하세요:

``` sh
sudo mkdir -p /var/lib/opensearch /var/log/opensearch
sudo chown -R opensearch:opensearch /var/lib/opensearch /var/log/opensearch
```

  1. OpenSearch를 활성화하고 시작하세요:

    sudo systemctl daemon-reload 
    sudo systemctl enable opensearch 
    sudo systemctl start opensearch 
    sudo systemctl status opensearch
    
  2. 다음 명령을 실행하여 /usr/share/opensearch/plugins 디렉터리에 icu-analyzer 플러그인을 설치하세요:

Important
`analysis-icu` 플러그인은 선택 사항이 아니라 **클러스터의 모든 노드에 필요합니다**. Mattermost의 게시물 및 파일 인덱스 템플릿이 이 플러그인에 의존합니다. 플러그인이 없으면 Mattermost가 이러한 템플릿을 생성할 수 없습니다.

``` sh
sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-icu
```

새로 설치한 플러그인을 로드하려면 확인하기 전에 각 노드에서 OpenSearch를 재시작하세요. `_cat/plugins`는 활성화된 플러그인만 보고하므로 먼저 재시작해야 합니다. 프로덕션 클러스터에서는 모든 노드를 한꺼번에 재시작하지 말고 한 번에 한 노드씩 재시작(롤링 재시작)하세요. 계속하기 전에 모든 노드에 플러그인이 설치되어 활성화되어 있는지 확인하세요. 호스트, 관리자 비밀번호, 클러스터의 CA 인증서 경로를 사용자 환경에 맞게 바꾸세요:

``` sh
curl --silent --show-error --fail-with-body --cacert <path-to-root-ca.pem> --user 'admin:<password>' 'https://<your-opensearch-host>:9200/_cat/plugins?v&h=name,component,version&s=name,component'
```

이 명령을 실행하면 클러스터의 노드마다 `analysis-icu`가 한 번씩 표시됩니다. 어느 노드에서든 `analysis-icu` 줄이 없으면 해당 노드에 플러그인이 설치되지 않은 것입니다.

(선택 사항) CJK 언어 분석기 플러그인: 한국어, 일본어 또는 중국어 콘텐츠 검색을 개선하려면 다음 언어별 분석기 플러그인 중 하나 이상을 설치하세요: analysis-nori(한국어), analysis-kuromoji(일본어), analysis-smartcn(중국어).

sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-nori
sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-kuromoji
sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-smartcn

CJK 플러그인을 설치한 후 로드하려면 OpenSearch를 재시작하세요:

sudo systemctl restart opensearch

그런 다음 EnableCJKAnalyzers 구성 설정을 활성화하세요. 추가 CJK 검색 구성 옵션은 중국어, 일본어, 한국어 검색 활성화를 참조하세요.

Important

기존 인덱싱된 콘텐츠가 있는 서버에서 CJK 분석기를 활성화하는 경우, 기존 게시물에 CJK 분석기가 적용되도록 System Console > Environment > Elasticsearch에서 검색 인덱스를 초기화하고 재빌드해야 합니다.

Terraform (Docker) 예시#

provider "docker" { 
  host = "unix:///var/run/docker.sock" 
}

resource "docker_image" "opensearch" { 
  name = "opensearchproject/opensearch:2.9.0" 
}

resource "docker_container" "opensearch" { 
  name = "opensearch" 
  image = docker_image.opensearch.latest 

  ports { 
    internal = 9200 
    external = 9200 
  }
  ports { 
    internal = 9600 
    external = 9600 
  }

  env = [
    "cluster.name=mattermost-cluster",
    "network.host=0.0.0.0",
    "discovery.type=single-node", # remove for multi-node 
  ]

  restart = "unless-stopped" 
}

resource "null_resource" "install_icu_plugin" {
  depends_on = [docker_container.opensearch]

  provisioner "local-exec" {
    command = "docker exec opensearch /usr/share/opensearch/bin/opensearch-plugin install analysis-icu && docker restart opensearch"
  }
}
  1. AWS OpenSearch를 설치하려면 AWS Console > OpenSearch Service를 여세요.

  2. 다음과 같이 도메인을 생성하세요:

    • 도메인 이름: mattermost-os
    • 엔진 버전: OpenSearch 2.x.
  3. 다음과 같이 클러스터를 구성하세요:

    • 인스턴스 유형: r6g.xlarge.search
    • 데이터 노드: 2
    • 마스터 노드: 2
    • 스토리지: EBS gp3 (1536 GiB, 4608 IOPS, 250 MiB/s)
  4. 네트워크를 다음으로 지정하세요: VPC에 서브넷 2개, 포트 443에서 Mattermost IP를 허용하는 보안 그룹.

Note

포트 9200은 일반적으로 로컬 또는 온프레미스 OpenSearch에 사용됩니다. AWS OpenSearch 도메인은 포트 443을 통한 HTTPS만 지원합니다.

  1. 접근 정책을 구성하세요 (JSON). Mattermost는 AWS SigV4로 OpenSearch 요청에 서명하지 않으므로, 4단계의 VPC와 보안 그룹을 사용해 네트워크 계층에서 접근을 제한하고, 도메인 접근 정책에서는 개방형 principal을 사용하세요:

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": { "AWS": "*" },
        "Action": "es:ESHttp*",
        "Resource": "arn:aws:es:us-east-1:123456789012:domain/mattermost-os/*" }]
    }
    
Warning

IAM principal 기반 접근 정책(예: "Principal": { "AWS": "arn:aws:iam::<account-id>:role/<role-name>" })은 지원되지 않습니다. Mattermost의 OpenSearch 클라이언트는 AWS SigV4로 요청에 서명하지 않으므로, AWS는 이러한 요청을 익명으로 처리하며 IAM으로 제한된 정책은 User: anonymous is not authorized to perform: es:ESHttpGet 오류와 함께 요청을 거부합니다. 네트워크 계층이 아닌 OpenSearch 계층에서 인증을 적용해야 하는 경우, 내부 마스터 사용자와 함께 도메인에서 세분화된 접근 제어를 활성화하고, 해당 자격 증명을 Mattermost Elasticsearch 구성의 서버 사용자 이름 및 서버 비밀번호로 입력하세요.

  1. 다음 고급 설정을 구성하세요 (JSON):

    {
      "action.destructive_requires_name": "false", 
      "rest.action.multi.allow_explicit_index": "true", 
      "indices.query.bool.max_clause_count": "1024", 
      "indices.fielddata.cache.size": "20" 
    }
    
  2. 자동화된 스냅샷 시작 시간을 23 (UTC)으로 구성하고, HTTPS를 적용한 다음 검토 및 생성하세요.

  3. 테스트하려면 다음 명령을 실행하세요:

    curl https://mattermost-os-xxxxxxxxxxx.us-east-1.es.amazonaws.com
    

AWS Terraform 예시#

provider "aws" { 
  region = "us-east-1" 
}

resource "aws_iam_role" "os_service_role" { 
  name = "OSServiceRole" 
  assume_role_policy = <<EOF 
{
  "Version": "2012-10-17", 
  "Statement": [{ 
    "Action": "sts:AssumeRole", 
    "Effect": "Allow", 
    "Principal": { "Service": "es.amazonaws.com" } 
  }]
}
EOF
}

resource "aws_opensearch_domain" "mattermost" { 
  domain_name = "mattermost-os" 
  engine_version = "OpenSearch_2.9"
  cluster_config { 
    instance_type = "r6g.xlarge.search" 
    instance_count = 2 
    dedicated_master_enabled = true 
    dedicated_master_type = "r6g.xlarge.search" 
    dedicated_master_count = 2 
    zone_awareness_enabled = true 
  }

  ebs_options { 
    ebs_enabled = true 
      volume_type = "gp3" 
      volume_size = 1536 
      iops = 4608 
  }

  vpc_options { 
    subnet_ids = ["subnet-blah1", "subnet-blah2"] 
    security_group_ids = ["sg-1234567890"] 
  }

  advanced_options = { 
    "rest.action.multi.allow_explicit_index" = "true" 
    "indices.query.bool.max_clause_count" = "1024" 
    "indices.fielddata.cache.size" = "20" 
    "action.destructive_requires_name" = "false" 
  }

  access_policies = <<POLICY 
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "*"
    },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-east-1:123456789012:domain/mattermost-os/*" 
    }]
  }
  POLICY
    service_software_options { 
      automated_snapshot_start_hour = 23 
    }

    domain_endpoint_options { 
      enforce_https = true 
    }
}

Mattermost 구성#

다음 단계에 따라 AWS OpenSearch 서버를 사용하도록 Mattermost를 구성하고 게시물 인덱스를 생성하세요:

  1. System Console > Environment > Elasticsearch로 이동하세요.

  2. 페이지의 다른 설정을 활성화하려면 Elasticsearch 인덱싱 활성화를 true로 설정하세요.

  3. 백엔드 유형이 opensearch로 설정되어 있는지 확인하세요.

  4. 서버 연결 주소를 Elasticsearch 또는 OpenSearch 클러스터 엔드포인트로 설정하세요.

  5. 클러스터 상태를 모니터링하세요: curl https://mattermost-os-xxxxx.us-east-1.es.amazonaws.com/_cluster/health

  6. (선택 사항) 엔터프라이즈 검색 서버에 접근하기 위한 서버 사용자 이름을 입력합니다.

  7. (선택 사항) 사용자 이름과 연결된 서버 비밀번호를 입력합니다.

  8. 클러스터 스니핑 활성화 (선택 사항)를 설정합니다. 스니핑은 클러스터의 모든 데이터 노드를 자동으로 찾아 연결합니다.

Warning

Elastic Cloud 또는 Amazon OpenSearch Service와 같은 클라우드 호스팅 검색 제공업체를 사용하는 경우 클러스터 스니핑을 활성화하지 마세요. 클라우드 제공업체는 일반적으로 프록시 뒤에 검색 클러스터 노드를 숨기므로, 스니핑된 노드 주소는 네트워크에서 도달할 수 없을 수 있습니다. 제공업체가 연결 풀링을 처리하므로 스니핑은 불필요하며 잠재적으로 문제를 일으킬 수 있습니다.

  1. 기본 인증 자격 증명과 함께 사용하거나 대체하기 위한 선택적 CA 및 클라이언트 인증서 구성 설정을 사용할 수 있습니다. 자세한 내용은 엔터프라이즈 검색 구성 설정 문서를 참조하세요.
  2. 연결 테스트를 선택한 다음 저장을 선택합니다. 서버 연결이 실패하면 구성을 저장하거나 Elasticsearch 또는 AWS OpenSearch로 검색을 활성화할 수 없습니다.
Note

Mattermost v11부터 엔터프라이즈 검색 서버 연결은 지원 패킷 생성 중에 테스트됩니다. 지원 패킷 생성 중 발생하는 연결 오류는 구성 문제 진단에 도움이 되도록 자동으로 패킷에 포함됩니다.

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

엔터프라이즈 검색을 활성화하기 전에 대량 인덱싱이 완료되어야 합니다. 그렇지 않으면 검색 결과가 불완전합니다.

검색 쿼리에 Elasticsearch 활성화를 true로, 자동 완성에 Elasticsearch 활성화를 true로 설정합니다. 구성 업데이트를 저장하고 Mattermost 서버를 재시작합니다.

Note

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

Warning

게시물 볼륨이 높은 배포의 경우 Elasticsearch 또는 AWS OpenSearch가 완전히 구성되고 실행된 후 데이터베이스 검색을 비활성화하는 것도 강력히 권장합니다. Mattermost 서버는 Elasticsearch 또는 OpenSearch를 사용할 수 없는 경우 데이터베이스 검색으로 폴백하며, 이는 게시물 볼륨이 높은 배포에서 성능 저하로 이어질 수 있습니다. Mattermost v11.7부터 서버는 주기적인 상태 확인을 통해 장애를 사전에 감지하고, 요청 타임아웃을 기다리는 대신 첫 번째 상태 확인 실패 시 데이터베이스 검색으로 전환합니다. 자세한 내용은 장애 처리 FAQ를 참조하세요.

구성이 저장되면 데이터베이스에 새로 작성된 게시물이 Elasticsearch 또는 AWS OpenSearch 서버에 자동으로 인덱싱됩니다.

엔터프라이즈 검색 제한 사항#

  1. Elasticsearch 및 AWS OpenSearch는 검색 결과의 관련성을 유지하기 위해 표준 "불용어(stop words)" 세트를 사용합니다. 다음 단어에 대한 결과는 반환되지 않습니다: "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. 따옴표 안의 불용어를 검색하면 검색된 단어 이상의 결과가 반환됩니다 (티켓).
  3. 기본적으로 검색 결과는 사용자의 팀 및 채널 멤버십으로 제한됩니다. 이는 Mattermost 서버에 의해 적용됩니다. 항목은 Mattermost가 쿼리 시 필터링할 수 있는 방식으로 Elasticsearch 또는 AWS OpenSearch에 인덱싱되므로, Mattermost 서버는 모든 Elasticsearch 또는 AWS OpenSearch 요청에서 해당 필터를 적용하여 결과를 좁힙니다. Mattermost v11.6부터 관리자는 멤버십 없이 공개 채널 검색 허용을 설정하여 사용자가 참여하지 않은 공개 채널의 메시지를 속한 팀 범위 내에서 찾을 수 있게 할 수 있습니다.
  4. Elasticsearch 또는 AWS OpenSearch가 제공하는 사용자 검색 및 자동 완성은 사용자 이름, 닉네임, 이름과 성만 일치시킵니다. 이메일 주소는 인덱싱되지 않으므로 시스템 관리자를 포함해 어떤 사용자도 이메일 주소로 찾을 수 없습니다. 데이터베이스에서 제공되는 사용자 검색은 계속해서 이메일 주소와 일치합니다. 채널 및 팀 구성원 검색의 경우 시스템 관리자는 항상 이메일 주소와 일치하며, 다른 모든 사용자는 이메일 주소 표시가 활성화되어 있어야 합니다. System Console > User Management > Users 목록은 해당 설정과 무관하게 항상 이메일 주소와 일치합니다.