ElasticSearch集群搭建

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: ElasticSearch集群搭建

1 搭建集群

Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,如果故障两个Master节点,Elasticsearch将无法组成集群.会报错,Kibana也无法启动,因为Kibana无法获取集群中的节点信息。


由于,我们使用只有一台虚拟机,所以我们在虚拟机中安装三个ES实例,搭建伪集群,而ES启动比较耗内存,所以先设置虚拟机的内存3G和CPU个数4个

1.1 整体步骤

步骤如下:

  • 拷贝opt目录下的elasticsearch-7.4.0安装包3个,分别命名:

elasticsearch-7.4.0-oldlu1

elasticsearch-7.4.0-oldlu2

elasticsearch-7.4.0-oldlu3

  • 然后修改elasticsearch.yml文件件。
  • 然后启动启动oldlu1、oldlu2、oldlu3三个节点。

在此,需要我们特别注意的是,像本文这样单服务器多节点( 3 个节点)的情况,仅供测试使用,集群环境如下:


cluster name node name IP Addr http端口 / 通信端口
oldlu-es oldlu1 192.168.149.135 9201 / 9700
oldlu-es oldlu2 192.168.149.135 9202 / 9800
oldlu-es oldlu3 192.168.149.135 9203 / 9900

1.2 拷贝副本

拷贝opt目录下的elasticsearch-7.4.0安装包3个,打开虚拟机到opt目录

执行 拷贝三份

cd /opt
cp -r  elasticsearch-7.4.0   elasticsearch-7.4.0-oldlu1
cp -r  elasticsearch-7.4.0   elasticsearch-7.4.0-oldlu2
cp -r  elasticsearch-7.4.0   elasticsearch-7.4.0-oldlu3

1. 3 修改elasticsearch.yml配置文件

1)、创建日志目录

cd /opt
mkdir logs
mkdir  data
# 授权给oldlu用户
chown -R oldlu:oldlu ./logs
chown -R oldlu:oldlu ./data
chown -R oldlu:oldlu ./elasticsearch-7.4.0-oldlu1
chown -R oldlu:oldlu ./elasticsearch-7.4.0-oldlu2
chown -R oldlu:oldlu ./elasticsearch-7.4.0-oldlu3

打开elasticsearch.yml配置,分别配置下面三个节点的配置文件

vim /opt/elasticsearch-7.4.0-oldlu1/config/elasticsearch.yml 
vim /opt/elasticsearch-7.4.0-oldlu2/config/elasticsearch.yml 
vim /opt/elasticsearch-7.4.0-oldlu3/config/elasticsearch.yml 

2)、下面是elasticsearch-7.4.0-oldlu1配置文件

cluster.name: oldlu-es
node.name: oldlu-1 
node.master: true
node.data: true
node.max_local_storage_nodes: 3 
network.host: 0.0.0.0
http.port: 9201
transport.tcp.port: 9700
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
cluster.initial_master_nodes: ["oldlu-1", "oldlu-2","oldlu-3"]
path.data: /opt/data
path.logs: /opt/logs
#集群名称
cluster.name: oldlu-es
#节点名称
node.name: oldlu-1 
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3 
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9201
#内部节点之间沟通端口
transport.tcp.port: 9700
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["oldlu-1", "oldlu-2","oldlu-3"] 
#数据和存储路径
path.data: /opt/data
path.logs: /opt/logs

3)、下面是elasticsearch-7.4.0-oldlu2配置文件

cluster.name: oldlu-es
node.name: oldlu-2 
node.master: true
node.data: true
node.max_local_storage_nodes: 3 
network.host: 0.0.0.0
http.port: 9202
transport.tcp.port: 9800
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
cluster.initial_master_nodes: ["oldlu-1", "oldlu-2","oldlu-3"]
path.data: /opt/data
path.logs: /opt/logs
#集群名称
cluster.name: oldlu-es
#节点名称
node.name: oldlu-2 
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3 
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9202
#内部节点之间沟通端口
transport.tcp.port: 9800
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["oldlu-1", "oldlu-2","oldlu-3"] 
#数据和存储路径
path.data: /opt/data
path.logs: /opt/logs

4)、下面是elasticsearch-7.4.0-oldlu3 配置文件

cluster.name: oldlu-es
node.name: oldlu-3 
node.master: true
node.data: true
node.max_local_storage_nodes: 3 
network.host: 0.0.0.0
http.port: 9203
transport.tcp.port: 9900
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
cluster.initial_master_nodes: ["oldlu-1", "oldlu-2","oldlu-3"] 
path.data: /opt/data
path.logs: /opt/logs
#集群名称
cluster.name: oldlu-es
#节点名称
node.name: oldlu-3 
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3 
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9203
#内部节点之间沟通端口
transport.tcp.port: 9900
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["oldlu-1", "oldlu-2","oldlu-3"] 
#数据和存储路径
path.data: /opt/data
path.logs: /opt/logs

