お金をかけずにサーバーの勉強をしよう

OpenSearchインストール

2024年10月28日
メニューへ戻る

こんにちは。

このサイトも、書くものが増える度にブログ様になってきていますが、私は元々こういう語りかけのスタイルの方が書きやすいのかも知れません。

数年前に Windowsサーバーやら Linuxサーバーのログを OSSを使って画一的に収集することが流行ったことがあって、その形態は

ログ吐き元 → ログ収集サーバー → データベース → GUIツール

という感じの構成なんですが、ログ収集サーバーの代表的なものとして

がありました。

fluentdは Rubyでできていて、私は Rubyを触ったことが無かったものですから、Logstashでやってみることにしました。

Logstashは Elastic社が作っているんですが、同社のメインプロダクトが Elasticsearch という全文検索データベースなものですから、上記の仕組みで収集したログの格納先 DBとして Elasticsearch、収集したログを見る GUIとして、やはり同社の Kibanaってツールを知るに至りました。

そうして Elasticsearchを知ることとなり、それが(一応) OSSにも関わらずエラく高機能なものであることを知って、データ分析基盤としての DBとして Elasticsearchを仕事で使ってみたいと思うようになりました。


丁度その頃パブリッククラウド界隈である問題が持ち上がりました。

クラウドサービスは OSSへの貢献なしに OSSを使って荒稼ぎをしている

というもので、AWSの Elasticsearchを使った全文検索サービスの AES(Amazon Elasticsearch Service)はその槍玉に上がった一つです。
(他には MongoDBとかあった)

Amazonと Elasticはお互いに批難の応酬をして、Elastic社が Elasticsearchの商用部分のソースのライセンスを変更して、クラウドサービスでの利用に制限をかけてしまいました。

Amazonはそれに従うと思いきや、いきなり Elastic社の商用部分のソースを一切省いたものを Elasticsearchからフォーク(分離)させて「Open Distro for Elasticsearch」として、Elastic社とは袂を分かって独自路線を行くことにしたんですね。

その後「Open Distro for Elasticsearch」が名前を変えたものがこれ。
OpenSearsh

ご参考:Elastic
シンプル&寛容になったElastic License v2の導入と、オプションのSSPLの維持について

ご参考:Amazon
OpenSearchのFAQ


大分前置きが長くなりましたが、ここでは OpenSearchをインストールしてみようと思います。

本家の Elasticsearchからフォークしたとは言っても、余り変わりはないので OpenSearchが分かるなら Elasticsearchも分かるでしょう、多分。


本家の Elasticも以前は完全OSS版を配布していたんですが、ライセンス変更後しばらくして無くなってしまったか、新しいバージョンの配布を止めてしまったようで、タダでやろうとすると OpenSearchにならざるを得ない様子です。
(もしかしたら私が見つけられてないだけかも知れませんが)

ただ上記の闘いが勃発した頃も、OSS版の Elasticsearchにはユーザー管理機能がなく(有償版にはあった)、Open Distro for Elasticsearchにはあったので、後者で環境構築の練習をしていた覚えがあります。

また長くなってしまいました…。

==========
と、ここまでが以前書いていたものです。(2023年7月13日と記録にありました)

2024年8月末にまたOSSに戻ったって話を聞いています。

以下『Software Design』誌で有名な技術評論社のニュースです。
Elasticsearchが再びOSSに ―ライセンスにAGPLを追加


2024年10月28日時点の OpenSearchの最新バージョンは 2.17.1です。

ここでは Ubuntu Server 24.04.1にインストールをします。
OS全体に影響する設定が入りますので、他のものと相乗りさせずに OpenSearch専用の OSを用意するのが良いでしょう。

Ubuntu Serverのインストールについては「Ubuntu 24.04 Server インストール」に書いています。

Opensearchは Javaで作られたプログラムですので、先に OpenJDK 21を入れておきます。
Open JDKのインストールについては「Java SE Development Kit (JDK) 21 インストール」に書いています。

