小菜鸟的个人博客已经正式上线且对外开放啦…
博客访问地址:小菜鸟的大梦想
欢迎各位同学扫码关注本人公众号 ↓↓↓ 更多优质内容将 首发 公众号
前言
本篇教程基于上篇《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 基本一致,修改如下几处配置即可:
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,同时设置以下内容
- 修改文件/etc/security/limits.conf,最后添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
- 修改文件 /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单实例安装》
问题三:
报错信息入下图所示,本机安装忘记保存了,下图来源于网络:
解决:
报错的原因是启动ES节点后发现是有两个独立的节点,无法加入集群,
导致该错误的操作是:集群更换了名称后,没有清除原始 data 目录下的数据文件,手动清除重启即可。
开启 x-pack 权限认证
生成证书文件
在hadoop100服务器上使用以下命令生成证书:
cd /opt/module/elasticsearch-7.10.2/
bin/elasticsearch-certutil cert -out config/escluster-certificates.p12 -pass ""
注意:证书文件生成后需要进行授权,使之能够被普通用户读取:
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/ 需要输入用户名密码,但此时还没创建用户。
保证ES集群启动正常的情况下,使用以下命令生成用户名和密码:
su elasticsearch
cd /opt/module/elasticsearch-7.10.2/
bin/elasticsearch-setup-passwords interactive #用户自己指定每个用户的密码(建议)
或
bin/elasticsearch-setup-passwords auto #自动生成随机的密码
上述操作执行完成后,访问 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’
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参数配置及调优知识请持续关注小菜鸟,该系列文章后面将会有专门文章讲述参数配置及集群调优。