26-ES集群搭建、身份认证配置

devtools/2024/11/17 11:09:03/

虚机搭建

添加es用户

elasticsearch 默认不允许root用户启动,所以需要创建es用户

useradd elasticsearch
passwd elasticsearch

解压安装包

#解压es
tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz

将文件夹赋予es用户权限

#将文件夹赋予es用户权限
sudo chown -R elasticsearch:elasticsearch /opt/elasticsearch-7.14.2/

elasticsearch文件

elasticsearch.yml

cluster.name: es-cluster
#设置节点名称,集群内节点名称必须唯一。
node.name: node1
#表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
#当前节点是否用于存储数据,是:true、否:false
node.data: true
#索引数据存放的位置
path.data: /usr/share/elasticsearch/data
#日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs
#需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
#监听地址,用于访问该es
network.host: 0.0.0.0
#es对外提供的http端口,默认 9200
http.port: 9200
#TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
#设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["node1ip:9300", "node2ip:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1ip:9300", "node2ip:9300"]
#cluster.initial_master_nodes: ["node1"]
#是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
#“*” 表示支持所有域名
http.cors.allow-origin: "*"##############
cluster.name: es-cluster
#设置节点名称,集群内节点名称必须唯一。
node.name: node2
#表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
#当前节点是否用于存储数据,是:true、否:false
node.data: true
#索引数据存放的位置
path.data: /usr/share/elasticsearch/data
#日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs
#需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
#监听地址,用于访问该es
network.host: 0.0.0.0
#es对外提供的http端口,默认 9200
http.port: 9200
#TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
#设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["node1ip:9300", "node2ip:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1ip:9300", "node2ip:9300"]
#cluster.initial_master_nodes: ["node1"]
#是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
#“*” 表示支持所有域名
http.cors.allow-origin: "*"

启动es集群

#前置环境(es启动需要最小内存4G,否则无法启动,OOM)
#通过修改机器进程虚拟内存可启动es

vim /etc/sysctl.conf
#fs.file-max主要是配置系统最大打开文件描述符数,建议修改为655360或者更高
fs.file-max=655360
#影响Java线程数量,用于限制一个进程可以拥有的VMA(虚拟内存区域)的大小
vm.max_map_count = 262144#生效
sysctl -p

设置安全认证

es配置文件添加认证

新增配置,每个集群节点都需要设置。

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: "elastic-certificates.p12"
xpack.security.transport.ssl.truststore.path: "elastic-certificates.p12"

生成TLS 和身份验证

将会在config下生成elastic-certificates.p12文件,将此文件传到其他两个节点的config目录

注意文件权限

bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""chmod 644 /data/elasticsearch/config/elastic-certificates.p12
#sudo chmod 777 /data/elasticsearch/config/elastic-stack-ca.p12

启动集群

es 集群不启动,下面的添加密码操作执行不了。

设置密码

在主节点上执行就行,数据会自动同步到其他节点

#启动es,之后执行
./bin/elasticsearch-setup-passwords interactive

springboot访问

@Override@Beanpublic RestHighLevelClient elasticsearchClient (){final ClientConfiguration clientConfiguration =ClientConfiguration.builder().connectedTo(esUrl).withBasicAuth("elastic", "elastic").build();return RestClients.create(clientConfiguration).rest();}

docker 搭建ES集群

docker安装

sudo yum install docker
sudo systemctl start docker
sudo systemctl enable docker
sudo docker info

下载镜像

sudo docker pull elasticsearch:7.14.2
#docker pull docker.elastic.co/elasticsearch/elasticsearch:7.14.2

创建数据挂载外链

mkdir -p /data/elasticsearch/data && mkdir -p /data/elasticsearch/config && mkdir -p /data/elasticsearch/logs && mkdir -p /data/elasticsearch/plugins

elasticsearch文件

cluster.name: es-cluster
#设置节点名称,集群内节点名称必须唯一。
node.name: node1
#表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
#当前节点是否用于存储数据,是:true、否:false
#node.data: true
#索引数据存放的位置
path.data: /usr/share/elasticsearch/data
#日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs
#需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
#监听地址,用于访问该es
network.host: 0.0.0.0
#es对外提供的http端口,默认 9200
http.port: 9200
#TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
#设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["node1ip:9300", "node2ip:9300","node3ip:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1ip:9300", "node2ip:9300","node3ip:9300"]
#cluster.initial_master_nodes: ["node1"]
#是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
#“*” 表示支持所有域名
http.cors.allow-origin: "*"
xpack.security.enabled: false######################
cluster.name: es-cluster
#设置节点名称,集群内节点名称必须唯一。
node.name: node2
#表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
#当前节点是否用于存储数据,是:true、否:false
node.data: true
#索引数据存放的位置
path.data: /usr/share/elasticsearch/data
#日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs
#需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
#监听地址,用于访问该es
network.host: 0.0.0.0
#es对外提供的http端口,默认 9200
http.port: 9200
#TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
#设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["node1ip:9300", "node2ip:9300","node3ip:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1ip:9300", "node2ip:9300","node3ip:9300"]
cluster.initial_master_nodes: ["node1"]
#是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
#“*” 表示支持所有域名
http.cors.allow-origin: "*"
xpack.security.enabled: false

启动es集群

