ElasticSearch集群环境搭建

之前章节我们介绍的内容中,只是简单运行了一个单节点的ES服务,也没有配置安全认证等,在实际的生产环境中,ElasticSearch一般都是以集群方式搭建的。集群模式的ES能够实现数据分片和副本模式,能够将计算压力分散到各个节点上,还能实现系统的高可用,避免单点故障。除此之外,ElasticSearch经常搭配Kibana使用,Kibana是Elastic官方提供的一个数据可视化界面。

本篇笔记我们学习如何搭建和配置ElasticSearch集群,并安装Kibana面板。

注:ES7的安全配置要手动配置自签名证书等操作,非常麻烦;ES8版本则简化了这一过程,我们启动ES节点时会自动进行安全配置,这里对ES7不再介绍。

安装ElasticSearch

我这里使用3台主机进行搭建,ES默认会使用4GB大小的堆内存,因此生产环境每个节点配置建议至少8GB内存:

192.168.1.164
192.168.1.165
192.168.1.166

ElasticSearch的安装包在官网即可找到,我这里使用的是8.2.3版本,我们直接下载下来并解压:

tar xvf elasticsearch-8.2.3-linux-x86_64.tar.gz

解压后,将我们需要的IK等插件拷贝到plugins目录。此外,ElasticSearch由于内置了JDK,因此我们其实并不需要额外安装Java运行环境。

配置文件

我们分别按如下配置修改3个节点的config/elasticsearch.yml配置文件:

cluster.name: es-cluster
node.name: node1
network.host: 192.168.1.164
http.port: 9200
transport.port: 9300
  • cluster.name:集群名
  • node.name:当前节点名,每个节点需要唯一
  • network.host:节点主机名,这里我们直接设置为节点IP
  • http.port:提供HTTP服务的端口,默认为9200
  • transport.port:集群通信端口,默认为9300

启动ES节点

我们先启动主节点(其它节点先不要动,ES8启动会自动修改追加安全配置,这是个很垃圾的设计,如果其它节点独自启动加入集群时就会报错):

./bin/elasticsearch
  • -d:以守护进程模式启动,如果不加该参数默认会以前台进程启动,我们可以先以前台方式启动,便于查看启动日志等信息,没问题后再使用守护进程模式。

ES主节点启动成功后会输出如下信息:

同时,查看配置文件config/elasticsearch.yml会发现里面自动追加了如下配置:

#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically
# generated to configure Elasticsearch security features on 23-07-2022 10:16:01
#
# --------------------------------------------------------------------------------

# Enable security features
xpack.security.enabled: true

xpack.security.enrollment.enabled: true

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: true
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["node1"]

#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

从控制台输出信息可知,我们可以使用bin/elasticsearch --enrollment-token <token>命令启动其它节点并加入集群:

./bin/elasticsearch --enrollment-token eyJ2ZXIiOiI4LjIuMyIsImFkciI6WyIxOTIuMTY4LjEuMTY0OjkyMDAiXSwiZmdyIjoiNTJlODYzNDI5Yzc0YTgwYTEwYjcwMmM1MDBlYzgyMTI5YzkyNDk3NDc3MTE1NDk4MDk5YjM3ZWJiM2Y4NGMyNSIsImtleSI6InBMZVpLb0lCX093cVJTQ2VMaGhFOnJReFJ3RWdKUlNDSjR4NHJ3TlF5d1EifQ==

密码认证

之前控制台输出信息中,显示了默认用户名为elastic,密码为c+6jHy1yo9vjieQ4eqj_。如果使用Postman进行测试,我们在请求中加入认证信息即可:

这里注意开启安全配置后,我们需要使用HTTPS协议访问,当然我们的证书的自签名的,Postman中可以设置忽略SSL证书问题,或者也可以手动安装config/certs目录下的自签名CA证书。

如果希望自定义密码,可以执行./bin/elasticsearch-setup-passwords interactive命令,这里就不多介绍了。

访问ES服务

我们这里查看一下集群节点状态:

GET https://192.168.1.164:9200/_cat/nodes?v=true

输出:

ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
192.168.1.165           74          97   2    0.22    0.19     0.29 cdfhilmrstw -      node2
192.168.1.166           48          93   2    0.13    0.18     0.25 cdfhilmrstw -      node3
192.168.1.164           57          66   1    0.27    0.18     0.20 cdfhilmrstw *      node1

安装使用Kibana

Kibana是ElasticSearch官方提供的图形管理面板,使用Node.js开发,我们在官网下载对应ElasticSearch版本的Kibana即可,我这里使用的是8.2.3版本。下载下来直接解压:

tar xvf kibana-8.2.3

解压后我们首先需要修改配置文件config/kibana.yml,其中server.host默认为localhost,我们一般都需要配置为对应服务器的域名或IP地址。配置完成后即可启动Kibana:

./bin/kibana

Kibana初次启动需要填一个token,用于配置ElasticSearch服务端信息,我们可以在ES的目录中执行如下命令生成token:

./bin/elasticsearch-create-enrollment-token -s kibana

自动配置完成后,使用之前的elastic用户即可进入Kibana面板:

我们可以在菜单Management -> Dev Tools执行ES命令:

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。