Elasticsearch入门学习(三):集群的搭建

一、集群的一些概念

集群

一个集群cluster由一个或者多个节点组成,具有相同的cluster.name,协同工作,分项数据和负载。当有新的节点加入或者删除了一个节点时,集群回感知到并能够平衡数据。ElasticSearch中可以监控很多信息,有一个最重要的就是集群健康。集群健康有三个状态:green(所有主要分片和复制分片都可用),yellow(所有主要分片可用,但不是所有复制分片都可用),red(不是所有的主要分片都可用)。

节点

一个节点node就是一个ElasticSearch的实例。 集群中的一个节点会被选举为主节点master,它将临时管理集群级别的一些变更,譬如新建或者删除索引、增加或者移除节点等等。主节点不参与文档级别的变更或者搜索,所以不会成为集群的瓶颈。任何节点都可以成为主节点。 用户能够与集群中的任何节点通信,包括主节点。每一个节点都知道文档存在于哪个节点上,可以转发请求到相应的节点上。

分片

一个分片shard是一个最小级别的工作单元,es把一个完整的索引分成多个分片。仅保存了索引中所有数据的一部分。 分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。 文档存储在分片中,并且在分片中被索引,但是程序不会直接与分片通信,而是与索引通信。

Replicas分片:代表索引副本。es可以设置多个索引的副本,副本的作用是提高了系统的容错性。当某个节点的分片损坏或者丢失的时候可以从副本中恢复。还可以提高查询搜索效率,es会自动对搜索请求进行负载均衡。

二、Elasticsearch配置参数说明

参数 说明
cluster.name: ES ES集群名称,同一个集群内的所有节点集群名称必须保持一致
node.name: slave2 ES集群内的节点名称,同一个集群内的节点名称要具备唯一性
node.master: true 允许节点是否可以成为一个master节点,ES是默认集群中的第一台机器成为master,如果这台机器停止就会重新选举
node.data: false 允许该节点存储索引数据(默认开启)
path.data: ES是搜索引擎,会创建文档,建立索引,此路径是索引的存放目录.可以指定多个存储位置
path.logs: elasticsearch专门的日志存储位置
bootstrap.memory_lock: true 在ES运行起来后锁定ES所能使用的堆内存大小,锁定内存大小一般为可用内存的一半左右;锁定内存后就不会使用交换分区。如果不打开此项,当系统物理内存空间不足,ES将使用交换分区,ES如果使用交换分区,那么ES的性能将会变得很差
network.host: 0.0.0.0 es的HTTP端口和集群通信端口就会监听在此地址上
network.tcp.no_delay: true 是否启用tcp无延迟,true为启用tcp不延迟,默认为false启用tcp延迟
truenetwork.tcp.keep_alive: true 是否启用TCP保持活动状态,默认为true
network.tcp.reuse_address: true 是否应该重复使用地址。默认true,在Windows机器上默认为false
network.tcp.send_buffer_size: 128mb tcp发送缓冲区大小,默认不设置
network.tcp.receive_buffer_size: 128mb tcp接收缓冲区大小,默认不设置
transport.tcp.port: 9301 设置集群节点通信的TCP端口,默认就是9300
transport.tcp.compress: true 设置是否压缩TCP传输时的数据,默认为false
http.max_content_length: 200mb 设置http请求内容的最大容量,默认是100mb
http.cors.enabled: true 是否开启跨域访问
http.cors.allow-origin: "*" 开启跨域访问后的地址限制,*表示无限制
http.port: 9201 定义ES对外调用的http端口,默认是9200
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"] 在Elasticsearch7.0版本已被移除,配置错误。写入候选主节点的设备地址,来开启服务时就可以被选为主节点。默认主机列表只有127.0.0.1和IPV6的本机回环地址。上面是书写格式,discover意思为发现,zen是判定集群成员的协议,unicast是单播的意思,ES5.0版本之后只支持单播的方式来进行集群间的通信,hosts为主机
discovery.zen.minimum_master_nodes: 2 在Elasticsearch7.0版本已被移除,配置无效,为了避免脑裂,集群的最少节点数量为,集群的总节点数量除以2加一
discovery.zen.fd.ping_timeout: 120s 在Elasticsearch7.0版本已被移除,配置无效。探测超时时间,默认是3秒,我们这里填120秒是为了防止网络不好的时候ES集群发生脑裂现象
discovery.zen.fd.ping_retries: 6 在Elasticsearch7.0版本已被移除,配置无效。探测次数,如果每次探测90秒,连续探测超过六次,则认为节点该节点已脱离集群,默认为3次
discovery.zen.fd.ping_interval: 15s 在Elasticsearch7.0版本已被移除,配置无效。节点每隔15秒向master发送一次心跳,证明自己和master还存活,默认为1秒太频繁
discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"] Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点,由discovery.zen.ping.unicast.hosts:参数改变而来
cluster.initial_master_nodes: ["127.0.0.1:9301","127.0.0.1:9302"] Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点
cluster.fault_detection.leader_check.interval: 15s Elasticsearch7新增参数,设置每个节点在选中的主节点的检查之间等待的时间。默认为1秒
discovery.cluster_formation_warning_timeout: 30s Elasticsearch7新增参数,启动后30秒内,如果集群未形成,那么将会记录一条警告信息,警告信息未master not fount开始,默认为10秒
cluster.join.timeout: 30s Elasticsearch7新增参数,节点发送请求加入集群后,在认为请求失败后,再次发送请求的等待时间,默认为60秒
cluster.publish.timeout: 90s Elasticsearch7新增参数,设置主节点等待每个集群状态完全更新后发布到所有节点的时间,默认为30秒
cluster.routing.allocation.cluster_concurrent_rebalance: 32 集群内同时启动的数据任务个数,默认是2个
cluster.routing.allocation.node_concurrent_recoveries: 32 添加或删除节点及负载均衡时并发恢复的线程个数,默认4个
cluster.routing.allocation.node_initial_primaries_recoveries: 32 初始化数据恢复时,并发恢复线程的个数,默认4个

