Elasticsearch7搭建集群并配置节点证书

这篇具有很好参考价值的文章主要介绍了Elasticsearch7搭建集群并配置节点证书。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch7搭建集群并配置节点证书 | 帅大叔的博客

单机版比较简单,试下集群版的,资源有限,本文例子:一台主机以不同端口启动搭建集群。

环境说明:

  • Centos7
  • Elasticsearch7.9.0

准备搭建3个节点

一、下载ES安装包

去官网下载
  • 下载地址:Download Elasticsearch | Elastic
  • 历史版本:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
  • 7.9.0版本:Elasticsearch 7.9.0 | Elastic

选择7.9.0版本下载Linux x86_64类型的 ,x86_64 与 AARCHS 区别不明白的自己科普一下。

执行Shell命令过程:

# 下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.0-linux-x86_64.tar.gz

# 解压
tar -zxvf elasticsearch-7.9.0-linux-x86_64.tar.gz

# 解压后,生成一个名为:elasticsearch-7.9.0 的文件夹
# 为了方便管理,新建一个文件夹:elasticsearch-cluster
mkdir elasticsearch-cluster

# 复制3份 elasticsearch-7.9.0 到 elasticsearch-cluster 并重命名
cp -r  elasticsearch-7.9.0 elasticsearch-cluster/elasticsearch-9301
cp -r  elasticsearch-7.9.0 elasticsearch-cluster/elasticsearch-9302
cp -r  elasticsearch-7.9.0 elasticsearch-cluster/elasticsearch-9303

看我复制的文件就知道,我打算启动3个节点,启动端口分别是: 9301、9302、9303

二、修改节点的配置文件

常用配置文件解释

# 集群名称
cluster.name: mtSearch

# 节点名称,不能相同
node.name: mtNode1

# 是否是主节点
node.master: true

# 是否是数据节点
node.data: true

# 日志路径
path.logs: /opt/elasticsearch-cluster/logs

# 锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区
# 如果bootstrap.memory_lock 为true,记得修改/etc/security/limits.conf 添加memlock  配置,目前先注释上
bootstrap.memory_lock: true

# 映射ip
network.host: 172.16.1.236

# http请求端口
http.port: 9200

# 设置节点间交互的tcp端口,默认是9300。
transport.tcp.port: 9300

# 设置是否压缩tcp传输时的数据,默认为false,不压缩。
transport.tcp.compress: true

# 集群种子主机地址,如果是7.*版本之前可以用 discovery.zen.ping.unicast.hosts 这个参数,7版本用这个也是兼容的,但后期可能会删掉
discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"]

# 防止脑裂,要选举一个Master需要多少个节点(最少候选节点数),一般设置成 N/2 + 1(N是集群中节点的数量)
discovery.zen.minimum_master_nodes: 2


# 用于获取启动发现过程的种子节点的地址。默认情况下,是基于设置的种子主机提供程序也就是上面的种子地址,
# 还有一种基于文件的,需要在安装目录下新建unicast_hosts.txt 文件
discovery.seed_providers: file

# 如果不配置 discovery.seed_hosts、discovery.seed_providers 这几个选项,就以 cluster.initial_master_nodes 这个配置进行master节点选举。
# 如果配置上两个配置,cluster.initial_master_nodes这个配置就不生效了.
# 官方文档说的:https://www.elastic.co/guide/en/elasticsearch/reference/7.9/modules-discovery-bootstrap-cluster.html#_auto_bootstrapping_in_development_mode
cluster.initial_master_nodes: ["mtNode1", "mtNode2", "mtNode3"]

# 重启只要有这么多数据或主节点已加入集群,才恢复数据
gateway.recover_after_nodes: 2

# 跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
1、各节点配置文件

每个节点的配置都不太相同

