Elasticsearch-8.11.1 (2+1)HA(高可用)集群部署

目录

一、环境描述

二、安装 ES

2.1 下载Elasticsearch

2.2 解压Elasticsearch

2.3 创建es服务账号/密码

2.3 修改服务器配置

2.4 配置节点

2.4.1 配置说明

2.4.2 配置高可用集群

2.4.2.1 maser节点服务配置

2.4.2.2 node1 节点服务配置

2.4.2.3 node2 节点服务配置

2.4.2.3 node3 节点服务配置

2.4.2.3 node4 节点服务配置

2.4.3 服务启动

2.4.4 验证服务启动有没有成功

2.4.4.1 ps查看有没有es进程

2.4.4.2 访问服务

三、部署Kibana

3.1 下载Kibana

3.2 解压

3.3 配置Kibana

3.4  给账号密码做目录授权

3.5 启动服务

3.6 访问Kibana

四、安装Head 插件

4.1 下载Head插件

4.2 修改Gruntfile.js文件

4.3 修改ES配置文件

4.3 安装head 服务

4.4 启动服务

4.5 访问Head

五、ES集群安全

5.1 集群安全策略

5.1.1 版本支持

5.1.2 支持的策略

5.2 不同策略的实现

5.2.1 Minimal security(最低安全等级)配置

5.2.1.1 Minimal security配置步骤

5.2.1.1.1 启动Security

5.2.1.1.2 重启节点服务

5.2.1.1.2 创建用户密码

5.2.1.1.3 配置Kibana的账号信息

5.2.2 Basic security(基本安全等级)配置

5.2.2.1 适用范围和概念

5.2.2.2 配置步骤

5.2.2.2.1 配置文件 elasticsearch.yml

5.2.2.2.2 生成密钥文件

5.2.2.2.3 为节点颁发证书

5.2.2.2.4 把证书拷贝的每个节点

5.2.2.2.5 启动所有节点

5.2.2.2.6 设置集群密码

5.2.2.2.7 配置Kibana

5.2.3 基本安全+HTTPS

5.2.3.1 前置条件

5.2.3.2 配置步骤

5.2.3.2.1 保证每个节点的服务处于停止状态

5.2.3.2.2 生成证书签名文件

5.2.3.2.2.1 当询问您是否要生成 CSR 时,请输入 n

5.2.3.2.2.2 当询问您是否要使用现有 CA 时,输入 y

5.2.3.2.2.3 输入您的 CA 的路径

5.2.3.2.2.4 输入您的 CA 的密码

5.2.3.2.2.5 输入证书的到期值

5.2.3.2.2.6 当询问您是否要为每个节点生成一个证书时,输入 y

5.2.3.2.2.7 出现提示时,输入集群中第一个节点的名称

5.2.3.2.2.8 输入用于连接到您的第一个节点的所有主机名

5.2.3.2.2.9 输入客户端可用于连接到您的节点的 IP 地址

5.2.3.2.3 设置私钥密码

5.2.3.2.3.1 解压elasticsearch-ssl-http.zip文件

5.2.3.2.3.3 修改 elasticsearch.yml 文件

5.2.3.2.3.4 复制证书到config目录中

5.2.3.2.3.5 把私钥密码添加到 Elasticsearch 的安全设置中

5.2.3.3 启动节点服务

5.2.3.4 配置Kibana

5.2.3.4.1 拷贝证书到config下

5.2.3.4.2 修改Kibana配置


一、环境描述

系统环境描述:本教程基于CentOS 8.0版本虚拟机

es集群规划:

节点Master(主节点/候选节点)Master(紧选举)Data(数据节点)KibanaIP
master*192.168.31.215
node1*192.168.31.8
node2**192.168.31.9
node3*192.168.31.167
node4*192.168.31.154

软件版本:
Elasticsearch    8.11.1
kibana      8.11.1

二、安装 ES

2.1 下载Elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-linux-x86_64.tar.gz

2.2 解压Elasticsearch

tar -zxvf elasticsearch-8.11.1-linux-x86_64.tar.gzmv  elasticsearch-8.11.1 /usr/local/

2.3 创建es服务账号/密码

#ES无法通过root账号启动服务
(elastic/xiaoning)
# 创建账号
useradd elastic# 创建密码
passwd elastic# 给账号密码做目录授权
chown -R elastic:elastic /usr/local/elasticsearch-8.11.1

