여러 개의 노드가 모인 것
클러스터를 구성하는 하나의 (JVM) 인스턴스
shard = hash(_routing) % $(primary shard num)
json 요청을 텍스트로 확인하는 것은 한계가 있기 때문에 시각화를 이용
Elasticvue는 다음과 같은 기능을 제공하는 Opensearch 클라이언트
크롬 확장 프로그램으로 쉽게 설치가 가능하고, 복잡한 환경 설정이 필요 없다는 장점
설치 링크
public IP를 사용해 성공적으로 연결하면 위와 같은 메세지가 출력
# opensearch 설치
$ cd /home/ubuntu
$ sudo apt update
$ sudo apt install build-essential -y
$ wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.4.0/opensearch-2.4.0-linux-x64.tar.gz
$ tar -xvf opensearch-2.4.0-linux-x64.tar.gz
$ echo 'export OPENSEARCH_HOME=/home/ubuntu/opensearch-2.4.0' >> ~/.bashrc
$ source ~/.bashrc
$ sudo swapoff -a
$ sudo vi /etc/sysctl.conf
vm.max_map_count=262144
$ sudo sysctl -p # Reload
$ cat /proc/sys/vm/max_map_count # 변경값 확인
# systemctl 등록
$ sudo vi /etc/systemd/system/opensearch.service
[Unit]
Description=OpenSearch
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
RuntimeDirectory=data
WorkingDirectory=/home/ubuntu/opensearch-2.4.0
ExecStart=/home/ubuntu/opensearch-2.4.0/bin/opensearch -d
User=ubuntu
Group=ubuntu
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=75
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable opensearch.service
AMI(이미지) 생성: 인스턴스 > 작업 > 이미지 및 템플릿 > 이미지 생성
이미지로부터 인스턴스 생성: 이미지 > AMI > AMI로 인스턴스 시작
ssh를 통해 접속한 후
$ vi $OPENSEARCH_HOME/config/opensearch.yml
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-cluster_manager
node.roles: [ cluster_manager ]
network.host: 0.0.0.0
discovery.seed_hosts: [0.0.0.0]
cluster.initial_cluster_manager_nodes: ["opensearch-cluster_manager"]
$ sudo systemctl restart opensearch.service
$ vi $OPENSEARCH_HOME/config/opensearch.yml
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-d1
node.roles: [ data, ingest ]
network.host: 0.0.0.0
discovery.seed_hosts: [$manager-public-ip]
$ sudo systemctl restart opensearch.service
elasticvue를 확인하면 data node가 하나 증가한 것을 확인할 수 있다
$ vi $OPENSEARCH_HOME/config/opensearch.yml
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-d2
node.roles: [ data, ingest ]
network.host: 0.0.0.0
discovery.seed_hosts: [$manager-public-ip]
$ sudo systemctl restart opensearch.service
$ vi $OPENSEARCH_HOME/config/opensearch.yml
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-d2
node.roles: [] # 비어있는 경우 cordinator node
network.host: 0.0.0.0
discovery.seed_hosts: [$manager-public-ip]
$ sudo systemctl restart opensearch.service
sudo systemctl stop opensearch.service
manager 노드에 접속하여 매니저 노드를 중지
elasticvue에 coordinator 노드의 IP 주소를 주어도 클러스터 전체 정보를 확인할 수 없음
→ cluster 정보는 manager 노드만 갖고 있기 때문에
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-d2
node.roles: [ data, ingest, cluster_manager ] // cluster_manager 역할을 줌
network.host: 0.0.0.0
discovery.seed_hosts: [$cluster_managerIP]
data node에 cluster_manager 역할을 주더라도 coordinator는 전체 클러스터 구조를 알 수 없음
→ 여전히 seed_hosts로 manager node의 IP주소를 보고 있기 때문에
seed_host를 data node2의 IP 주소로 설정
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-cluster_manager
node.roles: [ cluster_manager ]
network.host: 0.0.0.0
discovery.seed_hosts: [43.202.53.111] # seed host를 data node2로 설정
cluster.initial_cluster_manager_nodes: ["opensearch-d2"] # initial cluster manager를 data2 node로 설정
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-d1
node.roles: [ data, ingest, cluster_manager ]
network.host: 0.0.0.0
discovery.seed_hosts: ["$cluster_managerIP"]
plugins.security.disabled: true
cluster.name: opensearch-cluster
node.name: opensearch-d2
node.roles: [ data, ingest, cluster_manager ]
network.host: 0.0.0.0
discovery.seed_hosts: ["3.34.49.212"]
→ cluster manager node가 죽어도 coordinator node로 정상적으로 cluster에 접근이 가능
node.roles: [ cluster_manager, voting_only ]
curl -XPUT "$OPENSEARCH_REST_API/_ingest/pipeline/test-pipeline?pretty=true" \
-H "Content-Type: application/json" \
-d '
{
"processors": [
{
"set": {
"field": "field1",
"value": 10
}
},
{
"lowercase": {
"field": "field2"
}
}
]
'