对Elasticsearch分布式处理性能验证的探索(2): 在Amazon EC2上构建一个集群
首先
系列的目录
-
- Part1: ベンチマークツールRallyを使ってみる
Part2(今回): Amzon EC2にクラスタを構築する
Part3: ノード数/シャード数による性能比較
Part4: レプリカ数による性能比較
之前我们结束了Part1,而今天我们要介绍Part2,即“在Amazon EC2上搭建集群”。
为了进行性能验证,我们将在Amazon EC2上构建一个Elasticsearch集群环境。
Elasticsearch集群配置的复习
验证环境
Amazon EC2
インスタンス数: 2台
インスタンスタイプ: t3.medium
CPU: 2コア
メモリ: 4GB
ストレージ: 8GiB, gp2
OSイメージ
Amazon Linux 2 Kernel 5.10 AMI 2.0.20230119.1 x86_64 HVM gp2
Elasticsearchクラスタ
ノード数: 2
今回は性能比較が目的ですので、2ノードクラスタを使用します
注意: 2ノードクラスタは耐障害性に乏しく、本番環境で使用すべきではありません
Elastic社のマニュアルで2ノードクラスタへの見解
构建Elasticsearch集群的步骤
在node1上,以管理员权限进行以下操作
防火墙设置
firewalldをインストール
$ sudo yum install firewalld
$ sudo systemctl enable firewalld.service
$ sudo systemctl start firewalld.service
- ノード間通信を可能にするため、ポート9200、9300へのアクセス許可
$ sudo firewall-cmd --add-port={9200,9300}/tcp --zone=public --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-port
9200/tcp 9300/tcp
将两个节点的IP地址添加到/etc/hosts文件中。
172.31.6.170 node1
172.31.1.200 node2
安装Elasticsearch
- ElasticsearchリポジトリのGPG keyをインポート
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- rpm repositoryを登録
[elasticsearch]
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=0
autorefresh=1
type=rpm-md
- RPMパッケージをインストール
$ sudo yum check-update --enablerepo=elasticsearch
$ sudo yum install elasticsearch --enablerepo=elasticsearch -y
将Elasticsearch作为服务启用
$ sudo systemctl enable elasticsearch
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
编辑Elasticsearch的配置文件。
请在/etc/elasticsearch/elasticsearch.yml文件中设置并保存以下项目。
-
- クラスタ名
cluster.name: mycluster
クラスタ参加ノード
discovery.seed_hosts: [“node1”, “node2”]
Elasticsearchサービスに他のノードからアクセス可能に
network.host: 0.0.0.0
index自動作成設定を最終行に追加
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
启动Elasticsearch并重置elastic用户的密码
- Elasticsearchを起動
$ sudo systemctl start elasticsearch
- elasticユーザーのパスワードをリセット
$ sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
This tool will reset the password of the [elastic] user.
You will be prompted to enter the password.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Re-enter password for [elastic]:
Password for the [elastic] user successfully reset.
- Elasticsearchにhttpsアクセスし、ステータス確認
$ sudo curl -k -u elastic https://localhost:9200
Enter host password for user 'elastic':
{
"name" : "ip-172-31-6-170.ec2.internal",
"cluster_name" : "mycluster",
"cluster_uuid" : "8KWJ-DEsQnyN9ynLU4oZHw",
"version" : {
"number" : "8.6.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "180c9830da956993e59e2cd70eb32b5e383ea42c",
"build_date" : "2023-01-24T21:35:11.506992272Z",
"build_snapshot" : false,
"lucene_version" : "9.4.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
创建一个用于向仅包含node1的集群注册其他节点的令牌。
$ sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
eyJ2ZXI...(中略)...cifQ==
保留已创建的注册令牌。
在node2上,以管理员权限执行以下操作。
设定防火墙
firewalldをインストール
$ sudo yum install firewalld
$ sudo systemctl enable firewalld.service
$ sudo systemctl start firewalld.service
- ノード間通信を可能にするため、ポート9200、9300へのアクセス許可
$ sudo firewall-cmd --add-port={9200,9300}/tcp --zone=public --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-port
9200/tcp 9300/tcp
在/etc/hosts文件中添加了两个节点的IP地址。
172.31.6.170 node1
172.31.1.200 node2
安装Elasticsearch。
- EslasticsearchリポジトリのGPG keyをインポート
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- rpm repositoryを登録
[elasticsearch]
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=0
autorefresh=1
type=rpm-md
- RPMパッケージをインストール
$ sudo yum check-update --enablerepo=elasticsearch
$ sudo yum install elasticsearch --enablerepo=elasticsearch -y
将Elasticsearch作为服务启用
$ sudo systemctl enable elasticsearch
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
使用通过node1创建的注册令牌,将node2注册到集群中。
$ sudo /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token eyJ2ZXI...(中略)...cifQ==
This node will be reconfigured to join an existing cluster, using the enrollment token that you provided.
This operation will overwrite the existing configuration. Specifically:
- Security auto configuration will be removed from elasticsearch.yml
- The [certs] config directory will be removed
- Security auto configuration related secure settings will be removed from the elasticsearch.keystore
Do you want to continue with the reconfiguration process [y/N]y
编辑Elasticsearch的配置文件
将以下内容保存至/etc/elasticsearch/elasticsearch.yml文件中:
-
- クラスタ名
cluster.name: mycluster
Elasticsearchサービスに他のノードからアクセス可能に
network.host: 0.0.0.0
index自動作成設定を最終行に追加
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
启动Elasticsearch
$ sudo systemctl start elasticsearch
- Elasticsearchへhttpsアクセスし、ステータス確認
$ curl -k -u elastic https://localhost:9200
Enter host password for user 'elastic':
{
"name" : "ip-172-31-1-200.ec2.internal",
"cluster_name" : "mycluster",
"cluster_uuid" : "8KWJ-DEsQnyN9ynLU4oZHw",
"version" : {
"number" : "8.6.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "180c9830da956993e59e2cd70eb32b5e383ea42c",
"build_date" : "2023-01-24T21:35:11.506992272Z",
"build_snapshot" : false,
"lucene_version" : "9.4.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
在任一节点上,检查集群的状态。
$ sudo curl -k -u elastic https://localhost:9200/_cat/nodes?v
Enter host password for user 'elastic':
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.31.1.200 24 96 21 0.53 0.29 0.12 cdfhilmrstw - ip-172-31-1-200.ec2.internal
172.31.6.170 51 95 5 0.11 0.11 0.08 cdfhilmrstw * ip-172-31-6-170.ec2.internal
在集群中存在两个节点,其中node1成为了主节点。
结尾
为了进行性能验证,我们在Amzon EC2上构建了一个包含两个节点的Elasticsearch集群。
下一步将使用基准测试工具Rally进行性能测量。
敬请期待。