これらが済んだところからスタートです。


0.snap版でインストール

Ubuntuへのインストールは、以前は細々と面倒だったのですが、現在は最新版が snapのパッケージが用意されていましたので、まずはそれを使ってみます。

snapパッケージの Opensearchは、先の LTSであった Ubuntu 22.04の頃には「LTSは対象外」となっていて debパッケージで導入したんですが、24.04ではその縛りがなくなっています。

パッケージを探してみます。

subro@UbuntuServer2404-1:~$ snap search opensearch
Name                   Version  Publisher        Notes  Summary
opensearch             2.17.0   canonical✓       -      OpenSearch makes it easy to ingest, search, visualize, and analyze your data.
opensearch-dashboards  2.17.0   dataplatformbot  -      OpenSearch Dashboards: community-driven OpenSearch visualization suite.

マイナーバージョンがやや古いですが、殆ど最新ですね。

「snapかぁ…また変な改変が入ってないと良いけど…」とやや複雑な心境ながら、進めて行きます。

インストールします。

subro@UbuntuServer2404-1:~$ sudo snap install opensearch
2024-10-28T07:15:52+09:00 INFO Waiting for automatic snapd restart...
opensearch (2/stable) 2.17.0 from Canonical✓ installed

インストールできました。

もう立ち上がってるんでしょうか?
psコマンドと grepコマンドで opensearchっぽい常駐プロセスがないか見てみます。

subro@UbuntuServer2404-1:~$ ps -ef | grep search
subro       3225    1788  0 07:26 pts/0    00:00:00 grep --color=auto search

何もありませんな…。

そもそも Opensearchはどこにインストールされているのか。
snapパッケージですから、全て snapの管理下になっているはず。

ですので [/bin/snap]ディレクトリの中を覗いてみます。

subro@UbuntuServer2404-1:~$ ls -l /snap/bin
合計 0
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.plugin-add -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.plugins-list -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.plugins-remove -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.security-init -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.setup -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.test-cluster-health-green -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.test-node-up -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 10月 28 07:18 opensearch.test-security-index-created -> /usr/bin/snap

うん、何かありますね。

これからどうすりゃ良いのか…ですが、GitHubに手順がありました。
canonical /opensearch-snap

私は Opensearchをイジった経験があるからやれそうですけど「コレ…初心者には難しくね?」というのが正直な感想です。

それに Opensearchってより snapパッケージでのインストール方法って特殊な色合いの方が強く出そうで、考えた末、snap版は辞めることにしました。(サーセン)

インストールしたパッケージを消します。

subro@UbuntuServer2404-1:~$ sudo snap remove opensearch
opensearch removed

さらば snap版、また逢う日まで!
その時心は何かを話すだろう


1.ダウンロード(debパッケージ編)

次の手ですが、Debian用の debパッケージはありますのでこちらでやってみます。

ダウンロードはこちらから。
Download & Get Started

[Platform:] に [Linux]を、[Package:] に [x64 / deb] を選択し、Downloadを押します。
ダウンロードサイト

ダウンロードが完了すると [opensearch-2.17.1-linux-x64.deb]ファイルができました。
好きな方法でこのファイルを Ubuntu Serverに持っていきます。

なお、WEBブラウザのない Ubuntu Serverで直接ダウンロードするのであれば、curlコマンドを使ってこんな風にやれます。

subro@UbuntuServer2404-1:~$ curl -OL https://artifacts.opensearch.org/releases/bundle/opensearch/2.17.1/opensearch-2.17.1-linux-x64.deb
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  864M  100  864M    0     0  10.8M      0  0:01:19  0:01:19 --:--:-- 10.6M

subro@UbuntuServer2404-1:~$ ls -l opensearch-2.17.1-linux-x64.deb
-rw-rw-r-- 1 subro subro 906243946 10月 28 20:02 opensearch-2.17.1-linux-x64.deb

こちらの方が手間がないですね。


2.インストール(debパッケージ編)

