ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证

小菜鸟的个人博客已经正式上线且对外开放啦…

博客访问地址小菜鸟的大梦想

欢迎各位同学扫码关注本人公众号 ↓↓↓ 更多优质内容将 首发 公众号
ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证



前言

本篇教程基于上篇《ELK系列(二)、ElasticSearch单实例安装》的基础上进行的集群安装教程,此处默认ES单点安装已成功启动并运行。

ES集群安装采用单台服务器多实例方式进行,单实例方式安装较为简单,直接分发安装包,修改相应的配置文件即可,读者可根绝多实例安装方式自行搭建。

主机名 节点角色 新增主机映射
hadoop100 master节点、data节点 es-master-1、es-hot-1
hadoop101 data节点 es-hot-2

ES安装包目录:/opt/module/elasticsearch-7.10.2
配置文件目录:/data1/elk/esconfig
数据存放目录:/data1/elk/esdata
日志所在目录:/data1/elk/eslogs
如果上述目录先前单点安装时已存在并且data相应有写入数据,建议删除重新创建
上述目录权限均为 elasticsearch 用户和 elasticsearch 组(可参考上篇文章添加用户命令)


创建master、data节点配置文件

hadoop100节点

1. hadoop100创建master、data节点相关目录

mkdir -p /data1/elk/esconfig/master
mkdir -p /data1/elk/esconfig/hot
mkdir -p /data1/elk/esdata/master
mkdir -p /data1/elk/esdata/hot
mkdir -p /data1/elk/eslogs/master
mkdir -p /data1/elk/eslogs/hot

2. 分发配置文件并进行修改

