elasticsearch|大数据|低版本的elasticsearch集群的官方安全插件x-pack的详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: elasticsearch|大数据|低版本的elasticsearch集群的官方安全插件x-pack的详解

前言:

elasticsearch集群说实话是比较好部署的,也就是从开箱即用这方面来说,是比较简单的,大体步骤就是首先处理好集群的环境,比如时间服务器,域名映射,内核层面的文件打开数这些小问题,然后就是安装目录的赋权(es不让用root用户启动,操作),最后就是主配置文件的修改,把每个节点的信息按自己的部署规划写入主配置文件就可以启动各个节点,然后,es会自动发现其它节点并自己组成一个集群。

在集群启动这个阶段,我们也不需要操心如何选主,哪个是主,哪个是从这些集群方面的问题,es是以最先启动的节点自动为主,不像其它的集群例如zookeeper,还需要在配置文件里写清楚哪个是主,哪个是从,主节点还必须要先启动,然后在启动从节点,而es完全没有这些烦恼。

但是,这些都是es给人的误解,其实,集群设置方面的简化了,但是安全防护方面需要比其它类型的集群下更多的功夫,例如,安全插件的选择,安全插件的设置这些是要比其它集群更加麻烦的。

其次,es的版本众多,每个大版之间的差异是很大的,怎么说呢,就和MySQL一样,MySQL-5.6,MySQL-5.7,MySQL8 就完全不是同一个数据库,虽然是都叫MySQL,同样的,es6,es7,es8之间的差别也是非常大的。

那么,es版本之间的具体差距一个是性能方面,自然是版本越高性能方面可能更高点,其次就是漏洞,越高的版本自然也是漏洞更少,最后就是es的安全插件x-pack和由x-pack引起的证书问题。

一,

启用 trial license

curl -H "Content-Type:application/json" -XPOST  http://127.0.0.1:19200/_xpack/license/start_trial?acknowledge=true

es的密码设置

es集群密码只需要在一个节点设置一次就可以了,不需要每个节点都执行密码设置,设置密码的时候开不开xpack.security.enabled: true都没有影响,只是需要上面的license激活试用

二,

具体的实施步骤

本例中,我的es是二进制形式安装在/data/目录下的

有两个关键目录libs和modules两个目录

下面是两个java 文件,然后编译出两个class文件,最后两个class文件替换到jar包内,重新打jar 包后,每个节点的jar包都要替换掉。

####注:链接:https://pan.baidu.com/s/1Wj5Q80p9lN7r6uv0xvWHWw?pwd=kkey
提取码:kkey
编译出来的jar包以及安装包什么的都在百度盘里,有需要的自取试用

cd /data/es/modules/x-pack/x-pack-core
cat >/data/es/modules/x-pack/x-pack-core/LicenseVerifier.java<<EOF
package org.elasticsearch.license; 
import java.nio.*; import java.util.*; 
import java.security.*; 
import org.elasticsearch.common.xcontent.*; 
import org.apache.lucene.util.*; 
import org.elasticsearch.common.io.*; 
import java.io.*; 
public class LicenseVerifier { 
    public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
        return true; 
    } 
    public static boolean verifyLicense(final License license)     { 
        return true; 
    } 
}
EOF
cat >/data/es/modules/x-pack/x-pack-core/XPackBuild.java<<EOF
package org.elasticsearch.xpack.core;
import org.elasticsearch.common.io.*;
import java.net.*;
import org.elasticsearch.common.*;
import java.nio.file.*;
import java.io.*; 
import java.util.jar.*; 
public class XPackBuild { 
    public static final XPackBuild CURRENT;
    private String shortHash; 
    private String date; 
    @SuppressForbidden(reason = "looks up path of xpack.jar directly") static Path getElasticsearchCodebase() { 
        final URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();
        try { return PathUtils.get(url.toURI()); }
        catch (URISyntaxException bogus) { 
            throw new RuntimeException(bogus); } 
        } 
    XPackBuild(final String shortHash, final String date) {
            this.shortHash = shortHash; 
            this.date = date; 
            } 
    public String shortHash() {
        return this.shortHash;
        } 
    public String date(){ 
        return this.date; 
        }
    static { 
        final Path path = getElasticsearchCodebase();
        String shortHash = null; 
        String date = null;
        Label_0157: { shortHash = "Unknown"; date = "Unknown"; 
    } 
    CURRENT = new XPackBuild(shortHash, date); 
    }
}
EOF

下面的命令是编译java文件生成class,双引号里的是包依赖,第二个编译比第一个多elasticsearch-core-6.3.2.jar

echo $ES_HOME=/data/es
javac -cp "$ES_HOME/lib/elasticsearch-6.3.2.jar:$ES_HOME/lib/lucene-core-7.3.1.jar:$ES_HOME/modules/x-pack-core/x-pack-core-6.3.2.jar" LicenseVerifier.java 
javac -cp "$ES_HOME/lib/elasticsearch-6.3.2.jar:$ES_HOME/lib/lucene-core-7.3.1.jar:$ES_HOME/modules/x-pack-core/x-pack-core-6.3.2.jar:$ES_HOME/lib/elasticsearch-core-6.3.2.jar" XPackBuild.java

