ElasticSearchをインストールしてみた(シングル構成)

今回はCentOS9にElasticSearchをインストールした時の、実行結果を紹介します。
サーバ1台、シングルノードクラスタで設定しています。

環境

利用する環境は以下の通りです。

OSCentOS Stream release 9
ElasticSearchelasticsearch-8.15.3-1

インストール手順

Step1. Javaのインストール

Elasticsearchは Java を必要としますが、最新バージョンでは統合されたJavaが含まれているため、別途インストールする必要はないようです。

Step2. Elasticsearchリポジトリの追加

ElasticSearchをインストールするためのリポジトリを追加します。

以下のコマンドを実行します。

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

実行結果は以下の通りです。

[root@localhost ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@localhost ~]#
[root@localhost ~]# cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[root@localhost ~]#
[root@localhost ~]# yum repolist
repo id                                             repo の名前
appstream                                           CentOS Stream 9 - AppStream
baseos                                              CentOS Stream 9 - BaseOS
elasticsearch-8.x                                   Elasticsearch repository for 8.x packages
extras-common                                       CentOS Stream 9 - Extras packages
mysql-8.4-lts-community                             MySQL 8.4 LTS Community Server
mysql-connectors-community                          MySQL Connectors Community
mysql-tools-8.4-lts-community                       MySQL Tools 8.4 LTS Community
rundeck                                             rundeck
[root@localhost ~]#

Step3. Elasticsearchのインストール

ElasticSearchをインストールします。

以下のコマンドを実行します。

dnf install elasticsearch

実行結果は以下の通りです。

[root@localhost ~]# dnf install elasticsearch
CentOS Stream 9 - BaseOS                                                            4.1 MB/s | 9.4 MB     00:02
CentOS Stream 9 - AppStream                                                         6.1 MB/s |  19 MB     00:03
CentOS Stream 9 - Extras packages                                                    38 kB/s |  19 kB     00:00
Elasticsearch repository for 8.x packages                                           4.5 MB/s |  74 MB     00:16
MySQL 8.4 LTS Community Server                                                      2.7 MB/s | 642 kB     00:00
MySQL Connectors Community                                                          479 kB/s |  68 kB     00:00
MySQL Tools 8.4 LTS Community                                                       610 kB/s | 296 kB     00:00
rundeck                                                                             736 kB/s | 2.8 MB     00:03
依存関係が解決しました。
====================================================================================================================
 パッケージ                   アーキテクチャー       バージョン              リポジトリー                     サイズ
====================================================================================================================
インストール:
 elasticsearch                aarch64                8.15.3-1                elasticsearch-8.x                436 M

トランザクションの概要
====================================================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 436 M
インストール後のサイズ: 705 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
elasticsearch-8.15.3-aarch64.rpm                                                    8.1 MB/s | 436 MB     00:53
--------------------------------------------------------------------------------------------------------------------
合計                                                                                8.1 MB/s | 436 MB     00:53
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
  準備中           :                                                                                            1/1
  scriptletの実行中: elasticsearch-8.15.3-1.aarch64                                                             1/1
Creating elasticsearch group... OK
Creating elasticsearch user... OK

  インストール中   : elasticsearch-8.15.3-1.aarch64                                                             1/1
  scriptletの実行中: elasticsearch-8.15.3-1.aarch64                                                             1/1
--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : [elasticユーザのパスワードが表示されます]

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with
 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service

/usr/lib/tmpfiles.d/elasticsearch.conf:1: Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly.

  検証中           : elasticsearch-8.15.3-1.aarch64                                                             1/1

インストール済み:
  elasticsearch-8.15.3-1.aarch64

完了しました!
[root@localhost ~]#

Step4. Elasticsearchの起動と自動起動の有効化

ElasticSearchのサービスを起動、自動起動の有効化を実施します。

以下のコマンドを実行します。

systemctl enable --now elasticsearch

実行結果は以下の通りです。

[root@localhost ~]# systemctl status elasticsearch
○ elasticsearch.service - Elasticsearch
     Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; preset: disabled)
     Active: inactive (dead)
       Docs: https://www.elastic.co
[root@localhost ~]#
[root@localhost ~]# systemctl enable --now elasticsearch
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
[root@localhost ~]#
[root@localhost ~]# systemctl status elasticsearch -l
● elasticsearch.service - Elasticsearch
     Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; preset: disabled)
     Active: active (running) since Sat 2024-10-26 22:03:06 JST; 1min 1s ago
       Docs: https://www.elastic.co
   Main PID: 122363 (java)
      Tasks: 81 (limit: 22571)
     Memory: 2.1G
        CPU: 32.576s
     CGroup: /system.slice/elasticsearch.service
             ├─122363 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.script=/usr/share/elasticsearch/bin/elasticsearch -Dcli.libs=lib>・・・
             ├─122422 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -Djava.security.manager=allow -XX:+AlwaysPreT>・・・
             └─122444 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-aarch64/bin/controller