三、环境准备

CentOS7.3 Elasticsearch7.1

解压 Elasticsearch,并在复制两份

四、集群配置

分别在elasticsearch/config下找到elasticsearch.yml增加如下配置

主节点配置

cluster.name: "es"
node.name: master
node.master: true
node.data: true
network.host: 0.0.0.0
http.port: 9201
transport.tcp.port: 9301
discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
cluster.initial_master_nodes: ["127.0.0.1:9301"]
http.cors.enabled: true
http.cors.allow-origin: "*"

从节点1

cluster.name: "es"
node.name: slave1
node.master: false
node.data: true
network.host: 0.0.0.0
http.port: 9202
discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
cluster.initial_master_nodes: ["127.0.0.1:9301"]
http.cors.enabled: true
http.cors.allow-origin: "*"

从节点2

cluster.name: "es"
node.name: slave2
node.master: false
node.data: true
network.host: 0.0.0.0
http.port: 9203
discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
cluster.initial_master_nodes: ["127.0.0.1:9301"]
http.cors.enabled: true
http.cors.allow-origin: "*"

五、效果

粗框是主节点,细框是从节点

六、遇到的问题

在搭建集群的过程中,每次第一个节点开始完成,在开启第二个节点的时候。第一个节点进程会被杀死。看了ES日志也没有发现报错。后来找到原因:需要修改ES中config目录下的jvm.options文件。

vi jvm.options

-Xms 1g

-Xmx 1g

修改为

-Xms 512m

-Xmx 512m

原文地址:https://www.cnblogs.com/yangk1996/p/12657691.html

时间: 2024-08-30 13:38:26

Elasticsearch入门学习(三):集群的搭建的相关文章