2.3 修改服务器配置

vim  /etc/security/limits.confhard nofile 65536
soft nofile 65636
elastic soft memlock unlimited
elastic hard memlock unlimitedvim /etc/sysctl.confvm.max_map_count=262144
vm.swappiness=0
#重启
sysctl -pulimit -l unlimited

提示:以上操作,所有节点都需要操作

2.4 配置节点

2.4.1 配置说明

cluster.name:集群名称,节点根据集群名称确定是否是同一个集群。

node.name:节点名称,集群内唯一。

node.roles:[ data, master, voting_only ],node.roles配置项如果没有显式的配置,那么当前节点拥有所有角色(master、data、ingest、ml、remote_cluster_client、transform)。如果你放开了注释,或者手动显式添加了 node.roles配置项,那么当前节点仅拥有此配置项的中括号中显式配置的角色,没有配置的角色将被阉割。因此如果在不熟悉角色配置的情况下,不要轻易修改角色配置值, 切勿画蛇添足 。

network.host:节点对外提供服务的地址以及集群内通信的ip地址

bootstrap.memory_lock: Swapping对性能和节点稳定性非常不利,应该不惜一切代价避免。它可能导致GC持续几分钟而不是几毫秒,并且可能导致节点响应缓慢甚至与集群断开连接。在弹性分布式系统中,使用Swap还不如让操作系统杀死节点效果更好。可以通过设置 bootstrap.memory_lock: true 以防止任何 Elasticsearch 堆内存被换出。

http.port:对外提供服务的端口号

discovery.seed_hosts: 集群初始化的种子节点,可配置部分或全部候选节点,大型集群可通过嗅探器发现剩余节点,考试环境配置全部节点即可

cluster.initial_master_nodes:节点初始 active master节点, 必须是有master角色的节点,即必须是候选节点,但并不是必须配置所有候选节点。生产模式下启动新集群时,必须明确列出应在第一次选举中计算其选票的候选节点。第一次成功形成集群后,cluster.initial_master_nodes从每个节点的配置中删除设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。

2.4.2 配置高可用集群

2.4.2.1 maser节点服务配置
vim elasticsearch.ymlcluster.name: ning_cluster
node.name: ning_cluster_node-1
node.roles: [master]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.215
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.2 node1 节点服务配置
vim elasticsearch.ymlcluster.name: ning_cluster
node.name: ning_cluster_node-2
node.roles: [master]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.8
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.3 node2 节点服务配置
vim elasticsearch.ymlcluster.name: ning_cluster
node.name: ning_cluster_node-3
node.roles: [master,data,voting_only]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.9
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.3 node3 节点服务配置
vim elasticsearch.ymlcluster.name: ning_cluster
node.name: ning_cluster_node-4
node.roles: [data]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.167
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.3 node4 节点服务配置
vim elasticsearch.ymlcluster.name: ning_cluster
node.name: ning_cluster_node-5
node.roles: [data]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.154
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]

2.4.3 服务启动

#前台进程./bin/elasticsearch#后台启动 守护进程./bin/elasticsearch -d#推荐方式(保存进程号 不占用窗口,并且方便杀进程):./bin/elasticsearch -d -p pid

2.4.4 验证服务启动有没有成功

2.4.4.1 ps查看有没有es进程
ps -ef|grep elastic
2.4.4.2 访问服务

直接浏览器输入:

http://192.168.31.8:9200/

出现以上内容则说明启动成功。

提示:所有节点都需要执行上述命令

三、部署Kibana

3.1 下载Kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.1-linux-x86_64.tar.gz

3.2 解压

tar -zxvf kibana-8.11.1-linux-x86_64.tar.gz

3.3 配置Kibana

server.port: 5601
server.host: "192.168.31.9"
elasticsearch.hosts: ["192.168.31.215:9200", "192.168.31.8:9200","192.168.31.9:9200", "192.168.31.167:9200","192.168.31.154:9200"]

3.4  给账号密码做目录授权

chown -R elastic:elastic /usr/local/kibana-8.11.1

3.5 启动服务

./bin/kibana

3.6 访问Kibana

浏览器直接访问:http://192.168.31.9:5601/

四、安装Head 插件

4.1 下载Head插件

https://github.com/mobz/elasticsearch-head

4.2 修改Gruntfile.js文件

#添加
hostname:'*',

4.3 修改ES配置文件

