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

虚机搭建

添加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
    @Bean
    public 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
相关推荐
飞天大拖把2 小时前
ElasticSearch
大数据·elasticsearch·搜索引擎
yeye198912242 小时前
27-压力测试
elasticsearch
yeye198912245 小时前
ES数据迁移方式
elasticsearch
Elastic 中国社区官方博客5 小时前
使用 Azure OpenAI 服务对数据进行联合 SharePoint 搜索
大数据·运维·服务器·python·elasticsearch·microsoft·sharepoint
FinelyYang16 小时前
Springboot集成ElasticSearch实现minio文件内容全文检索
spring boot·elasticsearch·全文检索
Cachel wood16 小时前
git本地分支推送到远程和远程pull到本地
大数据·数据库·git·elasticsearch·postgresql·r语言·ssh
安静读书20 小时前
Elasticsearch(ES)简介
大数据·elasticsearch
csdn56597385021 小时前
Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别
大数据·elasticsearch·term·match_phrase
天草二十六_简村人21 小时前
spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索
java·spring boot·后端·spring·elasticsearch·架构·jenkins