zookeeper学习-3集群环境搭建

安装前准备: 1.安装JDK 1) 解压安装包     tar -zxvf jdk-7u45-linux-x64.tar.gz -C apps/2) 修改环境变量      vi /etc/profile    在文件最后添加      export JAVA_HOME=/root/apps/jdk1.7.0_45      export PATH=$PATH:$JAVA_HOME/bin     保存退出 3) 然后重新加载环境变量    source /etc/profile 2.上传zoo

Redis中sentinel集群的搭建和Jedis测试 图文教程[三]

在前两篇Redis中sentinel集群的搭建和Jedis测试 图文教程[一] 和Redis中sentinel集群的搭建和Jedis测试 图文教程[二] 中分别简述了Redis中sentinel集群的搭建和Java代码的Jedis测试. 这篇主要来简单分析一下Redis-sentinel集群的原理,根据追踪sentinel信息来完成Redis-sentinel集群测试中的详细的原理分析.包括master-slave各个中的sentinel信息的分析,failover过程,master宕机后的le

项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点MySQL集群和多管理节点MySQL集群 上一篇的博客中,我们搭建的MySQL集群架构中,只存在一个管理节点,这样搭建的集群可以用如下所示的结构表示. 仔细分析上图就会发现,上图所示的单管理节点MySQL集群存在当唯一的管理节点由于网络.断电.压力过大等各种原因宕机后,数据节点和SQL节点将会各自为

一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)

1:KafKa的官方网址:http://kafka.apache.org/ 开发流程图,如: 2:KafKa的基础知识: 2.1:kafka是一个分布式的消息缓存系统2.2:kafka集群中的服务器都叫做broker2.3:kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接2.4:kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载2.

ElasticSearch(七):ElasticSearch集群的搭建

由于资源有限,使用是一台机器上安装三个elasticSearch服务端组成的集群. 1. 安装elasticSearch6.3.2 将原本安装的elasticSearch6.3.2复制两份,分别重新命名,如下: 2. 修改配置文件 进入elasticSearch的config目录,打开 elasticsearch.yml文件,修改如下信息: 需要注意的是: 默认所有节点都会存储数据. 如果你是一台机器上多个es服务器,那么必须指定不同的tcp端口. # =====================

Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1

如何配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.> 如何安装hadoop2.9.0请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0> 安装spark的服务器: 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 slave

入门初探+伪集群部署

Kafka入门初探+伪集群部署 Kafka是目前非常流行的消息队列中间件,常用于做普通的消息队列.网站的活性数据分析(PV.流量.点击量等).日志的搜集(对接大数据存储引擎做离线分析). 全部内容来自网络,可信度有待考证!如有问题,还请及时指正. 概念介绍 在Kafka中消息队列分为三种角色: producer,即生产者,负责产生日志数据. broker,存储节点,负责按照topic中的partition分区,均匀分布式的存储分区. consumer,即消费者,负责读取使用broker中的分区.

Spark1.2集群环境搭建(Standalone+HA) 4G内存5个节点也是蛮拼的

准备工作: 1.笔记本4G内存 ,操作系统WIN7 2.工具VMware Workstation 3.虚拟机:CentOS6.4共五台 4.搭建好Hadoop集群( 方便Spark可从HDSF上读取文件,进行实验测试) 实验环境: Hadoop HA集群: Ip hostname role 192.168.249.130 SY-0130 ActiveNameNode 192.168.249.131 SY-0131 StandByNameNode 192.168.249.132 SY-0132 D

使用 Docker 一步搞定 ZooKeeper 集群的搭建

背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽爆了, 几个命令就可以搭建一个完整的 ZK 集群. 下面我简单记录一下使用 Docker 搭建 ZK 集群的一些步骤. 镜像下载 hub.docker.com 上有不少 ZK 镜像, 不过为了稳定起见, 我们就使用官方的 ZK 镜像吧.首先执行如下命令: docker pull zookeeper