9301节点配置
cluster.name: mtSearch
node.name: mtNode1
node.master: true
node.data: true
path.logs: /opt/elasticsearch-cluster/logs
network.host: 172.16.1.236
http.port: 9201
transport.tcp.port: 9301
transport.tcp.compress: true
discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"]
cluster.initial_master_nodes: ["mtNode1","mtNode2","mtNode3"]
gateway.recover_after_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
9302节点配置
cluster.name: mtSearch
node.name: mtNode2
node.master: true
node.data: true
path.logs: /opt/elasticsearch-cluster/logs
network.host: 172.16.1.236
http.port: 9202
transport.tcp.port: 9302
transport.tcp.compress: true
discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"]
cluster.initial_master_nodes: ["mtNode1","mtNode2","mtNode3"]
gateway.recover_after_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
9303节点配置
cluster.name: mtSearch
node.name: mtNode3
node.master: true
node.data: true
path.logs: /opt/elasticsearch-cluster/logs
network.host: 172.16.1.236
http.port: 9203
transport.tcp.port: 9303
transport.tcp.compress: true
discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"]
cluster.initial_master_nodes: ["mtNode1","mtNode2","mtNode3"]
gateway.recover_after_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"

都配置完,分别启动3个节点,不出意外即可看到集群连接成功。

/opt/elasticsearch-cluster/elasticsearch-9301/elasticsearch -d
/opt/elasticsearch-cluster/elasticsearch-9302/elasticsearch -d
/opt/elasticsearch-cluster/elasticsearch-9303/elasticsearch -d

启动成功,如下图:

如果你之前没安装过,可能会报错:像root用户运行呀,线程不够呀,内存不足呀等等问题
可以看本文最后面的踩坑笔记

集群确实是搞定了,但是没配置账号密码,集群中各节点之间的通信是也没有什么校验措施的,别人随随便便就连上集群。这样在互联网中就相当于裸奔!

三、配置证书

TLS需要X.509证书才能对与之通信的应用程序执行加密和身份验证。为了使节点之间的通信真正安全,必须对证书进行验证。在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。这样,将节点添加到群集时,它们只需要使用由同一CA签名的证书,即可自动允许该节点加入群集。

1、生成节点证书

命令 elasticsearch-certutil 简化了生成证书的过程,它负责生成CA并与CA签署证书。

a、创建证书颁发机构CA
随便进入一个节点的bin 目录下执行elasticsearch-certutil 命令即可,如下

# 该命令输出单个文件,默认名称为elastic-stack-ca.p12。此文件是PKCS#12密钥库
# 其中包含CA的公共证书和用于对每个节点的证书签名的私钥。
bin/elasticsearch-certutil ca

执行这个命令之后:

  • 会让你输入生成elastic-stack-ca.p12文件放在哪。(直接回车,放在当前目录)
  • 回车之后让你输入密码,该密码是让你保护文件和密钥的。如果你以后还要加集群的话,要记得输入的密码。

b、生成证书和私钥

# 此命令生成证书凭证,输出的文件是单个PKCS#12密钥库,其中包括节点证书,节点密钥和CA证书。
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

执行命令之后需要你操作3次:

  • 第一次,输入上面生成CA的密码,没有设置直接回车
  • 第二次,生成的文件路径,直接回车
  • 第三次,生成这次证书与私钥文件的密码,建议和上面生成CA一致(怕忘记密码,也可以直接回车)

如下图需要输入密码的地方:

命令执行完之后会生成一个elastic-certificates.p12 文件,这个就是各节点通信的凭证

只需要一个节点生成凭证即可。

2、配置证书
复制证书凭证

把证书凭证复制到各个节点一份

# 复制证书凭证到各个节点
cp elastic-certificates.p12 /opt/elasticsearch-cluster/elasticsearch-9301/config/
cp elastic-certificates.p12 /opt/elasticsearch-cluster/elasticsearch-9302/config/
cp elastic-certificates.p12 /opt/elasticsearch-cluster/elasticsearch-9303/config/
修改配置文件

在各个节点下的elasticsearch.yml文件添加如下配置

xpack.security.enabled: true
xpack.security.authc.accept_default_password: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /opt/elasticsearch-cluster/elasticsearch-9301/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /opt/elasticsearch-cluster/elasticsearch-9301/config/elastic-certificates.p12

要注意的是上面的path记得改成对应节点config下的elastic-certificates.p12

添加密码到密码库

因为之前生成CA 和生成凭证都设置了密码,所以把密码添加到密钥库中

# 执行之后 输入上面设置的密码,回车即可
elasticsearch-9301/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
elasticsearch-9301/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

# 每个节点都要加
elasticsearch-9302/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
elasticsearch-9302/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

# 每个节点都要加
elasticsearch-9303/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
elasticsearch-9303/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