#ES配置文件中设置允许跨域
vim elasticsearch.ymlhttp.cors.enabled: true
http.cors.allow-origin: "*"

4.3 安装head 服务

进入 elasticsearch-head 解压目录,执行命令

npm install

4.4 启动服务

执行命令:

npm run start

4.5 访问Head

浏览器直接输入:http://localhost:9100

五、ES集群安全

5.1 集群安全策略

5.1.1 版本支持

不同版本对 Security 的支持不同,对于 ES 6.8 及之前版本,需要手动安装 x-pack,对于7.X以上版本 X-Pack 已经内置,所以不需要额外的操作。

5.1.2 支持的策略

不同环境对集群安全的策略等级要求不同,主要区别在于你是开发环境还是生产集群环境。ES提供了三个不同等级的安全策略:最低安全等级、基本安全等级、基本安全 + HTTPS
就实际而言,在处于 ES 学习 或者本地开发模式下,是可以关闭 Security 功能的,因为如果是以学习为目的,不存在所谓的数据安全问题,因为数据即便被删除也是没关系的。而如果在学习或开发模式下也开启安全策略,意味着你需要频繁的跟密码较劲,实属没必要。

5.2 不同策略的实现

5.2.1 Minimal security(最低安全等级)配置

5.2.1.1 Minimal security配置步骤
5.2.1.1.1 启动Security
vim vim elasticsearch.ymlxpack.security.enabled: true

5.2.1.1.2 重启节点服务
# kill -9 [pid]
./bin/elasticsearch -d -p pid

提示:单节点环境下,能启动成功,集群环境的安全策略最低要求配置成基本安全等级模式,所以这里是启动不了的,过不了集群的安全检查,会直接报错

5.2.1.1.2 创建用户密码
./bin/elasticsearch-setup-passwords interactive

提示:单节点环境下,可以按照这个步骤,集群环境下,需要完成Basic security(基本安全等级)配置后才能创建

5.2.1.1.3 配置Kibana的账号信息

提示:单节点环境下,可以按照这个步骤,集群环境下,需要完成Basic security(基本安全等级)配置后才能配置Kibana账号信息

5.2.2 Basic security(基本安全等级)配置

5.2.2.1 适用范围和概念

最低安全配置仅适用于单节点服务,而不符合集群的最低安全要求。如果集群有多个节点,那么您必须在节点之间配置 TLS。如果您不启用 TLS,无法启动生产集群。

传输层依赖双向 TLS 对节点进行加密和认证。正确应用 TLS 可确保恶意节点无法加入集群并与其他节点交换数据。虽然在 HTTP 层实现用户名和密码身份验证对于保护本地集群很有用,但节点之间的通信安全需要 TLS。

Transport 协议是 Elasticsearch 节点用于相互通信的协议的名称。此名称特定于 Elasticsearch,用于区分传输端口(默认 9300)和 HTTP 端口(默认 9200)。节点使用传输端口相互通信,REST 客户端使用 HTTP 端口与 Elasticsearch 通信。

5.2.2.2 配置步骤
5.2.2.2.1 配置文件 elasticsearch.yml
# 开启ssl访问请求头配置(head访问需要)
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
#配置SSL证书
xpack.security.transport.ssl.enabled: true#设置验证模式为:certificate
xpack.security.transport.ssl.verification_mode: certificate#设置证书路径
xpack.security.transport.ssl.key: certs/elastic-certificates.key
xpack.security.transport.ssl.certificate: certs/elastic-certificates.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
5.2.2.2.2 生成密钥文件

提示:

1、删除各个es节点$ELASTICSEARCH_HOME/config目录下的elasticsearch.keystore文件
2、清空各个es节点$ELASTICSEARCH_HOME/ 下的data和log目录

./bin/elasticsearch-certutil ca --pem --out ca.zip --days 36500 -s

5.2.2.2.3 为节点颁发证书
#解压ca.zip
unzip ca.zip# 颁发证书
./bin/elasticsearch-certutil cert --ca-cert ca/ca.crt --ca-key ca/ca.key --pem --name elastic-certificates --out elastic-certificates.zip --days 36500 -s

5.2.2.2.4 把证书拷贝的每个节点

#每个节点的config文件夹下,新建一个certs目录

mkdir certs

#拷贝文件到节点的cert目录下

