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

embedded/2024/11/19 8:54:57/

虚机搭建

添加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/embedded/138732.html

相关文章

keil中char类型的默认取值范围

在编程时,注意他们的默认值(有符号类型或无符号类型) 正常声明时,char默认为无符号类型,给予-10时,得到的值不正确: 使用signed char声明后,就是有符号类型了:-10

px自动安装

px自动装机 pxe:自动安装系统必要的运行环境 无人值守:为系统定制化的安装需要的软件 优点 pxe的优点: 1、规模化:同时装配多台服务器(20-30) 2、自动化:系统安装和服务配置不需要人工干预 3…

大语言模型通用能力排行榜(2024年11月8日更新)

数据来源SuperCLUE 榜单数据为通用能力排行榜 排名 模型名称 机构 总分 理科 文科 Hard 使用方式 发布日期 - o1-preview OpenAI 75.85 86.07 76.6 64.89 API 2024年11月8日 - Claude 3.5 Sonnet(20241022) Anthropic 70.88 82.4…

实时通信协议概述:WebRTC、RTP/RTCP、RTMP、HLS 和 FLV 的比较与应用

总览 协议/格式细节对比适用场景用法WebRTC使用 UDP 传输协议,支持 P2P 通信,可以实现低延迟的实时通信。与其他需要服务器中转的协议相比,WebRTC 可以直接在客户端之间传输数据,降低了延迟和带宽消耗。适用于需要实时交互的场景…

大学生体能训练有哪些项目以及如何使用体能测试计算器?

体能测试在现代社会中扮演着至关重要的角色,它不仅是学生了解自身基础体能的重要途径,还是选拔人才的重要标准。 为了符合教育局提供的相关标准,许多人选择进行体能训练已达到相关标准。此外,除了公安岗和警校,消防员…

JsonObject (JSON 数据中的一个对象)

JsonObject 是 Gson 库中的一个类,它表示 JSON 数据中的一个对象。以下是 JsonObject 类的一些常用方法及其详细解释和代码案例: 1.addProperty(String memberName, String value) 向 JsonObject 中添加一个键值对,其中值是字符串。参数&am…

webpack进阶(一)

一、起步 1、基本安装 首先我们创建一个目录,初始化 npm,然后 在本地安装 webpack,接着安装 webpack-cli(此工具用于在命令行中运行 webpack): mkdir webpack-demo cd webpack-demo npm init -y npm ins…

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展,嵌入式系统、物联网技术、智能设备…