背景
ARMアーキテクチャのCPU(aarch64)版のElasticSearchを負荷試験して、
どういう結果になるかを見ようとしている。
そのための環境構築をやっていく。
サマリ
- Amazon EC2でElasticSearchサーバを建てる
- A: m6g.xlarge x3台
- B: m5.xlarge x3台
- ベンチマークサーバを建てる
- m5.xlargeくらいで
- 1台につき数回ずつベンチマーク実行
※ ElasticSearchのサーバを3台建てるのはインスタンスの誤差をなくすため
ElasticSearchサーバの作成
を参照してやっていく。
x86_64でもaarch64でも手順は変わらないので、
AMI選択時の以外はすべて一緒でやっていく。
リポジトリを追加
sudo vi /etc/yum.repos.d/elasticsearch.repo
以下通り記述
[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
ElasticSearchをインストール
sudo yum install --enablerepo=elasticsearch elasticsearch
ElasticSearchを起動
sudo systemctl start elasticsearch.service
curlを投げて返ってくることを確認
curl -X GET "localhost:9200/?pretty"
ElasticSearchの設定変更
オフィシャルのimportant confgurationに沿って /etc/sysconfig/elasticsearch
を直していく。
個別の設定項目については書いてあるとおりなので特に触れないが、
ヒープサイズは実際のRAMの半分を目安にしましょうということなので8gを指定した。
ES_JAVA_OPTS="-Xms8g -Xmx8g"
また、シングルノードで動かすので、 /etc/elasticsearch/elasticsearch.yml
に以下を追記した。
network.host: 0.0.0.0 discovery.type: single-node
ベンチマークサーバの作成
同様にオフィシャルの手順を参考に構築していく。
インスタンス作成は割愛。タイプm5.xlargeのAmazon Linux 2。
EPELリポジトリを有効にして
sudo amazon-linux-extras install -y epel
python3, git, pbzip2 gccのインストール
sudo yum install python3 python3-devel git pbzip2 gcc
rallyのインストール
python3 -m pip install --user esrally
PATHを通す
export PATH=$PATH:~/.local/bin
ベンチマークの実施手順
ベンチマークサーバから以下を実行する( ${hostname}
は適宜変更)。
esrally --track=pmc --target-hosts=${hostname}:9200 --pipeline=benchmark-only
Excel等で集計するためにベンチマーク結果ファイル(csv)の設定をしておくと良い
--report-file=/path/to/result.csv
もしテストデータのダウンロードに時間がかかりタイムアウトした場合こういうエラーが出る。
[WARNING] Could not terminate all internal processes within timeout. Please check and force-terminate all Rally processes.
が、そのままダウンロードは続けてくれるのでその場ではキャンセルしないほうが良い。
ただしその後の処理(解凍等)をやってスッと止まってしまうので、、、
[INFO] Preparing file offset table for [/home/ec2-user/.rally/benchmarks/data/pmc/documents.json] ... [OK]
と出たあたりで止めて再実行するのが良いと思われる。