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节点相关目录
1 | mkdir -p /data1/elk/esconfig/master |
2)分发配置文件并进行修改
1 | cp -r /opt/module/elasticsearch-7.10.2/config/* /data1/elk/esconfig/master/ |
修改 master/elasticsearch.yml
1 | cluster.name: es-cluster |
其中 es 节点列表配置采用 discovery.seed_providers: file 替换,需在相对路径下创建 unicast_hosts.txt 文件,内容为ES集群节点 ip:port,独占一行。内容如下:
192.168.33.100:9300
同样操作修改 hot/elasticsearch.yml
1 | cluster.name: es-cluster |
此处做为ES本机测试集群搭建,只修改了主要参数,如果是生产环境还需根据实际情况添加其它参数;此处便于测试不进行详细说明,后续会有专题进行调优讲解,可持续关注本系列文章。
备注:本人测试机每台虚拟机给的8g内存,为了方便测试修改ES的jvm堆大小为2g。
hadoop101节点
3)分发安装包及配置文件到hadoop101对应目录
如果hadoop101服务器不存在前面所用的到目录,请自行创建。
1 | scp -r /data1/elk/esconfig/hot hadoop101:/data1/elk/esconfig/ |
4. 修改hadoop101的es配置文件
vim /data1/elk/esconfig/hot/elasticsearch.yml
1 | cluster.name: es-cluster |
4)授权ES相关目录及文件权限为elasticsearch用户及组
查验hadoop100、hadoop101服务器 /opt/module/elasticsearch-7.10.2 及 /data1/elk 目录即文件是否为 elasticsearch 用户及 elasticsearch 组。
如果不是,切换为root用户,执行以下命令进行授权:
1 | chown -R elasticsearch:elasticsearch /opt/module/elasticsearch-7.10.2 |
添加 elasticsearch 服务为系统服务
1)hadoop100上添加elasticsearch_master.service
新建文件并添加如下内容:
vim /usr/lib/systemd/system/elasticsearch_master.service
1 | [Unit] |
2)继续添加elasticsearch_hot.service
由于一开始规划的就是hadoop100服务器安装两个实例,所以需要再次添加 hot 节点系统配置文件:
新增 /usr/lib/systemd/system/elasticsearch_hot.service 文件,内容与 elasticsearch_master.service 基本一致,修改如下几处配置即可:
3)hadoop101添加elasticsearch_hot.service
1 | 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上启动 master、hot
systemctl start elasticsearch_hot
3)验证
启动成功后,浏览器访问 http://192.168.33.100:9200/ 返回集群基本信息。
启动时可能出现的问题
问题一:
1 | [2021-07-24T14:48:36,851][ERROR][o.e.b.Bootstrap ] [es-master-1] node validation exception |
解决:
方法一:关闭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 文件中已经设置随后重启系统即可
问题二:
1 | [2021-07-26T10:43:00,101][ERROR][o.e.b.Bootstrap ] [es-hot-2] node validation exception |
解决:
很显然系统参数 vm.max_map_count 的值设置过低,启动ES需要更高的值。
具体设置参考上篇文章 《ELK系列(二)、ElasticSearch单实例安装》
问题三:
报错信息入下图所示,本机安装忘记保存了,下图来源于网络:
解决:
报错的原因是启动ES节点后发现是有两个独立的节点,无法加入集群,
导致该错误的操作是:集群更换了名称后,没有清除原始 data 目录下的数据文件,手动清除重启即可。
开启 x-pack 权限认证
生成证书文件
在hadoop100服务器上使用以下命令生成证书:
1 | cd /opt/module/elasticsearch-7.10.2/ |
注意:证书文件生成后需要进行授权,使之能够被普通用户读取:
1 | chown elasticsearch:elasticsearch escluster-certificates.p12 |
停掉ES集群服务并修改配置文件
1 | 先停止hot(数据)节点 |
编辑各节点 elasticsearch.yml,尾部添加以下配置:
1 | # 开启x-pack |
启动ES集群并生成用户名密码
启动ES集群服务,此时浏览器再次访问 http://192.168.33.100:9200/ 需要输入用户名密码,但此时还没创建用户。
保证ES集群启动正常的情况下,使用以下命令生成用户名和密码:
1 | su elasticsearch |
上述操作执行完成后,访问 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
1 | { |
3)添加数据
curl –user $userpass -XPUT 192.168.33.100:9200/test/_doc/1?pretty -H ‘Content-Type:application/json’ -d ‘{“name”:”我是测试”,”age”:18}’
1 | { |
4)查询数据
curl –user $userpass -XGET 192.168.33.100:9200/test/_doc/1?pretty
1 | { |
5)删除索引
url –user $userpass -XDELETE http://192.168.33.100:9200/test?pretty
1 | { |
至此,ES单台多实例集群安装已完成,且基本操作均已验证无误。
后续系列将继续讲述 Kibana安装、集群监控以及更多 API 和 DSL 的玩法。
本文ES集群配置仅为测试环境使用,勿要生产使用,更多ES参数配置及调优知识请持续关注小菜鸟,该系列文章后面将会有专门文章讲述参数配置及集群调优。