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