重新生成的jar包可以在其它相同的es6.3.2版本直接使用

mkdir tmp && cd tmp 
cp ../x-pack-core-6.3.2.jar ./ 
jar -xf x-pack-core-6.3.2.jar ##解压 
cp ../LicenseVerifier.class org/elasticsearch/license/ ##替换文件 
cp ../XPackBuild.class org/elasticsearch/xpack/core/ ##替换文件 
jar -cvf x-pack-core-6.3.2.jar * 
##再压缩,将生成的 x-pack-core-6.6.2.jar 发送到所有es,覆盖原来的jar文件

license文件是我从官网注册的,这个文件谁都可以用

cat> license.json <<EOF
{"license":{"uid":"098d64a3-e517-41dd-b353-f505592d2c8b","type":"platinum","issue_date_in_millis":1702771200000,"expiry_date_in_millis":2547615064000,"max_nodes":100,"issued_to":"zsk john (sgcc)","issuer":"Web Form","signature":"AAAAAwAAAA16lsBvPS6swxwXwby8AAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQBsh77fra6SPtgkkXCPjs39gSNVwkeO9Brh3ztWUuINJVwHcMGxyTfmb24rHhVJwtTSrTTtjxvWCRvM+0iomOTnuQTZiEnWlnkQxpog0zuftR21mjCZZTcctZtBAKuffmRG3ORWWMq3OyUkeHWPsA11QrnkDky/+dU3MjandI1PLz4GYtHakb1/5j7oaLHda0n3jibNPk9+IsgyVbha+u40vF/wFgsq7UVZguWH1NC+GQfq4GnUDWi1AzpxNKWE5ui9zlMT0E0i5Dlp/MyFsEPsI22HkvxOrI8ZrENKL/NojrkfYn+Um2Z44VNrYLZt38gEka/sGQ27Ut+8UkmGBAkM","start_date_in_millis":1702771200000}}
EOF
curl -XPUT -u "elastic":"123456" 'http://192.168.123.11:19200/_xpack/license' -H "Content-Type: application/json" -d @license.json

在执行到上面这个命令的时候,es必须要开启以下设置否则报错:

下面的配置见博客:elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理-CSDN博客

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /data/es/config/cert/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /data/es/config/cert/elastic-certificates.p12

查看是否更换license:

可以看到过期时间已经更新到了2050年,十来年的时间应该够用了吧!!!!~~

[root@node1 tmp]# curl -uelastic:shiguang32 -XGET http://192.168.123.11:19200/_license
{
  "license" : {
    "status" : "active",
    "uid" : "098d64a3-e517-41dd-b353-f505592d2c8b",
    "type" : "platinum",
    "issue_date" : "2023-12-17T00:00:00.000Z",
    "issue_date_in_millis" : 1702771200000,
    "expiry_date" : "2050-09-24T06:51:04.000Z",
    "expiry_date_in_millis" : 2547615064000,
    "max_nodes" : 100,
    "issued_to" : "zsk john (sgcc)",
    "issuer" : "Web Form",
    "start_date_in_millis" : 1702771200000
  }

日志里的验证:

[2023-12-18T01:34:40,141][INFO ][o.e.x.s.a.TokenService   ] [node-1] refresh keys
[2023-12-18T01:34:40,347][INFO ][o.e.x.s.a.TokenService   ] [node-1] refreshed keys
[2023-12-18T01:34:40,359][INFO ][o.e.l.LicenseService     ] [node-1] license [aab0fece-300e-45b3-8fc8-7c935482b21d] mode [trial] - valid
[2023-12-18T01:34:40,383][INFO ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [node-1] publish_address {192.168.123.11:19200}, bound_addresses {192.168.123.11:19200}
[2023-12-18T01:34:40,383][INFO ][o.e.n.Node               ] [node-1] started
[2023-12-18T01:39:08,635][INFO ][o.e.l.LicenseService     ] [node-1] license [098d64a3-e517-41dd-b353-f505592d2c8b] mode [platinum] - valid


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
16天前
|
存储 负载均衡 Java
Elasticsearch集群面试系列文章一
【9月更文挑战第9天】Elasticsearch(简称ES)是一种基于Lucene构建的分布式搜索和分析引擎,广泛用于全文搜索、结构化搜索、分析以及日志实时分析等场景。
62 7
|
2月前
|
存储 缓存 监控
|
22天前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
2月前
|
存储 监控 负载均衡
Elasticsearch 集群副本
【8月更文挑战第24天】
50 13
|
1月前
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
73 3
|
2月前
|
存储 缓存 算法
Elasticsearch 集群节点间的通信
【8月更文挑战第25天】
39 6
|
2月前
|
存储 机器学习/深度学习 运维
Elasticsearch 集群节点的角色与职责
【8月更文挑战第25天】
51 6
|
2月前
|
存储 网络协议 搜索推荐
|
2月前
|
存储 负载均衡 算法
|
2月前
|
存储 缓存 监控

热门文章

最新文章

下一篇
无影云桌面