cp -r /opt/module/elasticsearch-7.10.2/config/* /data1/elk/esconfig/master/
cp -r /opt/module/elasticsearch-7.10.2/config/* /data1/elk/esconfig/hot/

修改 master/elasticsearch.yml

cluster.name: es-cluster
node.name: es-master-1
network.host: 192.168.33.100
http.port: 9200
transport.tcp.port: 9300

node.master: true
node.data: false

# 配置数据存储目录,必需保证目录存在,多个目录用逗号分隔
path.data: /data1/elk/esdata/master
path.logs: /data1/elk/eslogs/master

bootstrap.memory_lock: true

discovery.seed_providers: file
# es启动时,参与选举master的节点列表,即拥有选举资格的节点
cluster.initial_master_nodes: ["es-master-1"]

discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5

# head 插件需要这打开这两个配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.max_content_length: 100mb

其中 es 节点列表配置采用 discovery.seed_providers: file 替换,需在相对路径下创建 unicast_hosts.txt 文件,内容为ES集群节点 ip:port,独占一行。内容如下:
192.168.33.100:9300

同样操作修改 hot/elasticsearch.yml

cluster.name: es-cluster
node.name: es-hot-1
network.host: 192.168.33.100
http.port: 9201
transport.tcp.port: 9301

node.master: false
node.data: true

# 配置数据存储目录,必需保证目录存在,多个目录用逗号分隔
path.data: /data1/elk/esdata/hot
path.logs: /data1/elk/eslogs/hot

bootstrap.memory_lock: true

discovery.seed_providers: file
# es启动时,参与选举master的节点列表,即拥有选举资格的节点
cluster.initial_master_nodes: ["es-master-1"]

discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5

# head 插件需要这打开这两个配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.max_content_length: 100mb

此处做为ES本机测试集群搭建,只修改了主要参数,如果是生产环境还需根据实际情况添加其它参数;此处便于测试不进行详细说明,后续会有专题进行调优讲解,可持续关注本系列文章。

备注:本人测试机每台虚拟机给的8g内存,为了方便测试修改ES的jvm堆大小为2g。

hadoop101节点

3. 分发安装包及配置文件到hadoop101对应目录

如果hadoop101服务器不存在前面所用的到目录,请自行创建。

scp -r /data1/elk/esconfig/hot hadoop101:/data1/elk/esconfig/
scp -r /data1/elk/esdata/hot hadoop101:/data1/elk/esdata/
scp -r /data1/elk/eslogs/hot hadoop101:/data1/elk/eslogs/

4. 修改hadoop101的es配置文件
vim /data1/elk/esconfig/hot/elasticsearch.yml

cluster.name: es-cluster
node.name: es-hot-2
network.host: 192.168.33.101
http.port: 9201
transport.tcp.port: 9301

node.master: false
node.data: true

# 配置数据存储目录,必需保证目录存在,多个目录用逗号分隔
path.data: /data1/elk/esdata/hot
path.logs: /data1/elk/eslogs/hot

bootstrap.memory_lock: true

discovery.seed_providers: file
# es启动时,参与选举master的节点列表,即拥有选举资格的节点
cluster.initial_master_nodes: ["es-master-1"]

discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5

# head 插件需要这打开这两个配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.max_content_length: 100mb

4. 授权ES相关目录及文件权限为elasticsearch用户及组

查验hadoop100、hadoop101服务器 /opt/module/elasticsearch-7.10.2 及 /data1/elk 目录即文件是否为 elasticsearch 用户及 elasticsearch 组。
如果不是,切换为root用户,执行以下命令进行授权:

chown -R elasticsearch:elasticsearch /opt/module/elasticsearch-7.10.2
chown -R elasticsearch:elasticsearch /data1/elk

添加 elasticsearch 服务为系统服务

1. hadoop100上添加elasticsearch_master.service
新建文件并添加如下内容:
vim /usr/lib/systemd/system/elasticsearch_master.service

[Unit]
Description=Elasticsearch
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
RuntimeDirectory=elasticsearch
PrivateTmp=true
Environment=ES_HOME=/opt/module/elasticsearch-7.10.2
Environment=ES_PATH_CONF=/data1/elk/esconfig/master
Environment=PID_DIR=/data1/elk/eslogs/master
Environment=ES_SD_NOTIFY=true

WorkingDirectory=/opt/module/elasticsearch-7.10.2

User=elasticsearch
Group=elasticsearch

ExecStart=/opt/module/elasticsearch-7.10.2/bin/elasticsearch \
                                                -p ${PID_DIR}/master.pid \
                                                -Epath.logs=${PID_DIR} \
                                                --quiet

StandardOutput=journal
StandardError=inherit

LimitMEMLOCK=infinity

# 指定此进程可以打开的最大文件数
LimitNOFILE=65535

# 指定此进程可以打开的最大进程数
LimitNPROC=65535

# 最大虚拟内存
LimitAS=infinity

# 最大文件大小
LimitFSIZE=infinity

# 超时设置 0-永不超时
TimeoutStopSec=0

# SIGTERM是停止java进程的信号
KillSignal=SIGTERM

# 信号只发送给给JVM
KillMode=process

# java进程不会被杀掉
SendSIGKILL=no

# 正常退出状态
SuccessExitStatus=143

TimeoutStartSec=75

[Install]
WantedBy=multi-user.target

2. 继续添加elasticsearch_hot.service
由于一开始规划的就是hadoop100服务器安装两个实例,所以需要再次添加 hot 节点系统配置文件:
新增 /usr/lib/systemd/system/elasticsearch_hot.service 文件,内容与 elasticsearch_master.service 基本一致,修改如下几处配置即可:
ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证

3. hadoop101添加elasticsearch_hot.service

scp -r /usr/lib/systemd/system/elasticsearch_hot.service hadoop101:/usr/lib/systemd/system/

启动ES集群

1. hadoop100上启动 master、hot

systemctl start elasticsearch_master
systemctl start elasticsearch_hot

2. hadoop101上启动 hot

systemctl start elasticsearch_hot

3. 验证

启动成功后,浏览器访问 http://192.168.33.100:9200/ 返回集群基本信息。

启动时可能出现的问题

问题一:

[2021-07-24T14:48:36,851][ERROR][o.e.b.Bootstrap          ] [es-master-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked

解决:

方法一:关闭bootstrap.memory_lock
即 bootstrap.memory_lock: false(影响性能,不建议)

方法二:开启bootstrap.memory_lock,同时设置以下内容

  1. 修改文件/etc/security/limits.conf,最后添加

* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000

  1. 修改文件 /etc/systemd/system.conf ,分别修改以下内容

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
此部分配置在上述 /usr/lib/systemd/system/elasticsearch_xxx.service 文件中已经设置

随后重启系统即可

问题二:

[2021-07-26T10:43:00,101][ERROR][o.e.b.Bootstrap          ] [es-hot-2] node validation exception
[1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决:

很显然系统参数 vm.max_map_count 的值设置过低,启动ES需要更高的值。
具体设置参考上篇文章 《ELK系列(二)、ElasticSearch单实例安装》

问题三:
报错信息入下图所示,本机安装忘记保存了,下图来源于网络:
ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证

解决:

报错的原因是启动ES节点后发现是有两个独立的节点,无法加入集群,
导致该错误的操作是:集群更换了名称后,没有清除原始 data 目录下的数据文件,手动清除重启即可。


开启 x-pack 权限认证

生成证书文件

在hadoop100服务器上使用以下命令生成证书:

cd /opt/module/elasticsearch-7.10.2/
bin/elasticsearch-certutil cert -out config/escluster-certificates.p12 -pass ""

ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证

注意:证书文件生成后需要进行授权,使之能够被普通用户读取:

chown elasticsearch:elasticsearch escluster-certificates.p12
chmod 755 escluster-certificates.p12

# 复制证书文件到各节点 master、hot 对应的配置文件目录下
cp escluster-certificates.p12 /data1/elk/esconfig/master/
cp escluster-certificates.p12 /data1/elk/esconfig/hot/
scp escluster-certificates.p12 hadoop101:/data1/elk/esconfig/hot/

停掉ES集群服务并修改配置文件

# 先停止hot(数据)节点
systemctl stop elasticsearch_hot
systemctl stop elasticsearch_master

编辑各节点 elasticsearch.yml,尾部添加以下配置:

# 开启x-pack
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: escluster-certificates.p12
xpack.security.transport.ssl.truststore.path: escluster-certificates.p12

启动ES集群并生成用户名密码

启动ES集群服务,此时浏览器再次访问 http://192.168.33.100:9200/ 需要输入用户名密码,但此时还没创建用户。
ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证

保证ES集群启动正常的情况下,使用以下命令生成用户名和密码:

su elasticsearch
cd /opt/module/elasticsearch-7.10.2/

bin/elasticsearch-setup-passwords interactive  #用户自己指定每个用户的密码(建议)
或
bin/elasticsearch-setup-passwords auto  #自动生成随机的密码

ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证

上述操作执行完成后,访问 http://192.168.33.100:9200/ 输入 elastic 用户及对应密码即可实现登录访问了。


验证集群是否正常工作

由于目前还没有安装Kibana(支持可视化界面操作),采用后台 curl 方式进行查询及新增操作。

1) 查看索引

curl -XGET 192.168.33.100:9200/_cat/indices?pretty
由于前面已经开启了权限认证,此时访问需要指定用户名及密码

curl --user elastic:xxx -XGET 192.168.33.100:9200/_cat/indices?pretty
以下为了方便测试,提取用户名密码:userpass=‘elastic:elastic’

ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证
ELK系列(三)、ElasticSearch集群安装并开启x-pack权限认证

2)创建索引

curl --user $userpass -XPUT 192.168.33.100:9200/test?pretty

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "test"
}

3)添加数据

curl --user $userpass -XPUT 192.168.33.100:9200/test/_doc/1?pretty -H ‘Content-Type:application/json’ -d ‘{“name”:“我是测试”,“age”:18}’

{
  "_index" : "test",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

4)查询数据

curl --user $userpass -XGET 192.168.33.100:9200/test/_doc/1?pretty

{
  "_index" : "test",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "我是测试",
    "age" : 18
  }
}

5)删除索引

curl --user $userpass -XDELETE http://192.168.33.100:9200/test?pretty

{
  "acknowledged" : true
}

至此,ES单台多实例集群安装已完成,且基本操作均已验证无误。

后续系列将继续讲述 Kibana安装、集群监控以及更多 API 和 DSL 的玩法。

本文ES集群配置仅为测试环境使用,勿要生产使用,更多ES参数配置及调优知识请持续关注小菜鸟,该系列文章后面将会有专门文章讲述参数配置及集群调优。

上一篇:Visual Studio 版本号及其各个版本对应关系


下一篇:git clone failed报错 4069 bytes of body are still expected