10月 26 22:02:21 localhost.localdomain systemd[1]: Starting Elasticsearch...
10月 26 22:02:24 localhost.localdomain systemd-entrypoint[122363]: 10 26, 2024 10:02:24 午後 sun.util.locale.provider.LocaleProviderAdapter <clinit>
10月 26 22:02:24 localhost.localdomain systemd-entrypoint[122363]: WARNING: COMPAT locale provider will be removed in a future release
10月 26 22:03:06 localhost.localdomain systemd[1]: Started Elasticsearch.
[root@localhost ~]#

Step5. ファイアーウォール設定 ※必要に応じて設定

firewalldサービスが起動していて、9200/tcp、9300/tcpポートが許可されていない場合は、許可設定の追加が必要です。

以下のコマンドを実行します。

firewall-cmd --add-port={9200/tcp,9300/tcp}
firewall-cmd --runtime-to-permanent

実行結果は以下の通りです。

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s1
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[root@localhost ~]#
[root@localhost ~]# firewall-cmd --add-port={9200/tcp,9300/tcp}
success
[root@localhost ~]# firewall-cmd --runtime-to-permanent
success
[root@localhost ~]#
[root@localhost ~]# firewall-cmd --list-all
You're performing an operation over default zone ('public'),
but your connections/interfaces are in zone 'trusted' (see --get-active-zones)
You most likely need to use --zone=trusted option.

public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 9200/tcp 9300/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[root@localhost ~]#

Step6. 設定ファイル/etc/elasticsearch/elasticsearch.yml修正

ElasticSearchの設定ファイル(/etc/elasticsearch/elasticsearch.yml)を修正します。

デフォルトの設定から修正した箇所は以下の通りです。

[root@localhost elasticsearch]# pwd
/etc/elasticsearch
[root@localhost elasticsearch]#
[root@localhost elasticsearch]# diff elasticsearch.yml.org elasticsearch.yml
17a18
> cluster.name: my-test-cluster
23a25
> node.name: node-1
56a59
> network.host: [サーバのIPアドレス]
109c113
< cluster.initial_master_nodes: ["localhost"]
---
> cluster.initial_master_nodes: ["node-1"]
[root@localhost elasticsearch]#
設定項目説明
cluster.nameクラスター名を指定します。
同じクラスター名を持つノードでクラスターが構成されます。
node.nameノードの一意な名前を設定します。
デフォルトではホスト名が使用されます。
network.hostElasticSearchへアクセスできるネットワークアドレスを指定します。
デフォルトは自分自身のみアクセスできる設定となります。
cluster.initial_master_nodesクラスター初期化時のマスターノード候補を指定します。
複数ノードでクラスターを構成する場合に特に重要で、スプリットブレイン問題を防ぐために必要な設定です。
スプリットブレイン問題:複数のノードで構成されるクラスターシステムにおいて、ネットワーク障害などによりシステムが分断され、複数のノードグループが独立して動作してしまう問題。

設定ファイルの修正が完了したら、設定反映のためサービス再起動を行います。

systemctl restart elasticsearch

動作確認

ElasticSearchにアクセスできるか確認します。

以下のコマンドを実行します。
HTTPリクエストを受け付けるデフォルトのポート番号は9200になります。

curl -u elastic --cacert /etc/elasticsearch/certs/http_ca.crt https://127.0.0.1:9200

実行結果は以下の通りです。
elasticユーザはElasticSearchの管理ユーザです。パスワードはElasticSearchインストール時に自動的に生成されており、標準出力で表示されるため、そちらを入力します。

実行結果から、正常に結果が返ってきたことが確認できました。

[root@localhost elasticsearch]# curl -u elastic --cacert /etc/elasticsearch/certs/http_ca.crt https://127.0.0.1:9200
Enter host password for user 'elastic':
{
  "name" : "node-1",
  "cluster_name" : "my-test-cluster",
  "cluster_uuid" : "ai1-d5_aSPKvJavuxzCpHA",
  "version" : {
    "number" : "8.15.3",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "f97532e680b555c3a05e73a74c28afb666923018",
    "build_date" : "2024-10-09T22:08:00.328917561Z",
    "build_snapshot" : false,
    "lucene_version" : "9.11.1",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}
[root@localhost elasticsearch]#

セキュリティの観点から、elasticユーザのパスワードは、初期パスワードから変更することが望ましいです。
elasticユーザーは強力な管理者権限を持つため、セキュリティを考慮して強力なパスワードを設定することが重要です。また、運用環境では定期的にパスワードを変更することをおすすめします。

まとめ

今回は、ElasticSearchをインストールし、シングル構成で設定した内容を共有しました。

ご参考になれば、幸いです。

以上になります。ありがとうございました。

参考

https://www.server-world.info/query?os=CentOS_Stream_9&p=elasticstack8&f=1
https://qiita.com/Esfahan/items/3c07bfbb57c7098e9531
https://kazuhira-r.hatenablog.com/entry/2019/11/17/234315
https://qiita.com/mkyz08/items/583c5d731a308fa89723
https://dev.classmethod.jp/articles/elasticsearch-starter4/
https://engineering.mercari.com/blog/entry/20220311-97aec2a2f8/

コメント

タイトルとURLをコピーしました