图片上有个警告大概的意思是说:ES未来将使用JDK11,而我现在的环境还是JDK8

之后启动各个节点

elasticsearch-9301/bin/elasticsearch -d
elasticsearch-9302/bin/elasticsearch -d
elasticsearch-9303/bin/elasticsearch -d

可以看看日志,不出意外集群启动成功了。随便请求一个节点地址:http://172.16.1.236:9201/
也可以使用elasticsearch-head连接查看,但是需要账户和密码访问
有的同学就要问了,我都没设置账号密码,去哪里看呢?

在安装Elasticsearch时,如果内置用户elastic用户没有密码,它将使用默认的引导密码。引导程序密码是一个临时密码,从随机 keystore.seed 设置派生的会在安装过程中添加到密钥库中。我们压根不知道密码是啥,所以需要为内置用户elastic设置密码。首次设置可以用elasticsearch-setup-passwords命令

Tip:下面的方法,我没试过,我没试过、我没试过,但是文档有,就提一下。
可以使用ES 提供的secure API重新加载为内置用户设置密码:

# 参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.9/secure-settings.html#reloadable-secure-settings
POST _nodes/reload_secure_settings
{
  "secure_settings_password": "yourPassword" 
}
3、配置密码

elasticsearch-setup-passwords工具是首次设置内置用户密码的最简单方法。它使用elastic用户的引导程序密码来运行用户管理API请求。
执行命令如下:

bin/elasticsearch-setup-passwords interactive

它在“互动”模式下提示你输入:elastickibana_systemlogstash_systembeats_systemapm_system,和remote_monitoring_user用户的密码


只需要在任意节点的bin目录下执行即可,不需要每个节点都执行。

至此ES集群的账号跟密码就设置完成了

我们设置密码之后会有一个名为.security-7的索引文档。

之后可以修改密码:

# 随便一个节点地址修改即可,一个集群共用一个账号密码
# 用Postman 请求时,选择 Authorization -> 选择 Basic Auth -> 右边选择上面设置的账号密码:elastic用户与密码
POST http://172.16.1.236:9201/_xpack/security/user/elastic/_password

{
  "password": "yourNewPassword"
}
4、踩坑记录
1、安装可能报错的问题:

查看文章链接:ES安装问题集锦

2、修改运行ES的Java环境

在启动ES7.9.0的时候,会提示:future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk1.8.0/jre] does not meet this requirement 也就是说ES未来版本需要JDK11,我目前的环境是JDK8不符合要求。我这个包是自带JDK的,我干脆只把把自动的JDK指定为ES的JDK运行环境:
修改3个节点下的 bin/elasticsearch 文件,在最前面添加如下:

# 这个下面的路径改成你es节点下jdk的路径即可
export JAVA_HOME=/opt/elasticsearch-cluster/elasticsearch-9301/jdk
export PATH=$JAVA_HOME/bin:$PATH

不修改也是可以启动的,但是建议改算了,毕竟官方包都自带了,那肯定是推荐我们使用新版本。文章来源地址https://www.toymoban.com/news/detail-517712.html

3、elastic-certificates.p12文件位置踩坑
  • 因为我只是一台主机,打算是另外把这个证书凭证放在 elasticsearch-cluster 下弄个config文件夹保存的,但是呢,不尽人意
  • 启动的时候报了个文件权限问题。报错如下
  • 可能用chmod 777 elastic-certificates.p12可以访问,我没试,但是还是建议放在各自的安装目录下。
本文参考链接
  • Encrypting communications in Elasticsearch | Elasticsearch Guide [7.9] | Elastic
  • Built-in users | Elasticsearch Guide [7.9] | Elastic