#解压证书文件
unzip elastic-certificates.zip
#拷贝到certs文件夹下
cp ca/* elastic-certificates/* config/certs# 拷贝给其他机器
scp config/certs/* elastic@node1:/usr/local/elasticsearch-8.11.1/config/certs/scp config/certs/* elastic@node2:/usr/local/elasticsearch-8.11.1/config/certs/scp config/certs/* elastic@node3:/usr/local/elasticsearch-8.11.1/config/certs/scp config/certs/* elastic@node4:/usr/local/elasticsearch-8.11.1/config/certs/
5.2.2.2.5 启动所有节点
5.2.2.2.6 设置集群密码
bin/elasticsearch-setup-passwords interactiveelastic xiaoning
apm_system xiaoning
kibana_system xiaoning
logstash_system xiaoning
beats_system xiaoning
remote_monitoring_user xiaoning

5.2.2.2.7 配置Kibana
# 配置账号密码
vim kibana.ymlelasticsearch.username: "kibana_system"
elasticsearch.password: "xiaoning"

5.2.3 基本安全+HTTPS

在生产环境中,如果没有基于HTTPS上启用 TLS,那么部分安全功能会无法使用,比如Token和API密钥。

官方文档参考:

Set up basic security for the Elastic Stack plus secured HTTPS traffic | Elasticsearch Guide [8.11] | Elastic

5.2.3.1 前置条件

启用 HTTPS 必须要配置集群 Security,即基础集群安全策略。

5.2.3.2 配置步骤
5.2.3.2.1 保证每个节点的服务处于停止状态
5.2.3.2.2 生成证书签名文件
./bin/elasticsearch-certutil http

提示:
此命令会生成一个 .zip文件,其中包含用于 Elasticsearch 和 Kibana 的证书和密钥。每个文件夹都包含一个 README.txt 解释如何使用这些文件。

5.2.3.2.2.1 当询问您是否要生成 CSR 时,请输入 n

5.2.3.2.2.2 当询问您是否要使用现有 CA 时,输入 y

5.2.3.2.2.3 输入您的 CA 的路径

elastic-stack-ca.p12这是您为集群生成 的文件的绝对路径

5.2.3.2.2.4 输入您的 CA 的密码
5.2.3.2.2.5 输入证书的到期值

您可以输入年、月或日的有效期。例如,输入 90D90 天.

5.2.3.2.2.6 当询问您是否要为每个节点生成一个证书时,输入 y

每个证书都有自己的私钥,并针对特定的主机名或 IP 地址颁发.

5.2.3.2.2.7 出现提示时,输入集群中第一个节点的名称

使用生成节点证书时使用的相同节点名称.

5.2.3.2.2.8 输入用于连接到您的第一个节点的所有主机名

这些主机名将作为 DNS 名称添加到证书的主题备用名称 (SAN) 字段中。
列出用于通过 HTTPS 连接到集群的每个主机名和变体

5.2.3.2.2.9 输入客户端可用于连接到您的节点的 IP 地址

到此,证书生成完成,可以看到生成的证书名称

5.2.3.2.3 设置私钥密码
5.2.3.2.3.1 解压elasticsearch-ssl-http.zip文件
unzip elasticsearch-ssl-http.zip

5.2.3.2.3.3 修改 elasticsearch.yml 文件
#启用 HTTPS
xpack.security.http.ssl.enabled: true
#指定 http.p12 安全证书的位置
xpack.security.http.ssl.keystore.path: http.p12
5.2.3.2.3.4 复制证书到config目录中
#拷贝到本机
cp elasticsearch/http.p12 config/
# 拷贝给其他机器scp elasticsearch/http.p12 elastic@node1:/usr/local/elasticsearch-8.11.1/config/scp elasticsearch/http.p12 elastic@node2:/usr/local/elasticsearch-8.11.1/config/scp elasticsearch/http.p12 elastic@node3:/usr/local/elasticsearch-8.11.1/config/scp elasticsearch/http.p12 elastic@node4:/usr/local/elasticsearch-8.11.1/config/
5.2.3.2.3.5 把私钥密码添加到 Elasticsearch 的安全设置中
#每个节点都需要执行,每个节点的密码可以设置的并不一样,生产环境可以做好密码记录,这里我为了方便,就设置一样了
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
输入密码:xiaoning
5.2.3.3 启动节点服务
5.2.3.4 配置Kibana
5.2.3.4.1 拷贝证书到config下
scp kibana/elasticsearch-ca.pem elastic@node2:/usr/local/kibana-8.11.1/config
5.2.3.4.2 修改Kibana配置
vim kibana.ymlelasticsearch.ssl.certificateAuthorities:[config/elasticsearch-ca.pem]elasticsearch.hosts: ["https://192.168.31.215:9200", "https://192.168.31.8:9200","https://192.168.31.9:9200", "https://192.168.31.167:9200","https://192.168.31.154:9200"]

以上之后,kibana 与Elasticsearch之间的SSL加密通道传输就完成了。

好了,本次分享就到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311113.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql间隙锁demo分析

概述 通常用的mysql都是innodb引擎; 一般在update的时候用id都会认为是给行记录加锁; 在使用非唯一索引更新时,会遇到临键锁(范围锁); 临键锁和表中的数据有关; mysq版本:8 隔离级别&#xf…

混凝土支撑模板的安装技巧有哪些?

在建筑工程中,混凝土支撑模板的正确安装对于确保结构的安全和工程的顺利进行至关重要。以下是一些实用的安装技巧,可以帮助施工人员更有效地安装混凝土支撑模板: 1. 熟悉设计和施工图纸 在安装前,彻底熟悉设计和施工图纸是非常重…

精致旅游网ROXANDREA 网页设计 html模板

一、需求分析 旅游网站通常具有多种功能,以下是一些常见的旅游网站功能: 酒店预订:旅游网站可以提供酒店预订服务,让用户搜索并预订符合其需求和预算的酒店房间。 机票预订:用户可以通过旅游网站搜索、比较和预订机票…

基于EPICS modbus模块的一通道电压监测项目

先介绍在本项目中使用到的硬件: 1)开发板:为香橙派Zero2,安装系统如下: Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy 2) USB转485模块&…

AJAX: 整理2:学习原生的AJAX,这边借助express框架

1. npm install express 终端直接安装 2. 测试案例:Hello World! 新建一个express.js的文件,写入下方的内容 // 1. 引入express const express require(express)// 2. 创建服务器 const app express()// 3.创建路由规则 // request 是对请…

蓝桥杯真题位运算

位运算:对二进制进行操作的运算方式 与运算:有0得0 或运算:有1得1 异或运算:相同为0、不同为1取反 左移、右移 与运算&:有0则为0,全1为1 或运算|:有1则为1,全0为0 异或运算^:相同为0、不同为1 交换律: x^yy ^x 结合律: x ^(y ^z)(x ^y)^z …

《微信小程序开发从入门到实战》学习六十七

6.6 网络API 部分小程序服务端不是用云开发技术实现,而是由开发人员使用后端开发语言实现。 在小程序用网络API与(开发人员使后端开发语言建设的)服务端进行交互,可与服务端交换数据、上传或下载文件。 6.6.1 服务器域名配置 …

Langchain-Chatchat开源库使用的随笔记(一)

笔者最近在研究Langchain-Chatchat,所以本篇作为随笔记进行记录。 最近核心探索的是知识库的使用,其中关于文档如何进行分块的详细,可以参考笔者的另几篇文章: 大模型RAG 场景、数据、应用难点与解决(四)R…

Termius for Mac/Win:一站式终端模拟器、SSH 和 SFTP 客户端软件的卓越选择

随着远程工作和云技术的普及,对于高效安全的远程访问和管理服务器变得至关重要。Termius,一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件,正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案,允许用户通过单一平…

华清远见作业第十六天

思维导图: 双向循环链表头插入: 代码: Doublelist insert_head(Doublelist head,datatype element) {//创建新节点sDoublelist screate_node();if(NULLs){return head;}s->dataelement;//数据存储//判断链表是否为空if(NULLhead){heads;…

使用Vue.js实现手机系统检测和页面响应

题目:使用Vue.js实现手机系统检测和页面响应 摘要:本文将介绍如何使用Vue.js来检测用户的手机操作系统,并根据操作系统类型进行相应的页面响应。我们将通过编写一个Vue组件,利用用户代理字符串来检测设备类型,并根据检…

网络层解读

基本介绍 概述 当两台主机之间的距离较远(如相隔几十或几百公里,甚至几千公里)时,就需要另一种结构的网络,即广域网。广域网尚无严格的定义。通常是指覆盖范围很广(远超过一个城市的范围)的长距离的单个网络。它由一些结点交换机以及连接这些…