インストール手順はこちらです。
Debian Step 1: Download and install OpenSearch

ダウンロードしたパッケージをインストールしますが、インストールのコマンド実行時に管理ユーザーの初期パスワードを設定するようです。

パスワードは、8文字以上で、英字大文字と小文字・数字・記号をそれぞれ 1文字以上ずつ入れたものにする必要があります。
ので「Subroさんはマネージャー」にしました。

subro@UbuntuServer2404-1:~$ sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=Subro38manager- dpkg -i opensearch-2.17.1-linux-x64.deb
以前に未選択のパッケージ opensearch を選択しています。
(データベースを読み込んでいます ... 現在 124529 個のファイルとディレクトリがインストールされています。)
opensearch-2.17.1-linux-x64.deb を展開する準備をしています ...
Running OpenSearch Pre-Installation Script
opensearch (2.17.1) を展開しています...
opensearch (2.17.1) を設定しています ...
Running OpenSearch Post-Installation Script
### NOT starting on installation, please execute the following statements to configure opensearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable opensearch.service
### You can start opensearch service by executing
 sudo systemctl start opensearch.service
### Create opensearch demo certificates in /etc/opensearch/
 See demo certs creation log in /var/log/opensearch/install_demo_configuration.log
### Breaking change in packaging since 2.13.0
 In 2.13.0 and later releases of OpenSearch, we have changed the permissions associated with access to installed files
 If you are configuring tools that require read access to the OpenSearch configuration files, we recommend you add the user that runs these tools to the 'opensearch' group
 For more information, see https://github.com/opensearch-project/opensearch-build/pull/4043
libc-bin (2.39-0ubuntu8.3) のトリガを処理しています ...

インストールできました。
メッセージに出ているように、この時点ではまだ OpenSearchは起動していません。


3.OpenSearch初期設定

手順はこちら。
Debian Step 3: Set up OpenSearch in your environment

OpenSearchの設定ファイル [/etc/opensearch/opensearch.yml]を編集します。

1箇所目:Ubuntu Serverのネットワークインターフェイス全てで待ち受ける設定
#network.host: 192.168.0.1
 ↓↓↓↓↓