到了这里,关于Elasticsearch7搭建集群并配置节点证书的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker compose搭建elasticsearch7集群

    一、集群介绍 系统环境:Centos7.5 服务器节点: 主机名 IP hadoop03 192.168.1.153 hadoop04 192.168.1.154 hadoop05 192.168.1.155 二、环境准备 1、安装docker:略过 2、安装docker compose 1)使用官方推荐方式(此方式需服务器翻外网) 2)自行下载         由于服务器连不上Github,因此手动下载

    2024年02月03日
    浏览(59)
  • elasticsearch7.x 集群的搭建和分片设置

    目录   一、es集群的基本核心概念 二、es集群搭建 三、es集群索引分片管理 3.1创建索引,指定分片  3.2索引分片的分配 3.2.1 手动移动分片:  3.2.1 修改副分片数量 Cluster 集群: 一个 Elasticsearch 集群由一个或多个节点(Node)组成,每个集群都有一个共同的集群名称作为 标识。

    2023年04月25日
    浏览(50)
  • CentOS7下安装ElasticSearch7.6.1详细教程(单机、集群搭建)

    CentOS 7下安装ElasticSearch7.6.1详细教程 ElasticSearch客户端Kibana7.6.1安装教程 ElasticSearch分词器IK安装教程 Elasticsearch-head插件安装教程 想要学习ElasticSearch技术,需要在服务器搭建ElasticSearch环境。 CenOS:7; JDK:1.8; Elasticsearch:7.6.1; ES不能使用root用户来启动,必须使用普通用户来

    2023年04月09日
    浏览(54)
  • CentOS 7 使用Docker方式搭建ElasticSearch 7.7.0 三节点集群,并配置elasticsearch-head插件,ik分词器,以及Kibana可视化平台

    IP 角色 172.16.31.191 elasticsearch-1 172.16.31.192 elasticsearch-2 172.16.31.193 elasticsearch-3 并创建相关挂载目录,3台虚拟机都要,如下 还要对文件夹加设置开放权限,如果不开放权限,则会报错无法写入数据的情况,3台虚拟机都要,如下 172.16.31.191 172.16.31.192 172.16.31.193 172.16.31.191 172.16.3

    2024年02月04日
    浏览(48)
  • elasticsearch单机多节点集群搭建

    elasticsearch7开始不支持单机多节点部署 centos服务器两台:10.188.131.247、10.20.148.122 elasticsearch-6.8.23、kibana-6.8.23安装包下载(下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch) 新增es用户(elasticsearch不能用root用户启动) 集群概览:3个master节点,3个数据节点 服务器

    2024年02月12日
    浏览(79)
  • Linux搭建ElasticSearch单节点及集群

    1.虚拟机CentOS7.6 2.elasticsearch7.8.0:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0 将tar包解压到指定目录 1.Linux环境安装了jdk的,会和es自带jdk冲突,需要指定使用自带jdk,修改es的bin目录下elasticsearch如下: 2.如果机器内存不够用,需要调小启动内存,在es的config目录下

    2024年02月16日
    浏览(41)
  • 服务搭建篇(七) Elasticsearch单节点部署以及多节点集群部署

    感兴趣的话大家可以关注一下公众号 : 猿人刘先生 , 欢迎大家一起学习 , 一起进步 , 一起来交流吧! Elasticsearch(简称ES) 是一个分布式 , RESTful风格的搜索和数据分析引擎 , 使用java开发并且是当前最流行的开源的企业级搜索引擎,能够达到近实时搜索,稳定,可靠,快速,安装使

    2024年02月03日
    浏览(63)
  • Elasticsearch密码配置(包括集群与单节点)

    1,修改配置文件 在配置文件中添加如下参数: 2, 重启es服务 关闭es服务如果服务启动(kill进程id) 启动es服务 3,执行修改密码命令 待服务启动完成,且能正常访问后,执行 注意在普通用户下执行,即es用户 执行命令后会提示让输入密码,挨个输入回车即可 若执行提示(

    2024年02月02日
    浏览(38)
  • Elasticsearch3节点集群配置账号密码安全验证

    Elasticsearch3节点集群配置账号密码安全验证 ES配置文件 生成CA证书 拷贝证书文件到es节点目录 拷贝证书到es节点并授权 拷贝es配置文件到es节点 三个节点启动ES 登录任一节点设置密码 配置kibana

    2024年02月14日
    浏览(49)
  • 从入门到进阶 之 ElasticSearch 节点配置 集群篇

      详解 ElasticSearch Kibana 配置部署_PJ码匠人的博客-CSDN博客 Elasticsearch 安装,配置文件参数修改,错误修复,用户验证,kibana安装配置,参数设置 https://meyan.blog.csdn.net/article/details/132580977 链接:https://pan.baidu.com/s/1V7jxVhUFvsINrH7zz9Laeg?pwd=n9cx  提取码:n9cx  错误   解决方法 将配置

    2024年02月07日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包