精华内容
下载资源
问答
  • es集群
    千次阅读
    2022-03-29 15:59:26

    Elasticsearch集群简介

    一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是 “elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。在产品环境中显式地设定这个名字是一个好习惯,但是使用默认值来进行测试/开发也是不错的。

    一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况 下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。

    一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意 味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。

    在一个集群里,只要你想,可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。

    Elasticsearch集群要达到基本高可用,一般要至少启动3个节点,3个节点互相连接,单个节点包括所有角色,其中任意节点停机集群依然可用。为什么要至少3个节点?因为集群选举算法奇数法则。

    Elasticserach管理节点职责是管理集群元数据、索引信息、节点信息等,自身不涉及数据存储与查询,资源消耗低;相反数据节点是集群存储与查询的执行节点。管理节点与数据节点分离,各司其职,任意数据节点故障或者全部数据节点故障,集群仍可用;管理节点一般至少启动3个,任意节点停机,集群仍正常运行。

    Elasticsearch内部执行查询或者更新操作时,需要路由,默认所有节点都具备此职能,特别是大的查询时,协调节点需要分发查询命令到各个数据节点,查询后的数据需要在协调节点合并排序,这样原有数据节点代价很大,所以分离职责

    Elasticsearch设置读写分离指的是在协调节点上,不是数据节点上,集群大量的查询需要消耗协调节点很大的内存与CPU合并结果,同时集群大量的数据写入会阻塞协调节点,所以在协调节点上做读写分离很少必要,也很简单,由集群设计搭建时规划好

    Elasticsearch给数据节点标签,目的是分离索引数据的分布,在一个集群规模中等以上,索引数据用途多种多样,对于数据节点的资源需求不一样,数据节点的配置可以差异化,有的数据节点配置高做实时数据查询,有的数据节点配置低做历史数据查询,有的数据节点做专门做索引重建。Elasticsearch集群部署时需要考虑基础硬件条件,集群规模越来越大,需要多个数据中心,多个网络服务、多个服务器机架,多个交换机等组成,索引数据的分布与这些基础硬件条件都密切相关。

    Elasticsearch集群规模大了之后得考虑集群容灾,若某个机房出现故障,则可以迅速切换到另外的容灾机房。

    分片和复制(shards & replicas)

    一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。

    为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

    分片之所以重要,主要有两方面的原因:

    允许你水平分割/扩展你的内容容量
    允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
    至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。

    在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非 常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。

    复制之所以重要,有两个主要原因:

    在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
    扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行
    总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和 复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变 分片的数量。

    默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

    index: es里的index相当于一个数据库。

    type: 相当于数据库里的一个表。

    id: 唯一,相当于主键。

    node:节点是es实例,一台机器可以运行多个实例,但是同一台机器上的实例在配置文件中要确保http和tcp端口不同(下面有讲)。

    cluster:代表一个集群,集群中有多个节点,其中有一个会被选为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。

    shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

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

    实战建议:对生产环境中,分片设置很重要,需要最好容量评估与规划

    根据数据容量评估分配数,设置过小,后续无法水平扩展;单分片数据量太大,也容易导致数据分片耗时严重

    分片数设置如果太大,会导致资源浪费,性能降低;同时也会影响搜索结果打分和搜索准确性

    可扩展

    随着公司业务发展,Elasticsearch 也面临两个挑战:

    搜索数据量从百万到亿量级

    搜索请求 QPS 也猛增

    那么需要将原来节点和增量数据重新从 10 个节点分布到 100 个节点。Elasticsearch 可以横向扩展至数百(甚至数千)的服务器节点,同时可以处理PB级数据。Elasticsearch 为了可扩展性而生,由小规模集群增长为大规模集群的过程几乎完全自动化,这是水平扩展的体现。

    部分节点停止服务,整个集群服务不受影响,照样正常提供服务

    Elasticsearch 在后台自动完成了分布式相关工作,如下:

    自动分配文档到不同分片或者多节点上

    均衡分配分片到集群节点上,index 和 search 操作时进行负载均衡

    复制每个分片,支持数据冗余,防止硬件故障数据丢失

    集群扩容时,无缝整合新节点,并且重新分配分片

    Elasticsearch 集群知识点如下:

    不同集群通过名字区分,默认集群名称为 “elasticsearch”

    集群名 cluster name ,可以通过配置文件修改或者 行 -E cluster.name=user-es-cluster 进行设置一个集群由多个节点组成

    Elasticsearch集群容灾

    Elasticsearch 在高可用性上,体现如下两点:

    服务可用性:允许部分节点停止服务,整体服务没有影响

    数据可用性:允许部分节点丢失,最终不会丢失数据

    Elasticsearch单个集群规模不能无限增长,理论上可以,实际很危险,通过创建多个分集群分解,集群直接建立直接连接,客户端可以通过一个代理集群访问任意集群,包括代理集群本身数据。Elasticsearch集群支持异地容灾,采用的是跨集群复制的机制,与同一集群主分片副本分片分离是不同的概念,2个集群完全是独立部署运行,仅数据同步复制。

    动态维护参与选举的节点列表(集群成员变化)

    集群扩容,缩容,节点临时或永久离线时是如何处理的。在7.x 之前的版本中,用户需要手工配置 discovery.zen.minimum_master_nodes,来明确告诉集群过半节点数应该是多少,并在集群扩缩容时调整他。现在,集群可以自行维护。

    在取消了discovery.zen.minimum_master_nodes配置后,ES 如何判断多数?是自己计算和维护minimum_master_nodes值么?不,现在的做法不再记录“quorum” 的具体数值,取而代之的是记录一个节点列表,这个列表中保存所有具备 master 资格的节点(有些情况下不是这样,例如集群原本只有1个节点,当增加到2个的时候,这个列表维持不变,因为如果变成2,当集群任意节点离线,都会导致无法选主。这时如果再增加一个节点,集群变成3个,这个列表中就会更新为3个节点),称为 VotingConfiguration,他会持久化到集群状态中。

    在节点加入或离开集群之后,Elasticsearch会自动对VotingConfiguration做出相应的更改,以确保集群具有尽可能高的弹性。在从集群中删除更多节点之前,等待这个调整完成是很重要的。你不能一次性停止半数或更多的节点。

    通过下面的命令查看集群当前的 VotingConfiguration

    curl -X GET “localhost:9200/_cluster/state?filter_path=metadata.cluster_coordination.last_committed_config&pretty”

    默认情况下,ES 自动维护VotingConfiguration,有新节点加入的时候比较好办,但是当有节点离开的时候,他可能是暂时的重启,也可能是永久下线。你也可以人工维护 VotingConfiguration,配置项为:cluster.auto_shrink_voting_configuration,当你选择人工维护时,有节点永久下线,需要通过 voting exclusions API 将节点排除出去。如果使用默认的自动维护VotingConfiguration,也可以使用 voting exclusions API 来排除节点,例如一次性下线半数以上的节点。

    如果在维护VotingConfiguration时发现节点数量为偶数,ES 会将其中一个排除在外,保证 VotingConfiguration是奇数。因为当是偶数的情况下,网络分区将集群划分为大小相等的两部分,那么两个子集群都无法达到“多数”的条件。

    ES 可以在集群节点增减的时候自动维护VotingConfiguration,但是他需要一个初始化配置,也就是说在第一次的时候你必须明确告诉 ES,VotingConfiguration中都有哪些节点。

    节点切换集群

    曾经有一个节点在 A 集群,现在要把他加入到 B 集群,如何操作?在 ES 7.x之前的版本中,直接修改集群名称和发现地址就可以,现在由于选举算法的差异,需要以下操作:

    删除节点/data/nodes/0/_state目录。
    集群名称改成相同
    cluster.initial_master_nodes配置修改成一致,或者删除该配置
    启动节点

    更多相关内容
  • 8.2.8 SpringBoot整合elasticsearch集群 Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。Spring Boot是由Pivotal团队...
  • 1、配置环境参数 cat /etc/hosts 172.16.1.1 test-es01 172.16.1.2 test-es02 172.16.1.3 test-es03 # grep vm.max_map_count /...mkdir -p /data/server/elasticsearch/{esdata01,esdata02,esdata03} chown 1000.
  • ElasticSearch集群配置文件 其他节点只需要修改以下内容: 1. node.name: es-node1 --节点名称不能一样 2. http.port: 8081 --节点端口 3. transport.port: 8090 --节点间通信端口 4. discovery.seed_hosts: --集群...
  • springboot 2.0.2集成elasticsearch5.5.1,并使用集群模式,亲测可用!!!
  • 该安装包实现利用给定参数安装单机版或者集群es数据库,指定参数后安装过程全自动,自动修改系统内核,配置jdk,自动识别并配置内存,自动根据节点数配置集群脑溢节点配置数。涉及到以下操作 1、自动检测配置java...
  • elasticsearch集群搭建

    千次阅读 2022-03-06 14:47:15
    elasticsearch ARM架构集群搭建 一、搭建环境 搭建服务器IP 环境 es版本号 路径 20.10.0.xx CentOS Linux release 7.9.2009 (AltArch) elasticsearch-7.13.1-aarch64. /data/elsticsearch/* 20.10.0.xx ...

    elasticsearch ARM架构集群搭建

    一、搭建环境

    搭建服务器IP环境es版本号路径
    20.10.0.xxCentOS Linux release 7.9.2009 (AltArch)elasticsearch-7.13.1-aarch64./data/elsticsearch/*
    20.10.0.xxCentOS Linux release 7.9.2009 (AltArch)elasticsearch-7.13.1-aarch64/data/elsticsearch/*
    20.10.0.xxCentOS Linux release 7.9.2009 (AltArch)elasticsearch-7.13.1-aarch64/data/elsticsearch/*

    二、搭建步骤

    1.下载安装包
    wget https://mirrors.huaweicloud.com/elasticsearch/7.13.1/
    
    2.配置目录

    ​ 安装完毕后会生成很多文件,包括配置文件日志文件等等,下面几个是最主要的配置文件路径

    /etc/elasticsearch/elasticsearch.yml                            # els的配置文件
    /etc/elasticsearch/jvm.options                                  # JVM相关的配置,内存大小等等
    /etc/elasticsearch/log4j2.properties                            # 日志系统定义
    /usr/share/elasticsearch                                        # elasticsearch 默认安装目录
    /var/lib/elasticsearch                                          # 数据的默认存放位置
    
    3.创建用于存放数据与日志的目录

    数据文件会随着系统的运行飞速增长,所以默认的日志文件与数据文件的路径不能满足我们的需求,那么手动创建日志与数据文件路径,可以使用NFS、可以使用Raid等等方便以后的管理与扩展

    mkdir -p /data/elasticsearch/data
    mkdir -p /data/elasticsearch/log
    chown -R elasticsearch.elasticsearch /data/elasticsearch/*
    
    4.集群配置(集群各节点参照案例设置)

    集群配置中最重要的两项是node.namenetwork.host,每个节点都必须不同。其中node.name是节点名称主要是在Elasticsearch自己的日志加以区分每一个节点信息。
    discovery.zen.ping.unicast.hosts是集群中的节点信息,可以使用IP地址、可以使用主机名(必须可以解析)。

    vim /etc/elasticsearch/elasticsearch.yml
    
    cluster.name: my-els                               # 集群名称
    node.name: els-node1                               # 节点名称,仅仅是描述名称,用于在日志中区分
    
    path.data: /data/elasticsearch/data                 # 数据的默认存放路径
    path.logs: /data/elasticsearch/log                  # 日志的默认存放路径
    
    network.host: 20.10.0.xx                       # 当前节点的IP地址
    http.port: 9200                                    # 对外提供服务的端口,9300为集群服务的端口
    #添加如下内容
    #culster transport port
    transport.tcp.port: 9300
    transport.tcp.compress: true
    #初始化主节点个数跟 discovery.zen.minimum_master_nodes数量对应上:
    cluster.initial_master_nodes: ["节点name1","节点name2"]
    discovery.zen.ping.unicast.hosts: ["20.10.0.xx:9300", "20.10.0.xx:9300","20.10.0.xx:9300"]       
    # 集群个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析
    
    discovery.zen.minimum_master_nodes: 2              # 为了避免脑裂,集群节点数最少为 半数+1
    

    注意:不要在elasticsearch.yml中添加index开头的配置项。如

    #index.number_of_shards: 5
    #index.number_of_replicas: 1
    
    5.JVM配置

    由于Elasticsearch是Java开发的,所以可以通过/etc/elasticsearch/jvm.options配置文件来设定JVM的相关设定。如果没有特殊需求按默认即可。
    不过其中还是有两项最重要的-Xmx128g-Xms10gJVM的最大最小内存。如果太小会导致Elasticsearch刚刚启动就立刻停止。太大会拖慢系统本身。

    vim /etc/elasticsearch/jvm.options
    
    -Xms128g                                                  # JVM最大、最小使用内存
    -Xmx10g
    
    6.使用ROOT账户执行以下命令

    elasticsearch的相关配置已经完成,下面需要启动elasticsearch集群。但是由于安全的考虑,elasticsearch不允许使用root用户来启动,所以需要创建一个新的用户,并为这个账户赋予相应的权限来启动elasticsearch集群。

    创建ES运行用户

    # 创建用户组
    groupadd es
    # 创建用户并添加至用户组
    useradd es -g es
    # 更改用户密码(输入 123123)
    passwd es
    
    修改ES目录权限
    chown -R es:es  /data/elasticsearch/data
    chown -R es:es  /data/elasticsearch/log
    chown -R es:es  /etc/elasticsearch/
    chown  es:es  /etc/sysconfig/elasticsearch
    chown -R es:es  /usr/share/elasticsearch/
    chown -R es:es  /var/log/elasticsearch/      # 以上操作都是为了赋予es用户操作权限
    
    启动服务
    # 需切换为es用户
    su es
    # 启动服务(当前的路径为:/usr/share/elasticsearch/)
    ./bin/elasticsearch
    
    后台运行ES

    可以加入-p 命令 让es在后台运行, -p 参数 记录进程ID为一个文件

    # 设置后台启动
    ./bin/elasticsearch -p /tmp/elasticsearch-pid -d
    
    结束进程
    # 查看运行的pid
    cat /tmp/elasticsearch-pid && echo
    # 结束进程
    kill -SIGTERM {pid}
    
    验证一下服务是否正常
    curl -i "http://20.10.0.xx:9200"
    

    三、错误记录及修复方法

    1.max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

    解决:修改切换到root用户修改配置limits.conf 添加下面两行
    
    命令:vi /etc/security/limits.conf
    
    *        hard    nofile           65536
    *        soft    nofile           65536
    切换到es的用户。
    

    四、es-head插件安装

    Elasticsearch Head Plugin:head插件是一个ES集群的web前端工具,它提供可视化的页面方便用户查看节点信息,对ES进行各种操作,如查询、删除、浏览索引等。

    1、安装相关依赖包

    (1)安装node环境

    由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)

    wget https://nodejs.org/dist/v9.3.0/node-v12.19.0-linux-arm64.tar.xz  # 下载nodejs最新的bin包
    xz -d node-v12.19.0-linux-arm64.tar.xz  # 解压包
    tar -xf node-v12.19.0-linux-arm64.tar  # 解压包
    ln -s /data/node-v9.3.0-linux-x64/bin/node /usr/bin/node  # 部署bin文件,先确定nodejs的bin路径
    ln -s /data/node-v9.3.0-linux-x64/bin/npm /usr/bin/npm
    测试:
    node -v
    npm
    
    2、安装elasticsearch-head

    另外:5.0以前的版本可以通过elasticseach自带的plugin命令 安装elasticsearch-head,5.0以后不支持了。只可以去下载elasticsearch-head对应的源码包去安装。

    cd /usr/local/
    `git clone git://github.com/mobz/elasticsearch-head.git`
    `cd elasticsearch-head`
    npm install
    

    配置:

    vi _site/app.js
    
    # 修改 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";   # 在文件的4354行附近
    # 这里的 localhost 是指进入elasticsearch-head页面时默认访问的ES集群地址,把她修改为其中一台ES节点的地址即可
    this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.60.200:9200";
    

    还要修改Head主目录下的Gruntfile.js,由于默认文件中是没有hostname属性的,我们需要手动添加:

    为什么需要修改配置文件:
    
    head插件连接elasticsearch需要注意的点:
    
    因为head插件是一个独立进程,启动后是一个独立的服务器外加端口,比如我的虚拟机ip地址:http://20.10.0.xx:9100/
    
    而elasticsearch启动后也是一个独立的进程,ip地址:http://20.10.0.xx:9200/
    
    这样两个独立进程,虽然服务器ip地址相同,但是端口不同,此时会发生跨域的情况。。
    
    于是官方给出这样一段话,我们在对elasticsearch启动的时候追加两个配置文件属性即可防止跨域。
    

    即:在elasticsearch.yml文件的最后,添加如下内容:

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    

    配置完毕。

    3、启动elasticsearch集群

    在三台机器上,分别启动elasticsearch即可。

    ./bin/elasticsearch
    
    4、启动elasticsearch-head
    cd /usr/local/elasticsearch-head //先跳转到head目录下
    grunt server //若想在后台运行,结尾追加“&”,也可以使用 npm run start启动
    

    五、ik分词器安装

    1.插件地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.1/elasticsearch-analysis-ik-7.13.1.zip
    2.运行命令行:

    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.1/elasticsearch-analysis-ik-7.13.1.zip
    

    运行完成后会发现多了以下文件:esroot 下的plugins和config文件夹多了analysis-ik目录。

    3.从新启动es集群即可。

    参考文献:

    es集群搭建:www.cnblogs.com/tianyiliang/p/10291305.html

    es分词器:www.cnblogs.com/janes/p/8393634.html

    ik/releases/download/v7.13.1/elasticsearch-analysis-ik-7.13.1.zip

    
    > 运行完成后会发现多了以下文件:esroot 下的plugins和config文件夹多了analysis-ik目录。
    
    3.从新启动es集群即可。
    
    参考文献:
    
    es集群搭建:www.cnblogs.com/tianyiliang/p/10291305.html
    
    es分词器:www.cnblogs.com/janes/p/8393634.html
    
    
    展开全文
  • 1 A机房elasticsearch集群基本情况 2 在B机房完成elasticsearch集群扩容 2.1 扩容规划 2.2 启动非master节点 2.3 通知业务修改集群连接地址 3 将索引数据排空迁移至B机房 4 下线A机房data节点 5 master节点...

    目录

    背景介绍

    1 A机房elasticsearch集群基本情况

    2 在B机房完成elasticsearch集群扩容

    2.1 扩容规划

    2.2 启动非master节点

    2.3 通知业务修改集群连接地址

    3 将索引数据排空迁移至B机房

    4 下线A机房data节点

    5 master节点切割

    5.1 关闭集群自动均衡

    5.2 从节点pending master切割

    5.3 主节点required master切割

    6 恢复集群配置

    7 修改B机房节点配置,不需要重启


    背景介绍

    因为业务调整,我司有一批服务器需要从A机房退役迁移至B机房。但是因为涉及业务量太大,为了降低对业务的影响,本次迁移通过先扩容,再缩容的方式完成迁移。本次es集群迁移以elasticsearch集群介绍为例,所有迁移流程均有实践操作。

    1 A机房elasticsearch集群基本情况

    A机房elasticsearch集群一共10个节点,其中7个节点为data角色,其余3个节点为master/data角色合装,discovery.zen.ping.unicast.hosts配置为三个master节点:10.0.0.1,10.0.0.2,10.0.0.3

    network.hostnode.namenode.datanode.master
    10.0.0.1node1truetrue
    10.0.0.2node2truetrue
    10.0.0.3node3truetrue
    10.0.0.4node4trueflase
    10.0.0.5node5trueflase
    10.0.0.6node6trueflase
    10.0.0.7node7trueflase
    10.0.0.8node8trueflase
    10.0.0.9node9trueflase
    10.0.0.10node10trueflase

    2 在B机房完成elasticsearch集群扩容

    2.1 扩容规划

    B机房elasticsearch集群规划一共10个节点,其中7个节点为data角色,余下3个节点规划为单独master角色,discovery.zen.ping.unicast.hosts配置为六个master节点:10.0.0.1,10.0.0.2,10.0.0.3,20.1.1.1,20.1.1.2,20.1.1.3

    注:B机房将master和data角色分离,是为了减轻合装给master带来的压力,导致集群出现不稳定性。

    network.hostnode.namenode.datanode.master是否启动
    20.1.1.1node11flasetrue
    20.1.1.2node12flasetrue
    20.1.1.3node13flasetrue
    20.1.1.4node14trueflase
    20.1.1.5node15trueflase
    20.1.1.6node16trueflase
    20.1.1.7node17trueflase
    20.1.1.8node18trueflase
    20.1.1.9node19trueflase
    20.1.1.10node20trueflase

    2.2 启动非master节点

    只启动data节点,用于数据的迁移。master节点服务暂时不启动。

    ssh 20.1.1.4 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
    ssh 20.1.1.5 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
    ssh 20.1.1.6 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
    ssh 20.1.1.7 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
    ssh 20.1.1.8 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
    ssh 20.1.1.9 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
    ssh 20.1.1.10 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

    2.3 通知业务修改集群连接地址

    因为A机房机器下线后,只剩下B机房机器可以连通,所以连接地址需要修改为B机房node.data节点。不连接master节点原因,只是为了减轻master节点负担。

    20.1.1.4:9200,20.1.1.5:9200,20.1.1.6:9200,20.1.1.7:9200,20.1.1.8:9200,20.1.1.9:9200,20.1.1.10:9200

    3 将索引数据排空迁移至B机房

    注:跨机房数据迁移,需要提前考虑机房间带宽情况。防止集群带宽速率过高,影响到其他业务传输。

    1、先检查集群是否已经有节点数据被排空
    curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
    #curl命令可以在kibana替换为如下命令:
    get /_cluster/settings?pretty
    ​
    2、如果1查询结果有排空数据的节点,接下来操作需要做追加。无则忽略。
    curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent":{"cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"},"transient":{"cluster.routing.allocation.exclude._ip":"10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"}}'
    #curl命令可以在kibana替换为如下命令:
    PUT /_cluster/settings  //排空数据节点,填 的老节点的ip
    {
      "persistent" :{
          "cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"
       },
         "transient" :{
          "cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"
       }
    }
    ​
    3、检查数据排空进度
    curl -XGET "http://集群任意IP:9200/_cat/shards?v&pretty&s=state:desc"
    #curl命令可以在kibana替换为如下命令:
    get /_cat/shards?v&pretty&s=state:desc
    ​
    4、调整如下参数,可以加快跨机房数据迁移速度。
    #每秒传输速度,默认40Mb
    PUT /_cluster/settings  
    {
      "persistent" :{
          "indices.recovery.max_bytes_per_sec" : "200mb"
       },
         "transient" :{
          "indices.recovery.max_bytes_per_sec" : "200mb"
       }
    }
    ​
    #恢复线程数,默认是2
    PUT /_cluster/settings  
    {
      "persistent": {
        "cluster.routing.allocation.node_concurrent_recoveries": "5"
      },
      "transient": {
        "cluster.routing.allocation.node_concurrent_recoveries": "5"
      }
    }
    ​
    #当前节点在进行主分片恢复时的数量,默认是4
    PUT /_cluster/settings 
    {
      "persistent": {
        "cluster.routing.allocation.node_initial_primaries_recoveries": "5"
      },
      "transient": {
        "cluster.routing.allocation.node_initial_primaries_recoveries": "5"
      }
    }

    4 下线A机房data节点

    数据排空后,下线A机房只含data角色的节点。含有master角色的节点需要放在切割阶段下线。

    ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9

    5 master节点切割

    5.1 关闭集群自动均衡

    1、关闭集群自动均衡。用于启时候,禁自动均衡 
    curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d 
    '{
      "persistent" :{
          "cluster.routing.rebalance.enable": "none"
       },
         "transient" :{
          "cluster.routing.rebalance.enable": "none"
       }
    }'
    #curl命令可以在kibana替换为如下命令:
    PUT /_cluster/settings  
    {
      "persistent": {
        "cluster.routing.rebalance.enable": "none"
      },
      "transient": {
        "cluster.routing.rebalance.enable": "none"
      }
    }
    ​
    2、检查群自动均衡是否关闭
    curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
    #curl命令可以在kibana替换为如下命令:
    get/_cluster/settings?pretty

    5.2 从节点pending master切割

    排除掉required master节点,就是pending master。确认主节点required master方法如下

    curl http://集群任意IP:9200/_cat/master?v
    #curl命令可以在kibana替换为如下命令:
    get /_cat/master?v

    假如:10.0.0.3为required master节点:

    第一步:停10.0.0.1,起20.1.1.1

     ssh 10.0.0.1 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9'
    ​
     ssh 20.1.1.1 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

    第二步:停10.0.0.2,起20.1.1.2

     ssh 10.0.0.2 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9'
    ​
     ssh 20.1.1.2 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

    5.3 主节点required master切割

     ssh 10.0.0.3 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9'
    
     ssh 20.1.1.3 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

    检查master是否已经全部迁移至B机房,A机房master是否已经全部下线

    curl http://集群任意IP:9200/_cat/nodes?v
    #curl命令可以在kibana替换为如下命令:
    get /_cat/nodes?v

    6 恢复集群配置

    1、打开集群自动均衡
    curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent" :{"cluster.routing.rebalance.enable": "all"}}'
    curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"transient" :{"cluster.routing.rebalance.enable": "all"}}'
    #curl命令可以在kibana替换为如下命令:
    PUT /_cluster/settings
    {
      "persistent": {
        "cluster.routing.rebalance.enable": "ALL"
      },
      "transient": {
        "cluster.routing.rebalance.enable": "ALL"
      }
    }
    
    2、检查集群自动均衡是否打开
    curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
    #curl命令可以在kibana替换为如下命令:
    get /_cluster/settings?pretty
    

    7 修改B机房节点配置,不需要重启

    注:此处只需要elasticsearch.yml配置文件,删除A机房相关的节点信息就可以。

    修改elasticsearch.yml配置文件中discovery.zen.ping.unicast.hosts配置项,将
    10.0.0.1,10.0.0.2,10.0.0.3,20.1.1.1,20.1.1.2,20.1.1.3
    修改为:
    20.1.1.1,20.1.1.2,20.1.1.3

    我的微信公众号同步发表了这一篇文章,欢迎各位小伙伴阅读加关注。

    Elasticsearch集群跨机房迁移实战方案背景介绍因为业务调整,我司有一批服务器需要从A机房退役迁移至B机房。但是因为涉及业务量太大,为了降低对业务的https://mp.weixin.qq.com/s?__biz=MzA5MjkyNjU5MQ==&mid=2247483706&idx=1&sn=617ea2b0a71cd0b4e59d7f3d619d1d3c&chksm=9064e62aa7136f3c7bd2634954a28685a80f597cbaecfecb51b4517e67b80042f21f55805453#rd

    展开全文
  • docker进行es集群部署

    环境:

    (1)Centos7
    (2)JDK1.8
    (3)docker
    (4)ElasticSearch7.6

    建议:

    (1)服务器至少3台,否则没必要集群部署
    (2)java后台推荐直接连接客户端节点

    概念:

    node节点:master、data、client

    默认情况下,ES集群节点都是混合节点,即在elasticsearch.yml中默认node.master: true和node.data: true

    master节点数量至少保证3个,不然主节点宕机时,可能无法选举出master节点
    shard切片数量:与data数据节点数量成正比,但不宜超过data节点数量,索引一旦创建,shard值不可改变

    replicas副本数量:其值越大搜索效率越高,但写入性能越低(一条数据写入操作需要做(1+replicas)遍)具体值与集群data节点数量相关,不宜超过【data节点数-1】

    master - 主节点:

    master节点数量至少保证3个
    主要功能:维护元数据,管理集群节点状态;不负责数据写入和查询。
    配置要点:内存可以相对小一些,但是机器一定要稳定,最好是独占的机器。
    elasticsearch.yml配置如下 :
    node.master: true
    node.data: false

    data - 数据节点:

    主要功能:负责数据的写入与查询,压力大。
    配置要点:大内存,最好是独占的机器。
    elasticsearch.yml 配置如下:
    node.master: false
    node.data: true

    client - 客户端节点:

    主要功能:负责任务分发和结果汇聚,分担数据节点压力。
    配置要点:大内存,最好是独占的机器
    elasticsearch.yml配置如下 :
    node.master: false

    mixed- 混合节点:

    既是主节点,又是数据节点,服务器数量不充足的情况下,也只能考虑这种节点配置
    elasticsearch.yml 配置如下:
    node.master: true
    node.data: true

    部署:

    服务器IP:
    192.168.8.49
    192.168.8.50
    192.168.8.51

    1、配置文件

    cd /home/docker
    mkdir es
    cd es/
    touch elasticsearch.yml
    vi elasticsearch.yml
    

    手动新建elasticsearch.yml配置文件,方便docker进行文件

    #集群名称 所有节点名称一致
    cluster.name: es-clusters
    
    #当前该节点的名称,每个节点不能重复es-node-1,es-node-2,es-node-3
    node.name: es-node-1
    
    #当前该节点是不是有资格竞选主节点
    node.master: true
    
    #当前该节点是否存储数据
    node.data: true
    
    #设置为公开访问
    network.host: 0.0.0.0
    
    #设置其它节点和该节点交互的本机器的ip地址,三台各自为
    network.publish_host: 192.168.8.49
    
    # 设置映射端口
    http.port: 9200
    
    # 内部节点之间沟通端口
    transport.tcp.port: 9300
    
    #支持跨域访问
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    #配置集群的主机地址
    discovery.seed_hosts: ["192.168.8.49", "192.168.8.50", "192.168.8.51"]
    #初始主节点,使用一组初始的符合主条件的节点引导集群
    cluster.initial_master_nodes: ["es-node-1", "es-node-2","es-node-3"]
    #节点等待响应的时间,默认值是30秒,增加这个值,从一定程度上会减少误判导致脑裂
    discovery.zen.ping_timeout: 30s
    
    #配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1
    discovery.zen.minimum_master_nodes: 2
    #配置集群最少正常工作节点数
    #gateway.recover_after_nodes: 2
    
    #禁用交换内存,提升效率
    bootstrap.memory_lock:true
    

    2、服务器优化/配置

    root用户修改/etc/security/limits.conf,添加如下,提高进程及资源使用限制上线

    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 32000
    * hard nproc 32000
    * hard memlock unlimited
    * soft memlock unlimited
    

    执行命令使其生效

    source /etc/profile
    

    修改/etc/systemd/system.conf,添加如下

    DefaultLimitNOFILE=65536
    DefaultLimitNPROC=32000
    DefaultLimitMEMLOCK=infinity
    

    重启服务器,或执行 下面两个命令使其配置生效

    systemctl daemon-reload
    systemctl daemon-reexec 
    

    修改虚拟内存最大映射数
    系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。
    sudo vi /etc/sysctl.conf

    #添加参数
    vm.max_map_count = 262144
    

    重新加载/etc/sysctl.conf配置

    sysctl -p
    

    3、拉取镜像

     #elasticSearch镜像
    docker pull elasticsearch:7.6.2
    	
    #elasticSearch-head镜像	
    docker pull mobz/elasticsearch-head:5-alpine
    

    4、启动ElasticSearch

    注意:我们启动参数设置的-Xms2g -Xmx2g,根据服务器内存实际情况调整。
    ● Xms 为jvm启动是分配的最大内存
    ● Xmx 为jvm运行过程分配的最大内存
    ● Xss 为jvm启动的每个线程分配的内存大小,jdk1.5+默认1M

    docker run -d -p 9200:9200 -p 9300:9300 \
    -e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
    -v /home/docker/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
    --name elasticsearch  \
    --restart=always \
    elasticsearch:7.6.2
    

    如启动报错:
    ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
    则重启服务器

    5、启动ElasticSearch-head

    docker run -d -p 9001:9100 \
    --name elasticsearch-head \
    --restart=always \
    mobz/elasticsearch-head:5-alpine
    

    ElasticSearch-Head请求Content-Type问题
    进入elasticsearch-head容器内部,修改vendor.js文件,需要安装vi

    1、进入容器
    docker exec -it 容器id /bin/sh
    2、修改vendor.js
    vim /usr/src/app/_site/vendor.js
    3、6886行 /contentType: "application/x-www-form-urlencoded 
       改成 contentType: "application/json;charset=UTF-8" 
      7573行 var inspectData = s.contentType === "application/x-www-form-urlencoded" &&` 
        改成 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
    4、退出容器,重启容器
    

    管理页面地址:http://127.0.0.1:9001/
    创建测试索引并加入一些数据
    在这里插入图片描述

    这个就表示三个节点都成功,且自动选择了es-node-3为主节点,数据框加粗的0/1为主分片,分布在es-node-1和es-node-3,
    两个副本分布在es-node-1、es-node-2,为了保证数据可靠性,同一份数据的主分片和副本不会同时在一个节点上。

    从颜色上可以直观的获取集群的健康状态
    绿色:最健康的状态,代表所有的主分片和副本分片都可用。
    黄色:分配了所有主分片,但至少缺少一个副本,没有数据丢失,因此搜索结果仍将完整。
    红色:部分主分片不可用,此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好。

    在这里插入图片描述

    思考:

    (1)为什么master候选节点最少三个?

    如果你只有两台节点,那么是无法使用官方的这个配置公式的,(这也就是为什么我们之前建议最少要三台机器能成为主节点),两台的话会出现各种各样的问题,为什么呢?
    思考一下假设集群中共有2个节点,discovery.zen.minimum_master_nodes分别设置成2和1会怎么样?
    如果我们有2个节点,都可以是master候选节点,那么quorum是2 / 2 + 1 = 2。此时就有问题了,因为如果一个node挂掉了,这么这时节点发生变更,那么只剩下一个master候选节点,是无法满足quorum数量的,也就无法选举出新的master,集群就彻底挂掉了。此时就只能将这个参数设置为1,但是这就无法阻止脑裂的发生了。

    (2)es集群令人头疼的脑裂问题

    脑裂问题:
    主节点短暂消失,导致出现多个主节点
    解决办法参考:
    https://blog.csdn.net/qq_36182135/article/details/123078500

    其他资料:
    【es7新特性】https://www.elastic.co/guide/en/elasticsearch/reference/7.1/breaking-changes-7.0.html#removed-global-ordinals-hash-and-global-ordinals-low-cardinality-terms-agg
    【干货 | Elasticsearch集群黄色原因的终极探秘】https://blog.csdn.net/laoyang360/article/details/81271491

    展开全文
  • 适用人群 开发从业人员,大数据从业人员...课程概述 ElasticSearch7.x集群Elasticsearch-head7.x官网都没有的插件整合?cerebro插件酷炫暗黑插件神器?一次搞定 官网版本 主从读写 中文分词 Head插件 cerebro插件
  • # 集群的名称 cluster.name: rick # 节点名称 node.name: rick node.master: true node.data: false network.bind_host: 192.168.1.24 network.host: 192.168.1.25 http.port: 9200 transport.tcp.port: 9300 ...
  • ElasticSearch 集群搭建

    2022-04-01 16:03:52
    一、ElasticSearch 集群 1.1 搭建集群 Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,如果故障两个Master节点,Elasticsearch...
  • Elasticsearch集群部署及Head插件安装

    千次阅读 2022-04-26 21:06:25
    我的三个节点分别是HadoopNode01、HadoopNode02、HadoopNode03,以下操作全部基于HadoopNode01进行操作,后面可以通过拷贝实现集群快速安装 1. 下载ES(7.6.2) ES相关软件网盘链接,提取码j8j9,也可以自己去官网...
  • 原文链接:https://blog.csdn.net/m0_37814112/article/details/122965720 说明:包含elasticsearch7.15.0集群3节点、5节点、7节点等三种方式的K8S部署yaml文件、镜像文件,里面有详细的README.txt部署参考
  • ElasticSearch Logstash Kibana FileBeat : **链接: **https://pan.baidu.com/s/1_Iv2R8pmYaHkoaOk_m8OuQ 提取码: 5ezt 复制这段内容 : 后打开百度网盘手机App,操作更方便哦 创建普通用户 ES不能使用root用户来启动...
  • ElasticSearch 集群管理

    千次阅读 2022-04-03 23:01:00
    ElasticSearch 集群管理 集群介绍 集群:多个人做一样的事 分布式:多个人做不一样的事 为什么要集群,原来的项目都是单体架构,一旦机器挂了,那就不能进行工作了。若是我们用了三台机器,都存储一样的东西,这三...
  • ElasticSearch集群

    千次阅读 2022-02-14 18:00:12
    5. ElasticSearch集群 5.1 ElasticSearch集群原理 集群内的原理 | Elasticsearch: 权威指南 | Elastic elasticsearch 是天生支持集群的, 他不需要依赖其他的服务发现和注册的组件, 如 zookeeper这些, 因为他内置...
  • 1、引言本系列文章介绍如何修复 Elasticsearch 集群的常见错误和问题。这是系列文章的第六篇,主要探讨:Elasticsearch 集群状态变成黄色或者红色,怎么办?第一篇:El...
  • ElasticSearch集群搭建
  • elasticsearch_do_firewall - 如果您希望角色在 ES 内部传输端口上处理阻止外部流量到您的集群,则设置为 true elasticsearch_http_password - 使用它来设置对 Elasticsearch HTTP API 的写操作访问的密码 elastic...
  • Es集群搭建核心思想  1.配置相同集群名称  2.配置不同的节点ID  3.修改X台服务器elasticsearch.yml配置 服务器环境->准备三台服务器集群 服务器集群配置: ## 修改elasticsearch.yml文件 [root@chenxi elastic...
  • ElasticSearch集群配置

    千次阅读 2022-03-09 16:35:32
    1、创建elasticsearch-cluster文件夹并在其中放置多个elasticsearch文件。 2、修改es的config->elasticsearch.yml配置文件 (1)配置集群名 (2)配置节点名和节点角色类型 master:主节点 data:数据节点 (3)...
  • elasticsearch集群搭建及springboot集成使用
  • k8s安装elasticsearch集群

    千次阅读 2022-05-07 19:57:51
    搭建es集群需要使用的技术如下:k8s集群、StatefulSet控制器、Service(NodePort)服务、PV、PVC、volumeClaimTemplates(存储卷申请模板)。 StatefulSet控制器创建的Pod适合用于分布式存储系统,它最大的特点是...
  • python+elasticsearch集群 官方文档:https://elasticsearch-py.readthedocs.io/en/master/ 介绍 python提供了操作ElasticSearch 接口,因此要用python来操作ElasticSearch,首先要安装python的ElasticSearch包,用...
  • SpringBoot 配置多个 Elasticsearch 集群

    千次阅读 2021-08-21 11:34:22
    SpringBoot 项目 首先在 pom.xml 中添加 ES 客户端依赖,这里 SpringBoot 使用的是 2.5.3 ...org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId>
  • elasticsearch集群介绍原理Elasticsearch集群架构介绍集群架构介绍节点介绍Elasticsearch集群搭建Elasticsearch分片介绍主分片复制分片Elasticsearch存储原理写索引过程段的引入索引不可变的优劣持久化 Elastic...
  • Rancher(k8s)部署Elasticsearch集群

    千次阅读 2021-02-21 22:47:32
    Rancher部署Elasticsearch集群Elasticsearch1 准备NFS2 部署Service2.1 headless service无头服务2.2 部署Service3 部署es集群4 访问es集群4.1 浏览器访问查看集群状态4.2 Kibana 上一篇介绍了如何使用Rancher(k8s...
  • Elasticsearch 是一款开源的分布式搜索和分析引擎,我们可以在其中存储海量的数据并且快速地进行搜索,然而部署 Elasticsearch 集群的过程耗时且繁琐,好在 Elasticsearch 官方为我们提供了 Ansible Playbook 方便...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,557
精华内容 40,222
关键字:

es集群