elasticsearch集群部署及加密通讯
原文地址:elasticsearch集群部署及加密通讯 – 无敌牛
欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等
第零步,准备
给各台设备配置虚拟主机名,这样集群不依赖IP,即使IP变动,改动也更方便。参考往期文章:https://www.madbull.site/?p=1094 第三步 3.2 一节。
第一步,颁发证书
本次文章自建CA根证书,以自建证书给各个子节点颁发服务端证书。
参看这篇文章:https://www.madbull.site/?p=1111 自建根证书,并用此根证书给三个设备分别颁发证书。
注意:在创建服务端证书时,用到的 csr.conf 文件中,commonName 和 alt_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