docker run -d --network=host --privileged=true \
-e ES_JAVA_OPTS="-Xms2g -Xmx2g" \
-e TAKE_FILE_OWNERSHIP=true --name es \
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml  \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data  \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs  \
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins  \
--restart unless-stopped elasticsearch:7.14.2#elasticsearch:7.14.2或者已下载好的镜像docker.elastic.co/elasticsearch/elasticsearch:7.14.2 #参数解释
-d:将容器以后台模式(detached mode)运行。
--network=host:使用主机网络模式,容器与主机共享网络命名空间。
--privileged=true:为容器提供特权访问,允许容器内部进行特权操作。
-e ES_JAVA_OPTS="-Xms2g -Xmx2g":设置 Elasticsearch Java 虚拟机 (JVM) 的启动参数,其中 -Xms2g 是最小堆内存大小,-Xmx2g 是最大堆内存大小。
-e TAKE_FILE_OWNERSHIP=true:指示 Elasticsearch 在启动时获取文件所有权。
--name es:为容器指定一个名称为 "es"。
-v:将主机上的 Elasticsearch 配置文件挂载到容器内部
--restart unless-stopped:在容器退出时自动重启容器,除非手动停止容器。

设置安全验证

es配置文件添加认证

新增配置,每个集群节点都需要设置。

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: "elastic-certificates.p12"
xpack.security.transport.ssl.truststore.path: "elastic-certificates.p12"

生成TLS 和身份验证

进入docker

docker exec -it id bash

生成证书

bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""chmod 644 /data/elasticsearch/config/elastic-certificates.p12
#sudo chmod 777 /data/elasticsearch/config/elastic-stack-ca.p12

将证书同步到其他节点

#复制证书到外链目录
docker cp df3552171cf0:/usr/share/elasticsearch/config/elastic-certificates.p12 ./config/elastic-certificates.p12#scp到其他节点
scp ./config/elastic-certificates.p12 user@ip:/dir

启动集群

es 集群不启动,下面的添加密码操作执行不了。

需挂载证书

docker run -d --network=host --privileged=true \
-e ES_JAVA_OPTS="-Xms2g -Xmx2g" \
-e TAKE_FILE_OWNERSHIP=true --name es \
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml  \
-v /data/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12  \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data  \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs  \
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins  \
--restart unless-stopped elasticsearch:7.14.2

设置密码

在主节点上执行就行,数据会自动同步到其他节点

#进入docker#设置密码
./bin/elasticsearch-setup-passwords interactive

访问es

curl -user elastic http://10.100.31.170:9200/_cluster/health


http://www.ppmy.cn/devtools/134683.html

相关文章

ctfshow-web入门-SSTI(web369-web372)下

目录 1、web369 2、web370 3、web371 4、web372 1、web369 完全过滤了 request 双大括号也过滤了 包括前面的单双引号、中括号、下划线都是过滤了的 能构造出一些东西 调用属性: ?name{%set gl(((lipsum|string|list).pop(18))~((lipsum|string|list).pop(18…

使用React和Vite构建一个AirBnb Experiences克隆网站

这一篇文章中,我会教你如何做一个AirBnb Experiences的克隆网站。主要涵盖React中Props的使用。 克隆网站最终呈现的效果: 1. 使用vite构建基础框架 npm create vitelatestcd airbnb-project npm install npm run dev2. 构建网站的3个部分 网站从上…

在MATLAB中导入TXT文件的若干方法

这是一篇关于如何在MATLAB中导入TXT文件的文章,包括示例代码和详细说明 文章目录 在MATLAB中导入TXT文件1. 使用readtable函数导入TXT文件示例代码说明 2. 使用load函数导入TXT文件示例代码说明 3. 使用importdata函数导入TXT文件示例代码说明 4. 自定义导入选项示例…

设计模式-Facade(门面模式)GO语言版本

前言 个人理解Facade模式其实日常生活中已经不知不觉就在使用了,基本核心内容就是暴露一些简单操作的接口,实现上将一些内容封装起来。 如上图,外界使用内部子系统时,只需要通过调用facade接口层面的功能,不需要了解子…

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起,得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战,但代码开发仅是漫长价值链的一环,开发前后的诸多问题仍亟待解决。与此同时,虚拟化和云计算技术的飞跃,…

海思3403对RTSP进行目标检测

1.概述 主要功能是调过live555 testRTSPClient 简单封装的rtsp客户端库,拉取RTSP流,然后调过3403的VDEC模块进行解码,送个NPU进行目标检测,输出到hdmi,这样保证了开发没有sensor的时候可以识别其它摄像头的视频流&…

ES操作命令

1.查看索引 curl -XGET "http://localhost:9200/_cat/indices?v" 2.删除索引 curl -X DELETE "http://127.0.0.1:9200/indexName" 3.ES最大聚合参数设置 index.max_result_window的默认值通常是10000,如果你需要返回更多结果,…

【汇编语言】更灵活的定位内存地址的方法(二)—— 从 [bx+idata] 到 [bx+si+idata]:让你灵活的访问内存

文章目录 前言1. [bxidata]1.1 更加灵活的访问内存1.2 示例1.3 问题一1.4 问题一的分析与求解 2. 用[bxidata]的方式进行数组的处理2.1 问题引入2.2 原来的解决方案2.3 新的解决方案2.3.1 改进后的程序2.3.2 还可以写成这样2.3.3 用C语言来描述看看 2.4 比较与总结 3. SI和DI3.…