elasticsearch集群部署及加密通讯

发布于:2024-11-29 ⋅ 阅读:(14) ⋅ 点赞:(0)

原文地址:elasticsearch集群部署及加密通讯 – 无敌牛

欢迎参观我的个人博客无敌牛 – 技术/著作/典籍/分享等

第零步,准备

给各台设备配置虚拟主机名,这样集群不依赖IP,即使IP变动,改动也更方便。参考往期文章:https://www.madbull.site/?p=1094 第三步 3.2 一节。

第一步,颁发证书

本次文章自建CA根证书,以自建证书给各个子节点颁发服务端证书。

参看这篇文章:https://www.madbull.site/?p=1111 自建根证书,并用此根证书给三个设备分别颁发证书。

注意:在创建服务端证书时,用到的 csr.conf 文件中,commonNamealt_names 配置要根据自己的实际情况做相应修改。

第二步,修改配置文件

修改 /etc/elasticsearch/elasticsearch.yml 文件,内容如下:

cluster.name: CLUSTERNAMEXXX
node.name: xxxxnode1

path.data: /data/xxxx/data 
path.logs: /data/xxxx/logs
path.repo: /data/xxxx/esbackup

bootstrap.memory_lock: true
network.host: xxxxnode1, 127.0.0.1
discovery.seed_hosts: ["xxxxnode1", "xxxxnode2", "xxxxnode3"]

action.destructive_requires_name: false

xpack.security.enabled: true

xpack.security.enrollment.enabled: true

xpack.security.http.ssl:
  enabled: true
  key: certs/private.key
  certificate: certs/public.crt
  certificate_authorities: certs/CAs/myCA.crt
  verification_mode: certificate

xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  key: certs/private.key
  certificate: certs/public.crt
  certificate_authorities: certs/CAs/myCA.crt

cluster.initial_master_nodes: ["xxxxnode1", "xxxxnode2", "xxxxnode3"]

配置项解释:

cluster.name: 集群名称,同一个集群里的各个节点,配置相同集群名称。

node.name: 当前服务节点名称,在集群里名字是唯一的

path.data: 数据保存路径

path.logs: 日志存储路径

path.repo: 数据库快照备份路径

bootstrap.memory_lock: 是否锁定内存,不允许磁盘交换。如果大内存,可以设置为true;否则内存空间不够则可能数据库服务启动失败。

network.host: 如果不考虑设备有多个IP的情况,可以直接配置成 0.0.0.0 或者 _site_。集群需要跨主机访问,所以需要开放端口,不能只绑定在 _local_ 或者 127.0.0.1 。

discovery.seed_host: 用于发现集群中其他节点的初始主机列表。

action.destructive_requires_name: 控制执行某些破坏性操作,设置 false 操作验证会减少。

xpack.security.enabled: 是否启用xpack安全特征,包括认证、授权和加密等。

xpack.security.enrollment.enabled: 是否启用节点自动加入集群。

xpack.security.http.ssl: https访问相关配置。

xpack.security.transport.ssl: 节点间通讯通过ssl加密相关配置。

verification_mode: 验证模式,此处为证书

key: 私钥文件

certificate: 证书文件

certificate_authorities: 信任的CA根证书文件

cluster.initial_master_nodes: 指定哪些节点可以作为主节点 master

需要根据各个服务器自身的情况做调整。

第三步,安装证书

把第一步申请的服务端私钥、服务端证书 和 CA根证书,放在 key、certificate、certificate_authorities 参数指定的文件路径。目录结构如下,并确保文件对minio用户可读。此处用了软连接,也是同样的效果,可以把对应的文件直接放在指定的位置上。

注意:三台设备用到的根证书,也就是 CAs/myCA.crt 是同一个,但是 服务端私钥和服务端证书则各不相同。xpack.security.http.ssl 下的配置 和 xpack.security.transport.ssl 下的配置可以不是同一个文件。

elasticsearch集群 不信任系统的证书,所以把CA证书添加到系统信任列表不起作用,必须把根证书放在 certificate_authorities 指定的位置。

最后

三台设备重启 elasticsearch 服务: systemctl restart elasticsearch。

如果 原来的 elasticsearch 库中已经有数据,设备只会保留主设备的数据,其他设备的数据将被删除。

如果遇到三台设备都只找到自己,并选定自己是主设备,且找不到其他设备,尝试删除数据目录(也就是path.data配置项指定的目录)下 _state 文件夹下的所有内容,重启 elasticsearch 服务尝试组建集群。


elasticsearch基本操作,参考文章:https://www.madbull.site/?p=424

python开发基本操作参考示例:https://www.madbull.site/?p=606