network.host: 0.0.0.0  ← コメントアウトの[#]を消すのを忘れずに

2箇所目:本来は複数のノードで構成するものですがここではシングルノード構成にします
     [Discovery]のセクションの最後の行に入れたいので[Gateway]セクションの上に書きました。
# ---------------------------------- Gateway -----------------------------------
 ↓↓↓↓↓
discovery.type: single-node
# ---------------------------------- Gateway -----------------------------------

今回は初期インストールですので、手順にある [plugins.security.disabled: false] の設定はしなくて構いません。

次は Java起動時のメモリ割当てを変更します。
ここは各々のサーバー環境で割り当てられるメモリ量が変わってきますので適宜自分の環境に合わせましょう。

私の Ubuntu Serverは 8GBのメモリ割当になっているので、手順の通りに 4GBを OpenSearchに割り当てることにしました。

OpenSerchの JVM設定ファイル [/etc/opensearch/jvm.options] を編集します。

-Xms1g
-Xmx1g
 ↓↓
-Xms4g  ← 起動時に確保するメモリ量
-Xmx4g  ← 最大メモリ量

設定はこれで終わりです。


4.起動

パッケージインストールにより、systemd用のサービス定義をするファイルができていますので、これの自動起動を有効にします。

subro@UbuntuServer2404-1:~$ sudo systemctl enable opensearch
Synchronizing state of opensearch.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable opensearch
Created symlink /etc/systemd/system/multi-user.target.wants/opensearch.service → /usr/lib/systemd/system/opensearch.service.

有効化されました。

起動します。
(Javaのオプションが長いので縦に並べ直しています。)

subro@UbuntuServer2404-1:~$ sudo systemctl start opensearch

subro@UbuntuServer2404-1:~$ systemctl status opensearch
● opensearch.service - OpenSearch
     Loaded: loaded (/usr/lib/systemd/system/opensearch.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-10-28 20:24:53 JST; 24s ago
       Docs: https://opensearch.org/
   Main PID: 4004 (java)
      Tasks: 72 (limit: 9387)
     Memory: 4.4G (peak: 4.4G)
        CPU: 1min 1.277s
     CGroup: /system.slice/opensearch.service
             └─4004 /usr/share/opensearch/jdk/bin/java -Xshare:auto
                                                         -Dopensearch.networkaddress.cache.ttl=60
                                                         -Dopensearch.networkaddress.cache.negative.ttl=10
                                                         -XX:+AlwaysPreTouch
                                                         -Xss1m
                                                         -Djava.awt.headless=true
                                                         -Dfile.encoding=UTF-8
                                                         -Djna.nosys=true
                                                         -XX:-OmitStackTraceInFastThrow
                                                         -XX:+ShowCodeDetailsInExceptionMessages
                                                         -Dio.netty.noUnsafe=true
                                                         -Dio.netty.noKeySetOptimization=true
                                                         -Dio.netty.recycler.maxCapacityPerThread=0
                                                         -Dio.netty.allocator.numDirectArenas=0
                                                         -Dlog4j.shutdownHookEnabled=false
                                                         -Dlog4j2.disable.jmx=true
                                                         -Djava.security.manager=allow
                                                         -Djava.locale.providers=SPI,COMPAT
                                                         -Xms4g
                                                         -Xmx4g
                                                         -XX:+UseG1GC
                                                         -XX:G1ReservePercent=25
                                                         -XX:InitiatingHeapOccupancyPercent=30
                                                         -Djava.io.tmpdir=/tmp/opensearch-244250443437818959
                                                         -XX:+HeapDumpOnOutOfMemoryError
                                                         -XX:HeapDumpPath=/var/lib/opensearch
                                                         -XX:ErrorFile=/var/log/opensearch/hs_err_pid%p.log "-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/opensearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m"
                                                         -Djava.security.manager=allow
                                                         --add-modules=jdk.incubator.vector
                                                         -Djava.util.concurrent.ForkJoinPool.common.threadFactory=org.opensearch.secure_sm.SecuredForkJoinWorkerThreadFactory
                                                         -Dclk.tck=100
                                                         -Djdk.attach.allowAttachSelf=true
                                                         -Djava.security.policy=file:///etc/opensearch/opensearch-performance-analyzer/opensearch_security.policy
                                                         --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED
                                                         -XX:MaxDirectMemorySize=2147483648
                                                         -Dopensearch.path.home=/usr/share/opensearch
                                                         -Dopensearch.path.conf=/etc/opensearch
                                                         -Dopensearch.distribution.type=deb
                                                         -Dopensearch.bundled_jdk=true
                                                         -cp "/usr/share/opensearch/lib/*"
                                                         org.opensearch.bootstrap.OpenSearch
                                                         -p /var/run/opensearch/opensearch.pid
                                                         --quiet
10月 28 20:24:42 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: System::setSecurityManager has been called by org.opensearch.bootstrap.OpenSearch (file:/usr/share/opensearch/lib/opensearch-2.17.1.jar)
10月 28 20:24:42 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: Please consider reporting this to the maintainers of org.opensearch.bootstrap.OpenSearch
10月 28 20:24:42 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: System::setSecurityManager will be removed in a future release
10月 28 20:24:43 UbuntuServer2404-1 systemd-entrypoint[4004]: 10 28, 2024 8:24:43 午後 sun.util.locale.provider.LocaleProviderAdapter <clinit>
10月 28 20:24:43 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: COMPAT locale provider will be removed in a future release
10月 28 20:24:43 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: A terminally deprecated method in java.lang.System has been called
10月 28 20:24:43 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: System::setSecurityManager has been called by org.opensearch.bootstrap.Security (file:/usr/share/opensearch/lib/opensearch-2.17.1.jar)
10月 28 20:24:43 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: Please consider reporting this to the maintainers of org.opensearch.bootstrap.Security
10月 28 20:24:43 UbuntuServer2404-1 systemd-entrypoint[4004]: WARNING: System::setSecurityManager will be removed in a future release
10月 28 20:24:53 UbuntuServer2404-1 systemd[1]: Started opensearch.service - OpenSearch.

 q で閲覧終了です

起動しましたけど「A terminally deprecated」っていずれ無くなる非推奨のメソッドを使ってるって警告が出ていますね。

インストールの作業はこれで完了です。
TarBallでインストールしていた以前と比べて随分と楽になりました。


5.動作確認

手順ではこの後で証明書やユーザーを作ったりするのですが、端折って動作確認をしてしまいます。

手順ではこちら。
Verify that the service is running

curlコマンドでアクセスします。
ユーザーは [admin]で、パスワードはさっき設定したやつ。

subro@UbuntuServer2404-1:~$ curl https://localhost:9200 -u admin:Subro38manager- -k
{
  "name" : "UbuntuServer2404-1",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "ZCYDBbDEROC09nqM5znfpg",
  "version" : {
    "distribution" : "opensearch",
    "number" : "2.17.1",
    "build_type" : "deb",
    "build_hash" : "1893d20797e30110e5877170e44d42275ce5951e",
    "build_date" : "2024-09-26T21:59:47.005429436Z",
    "build_snapshot" : false,
    "lucene_version" : "9.11.1",
    "minimum_wire_compatibility_version" : "7.10.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}

上手く動いているようです。
これでデータの投入も検索もできるはずです。

ついでに手順にある通り、デフォルトで入っているプラグインのリストを取ってみましょう。

subro@UbuntuServer2404-1:~$ curl -X GET https://localhost:9200/_cat/plugins?v -u 'admin:Subro38manager-' -k
name               component                            version
UbuntuServer2404-1 opensearch-alerting                  2.17.1.0
UbuntuServer2404-1 opensearch-anomaly-detection         2.17.1.0
UbuntuServer2404-1 opensearch-asynchronous-search       2.17.1.0
UbuntuServer2404-1 opensearch-cross-cluster-replication 2.17.1.0
UbuntuServer2404-1 opensearch-custom-codecs             2.17.1.0
UbuntuServer2404-1 opensearch-flow-framework            2.17.1.0
UbuntuServer2404-1 opensearch-geospatial                2.17.1.0
UbuntuServer2404-1 opensearch-index-management          2.17.1.0
UbuntuServer2404-1 opensearch-job-scheduler             2.17.1.0
UbuntuServer2404-1 opensearch-knn                       2.17.1.0
UbuntuServer2404-1 opensearch-ml                        2.17.1.0
UbuntuServer2404-1 opensearch-neural-search             2.17.1.0
UbuntuServer2404-1 opensearch-notifications             2.17.1.0
UbuntuServer2404-1 opensearch-notifications-core        2.17.1.0
UbuntuServer2404-1 opensearch-observability             2.17.1.0
UbuntuServer2404-1 opensearch-performance-analyzer      2.17.1.0
UbuntuServer2404-1 opensearch-reports-scheduler         2.17.1.0
UbuntuServer2404-1 opensearch-security                  2.17.1.0
UbuntuServer2404-1 opensearch-security-analytics        2.17.1.0
UbuntuServer2404-1 opensearch-skills                    2.17.1.0
UbuntuServer2404-1 opensearch-sql                       2.17.1.0
UbuntuServer2404-1 opensearch-system-templates          2.17.1.0
UbuntuServer2404-1 query-insights                       2.17.1.0

取れました。

日本語プラグインの kuromoji はないですね。
これだと日本語検索で問題が出るはずです。

ここから先は GUIで設定する方が楽です。
GUIツールの OpenSearch Dashboardsのインストールについては
OpenSearch Dashboardsインストール」に書いています。


思った通り、OpenSearchの本は無いようです。