1.4 执行授权

在root用户下执行
chown -R oldlu:oldlu /opt/elasticsearch-7.4.0-oldlu1
chown -R oldlu:oldlu /opt/elasticsearch-7.4.0-oldlu2
chown -R oldlu:oldlu /opt/elasticsearch-7.4.0-oldlu3
如果有的日志文件授权失败,可使用(也是在root下执行)
cd /opt/elasticsearch-7.4.0-oldlu1/logs
chown -R oldlu:oldlu ./* 
cd /opt/elasticsearch-7.4.0-oldlu2/logs
chown -R oldlu:oldlu ./* 
cd /opt/elasticsearch-7.4.0-oldlu3/logs
chown -R oldlu:oldlu ./* 

1.5 启动三个节点

启动之前,设置ES的JVM占用内存参数,防止内存不足错误

vim /opt/elasticsearch-7.4.0-oldlu1/bin/elasticsearch

可以发现,ES启动时加载/config/jvm.options文件

vim /opt/elasticsearch-7.4.0-oldlu1/config/jvm.options

默认情况下,ES启动JVM最小内存1G,最大内存1G

-xms:最小内存
-xmx:最大内存

修改为256m


启动成功访问节点一


可以从日志中看到:master not discovered yet。还没有发现主节点


访问集群状态信息 http://192.168.149.135:9201/_cat/health?v 不成功


启动成功访问节点二

可以从日志中看到:master not discovered yet。还没有发现主节点master node changed.已经选举出主节点oldlu-2


访问集群状态信息 http://192.168.149.135:9201/_cat/health?v 成功

健康状况结果解释:
cluster 集群名称
status 集群状态 
  green代表健康;
  yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;
  red 代表部分主分片不可用,可能已经丢失数据。
node.total代表在线的节点总数量
node.data代表在线的数据节点的数量
shards 存活的分片数量
pri 存活的主分片数量 正常情况下 shards的数量是pri的两倍。
relo迁移中的分片数量,正常情况为 0
init 初始化中的分片数量 正常情况为 0
unassign未分配的分片 正常情况为 0
pending_tasks准备中的任务,任务指迁移分片等 正常情况为 0
max_task_wait_time任务最长等待时间
active_shards_percent正常分片百分比 正常情况为 100%

启动成功访问节点三

访问集群状态信息 http://192.168.149.135:9201/_cat/health?v 成功

可以看到节点已经变为3个,至此,ES集群已经搭建成功~

2 使用Kibana配置和管理集群

2.1 集群配置

因为之前我们在单机演示的时候也使用到了Kibana,我们先复制出来一个Kibana,然后修改它的集群配置

cd /opt/
cp -r kibana-7.4.0-linux-x86_64   kibana-7.4.0-linux-x86_64-cluster
# 由于 kibana 中文件众多,此处会等待大约1分钟的时间

修改Kibana的集群配置

vim  kibana-7.4.0-linux-x86_64-cluster/config/kibana.yml
加入下面的配置
elasticsearch.hosts: ["http://localhost:9201","http://localhost:9202","http://localhost:9203"]

启动Kibana

sh kibana --allow-root

2.2 管理集群

1、打开Kibana,点开 Stack Monitoring 集群监控

2、点击【Nodes】查看节点详细信息

在上图可以看到,第一个红框处显示【Green】,绿色,表示集群处理健康状态

第二个红框是我们集群的三个节点,注意,oldlu-3旁边是星星,表示是主节点

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
27天前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
211 1
|
3月前
|
存储 负载均衡 Java
Elasticsearch集群面试系列文章一
【9月更文挑战第9天】Elasticsearch(简称ES)是一种基于Lucene构建的分布式搜索和分析引擎,广泛用于全文搜索、结构化搜索、分析以及日志实时分析等场景。
114 7
|
4月前
|
存储 缓存 监控
|
1月前
|
存储 监控 安全
Elasticsearch 集群
【11月更文挑战第3天】
101 54
|
2天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
9 0
|
1月前
|
缓存 监控 Java
Elasticsearch集群JVM调优
Elasticsearch集群JVM调优
43 5
|
27天前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
45 1
|
27天前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
48 1
|
1月前
|
监控 安全 网络安全
Elasticsearch集群的网络设置
Elasticsearch集群的网络设置
32 3
|
1月前
|
缓存 监控 安全
优化Elasticsearch 集群配置
优化Elasticsearch 集群配置
68 4
下一篇
DataWorks