zoukankan      html  css  js  c++  java
  • elasticsearh 迁移

    现状描述

    目前使用的是单节点部署的es ,存在单点隐患,性能瓶颈,数据冗余等问题,所以需要集群模式部署。

    解决方案

    停止业务写入,把单点es 数据压缩。新建一个节点配置为单节点运行,把数据复制到新节点的data 目录下面,启动节点查看数据是否正常,然后再逐步一台一台加入,最终扩展为三节点的集群。一个master,两个node ,三个节点都是数据节点。

    操作步骤

    单点es 操作

    1、通知相关业务人员停止数据写入,通过9200 查看数据分片状态是否正常,若正常则停止es 服务。

    2、打包压缩数据  cd /data_es/es/data&&tar  -zcf   data.tgz   node

    3、把压缩包传输到新节点相应目录下

    新节点操作

    一、新建一个节点

    1、新建一个单节点,配置如下

    cat es-1/config/elasticsearch.yml

    cluster.name: "docker-cluster-es-1"
    network.host: 0.0.0.0
    node.name: es-1
    network.publish_host: 172.31.6.81
    discovery.zen.minimum_master_nodes: 1
    transport.tcp.port: 9900                                  #集群之间通讯端口,默认是9300
    transport.tcp.compress: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    ######## Start OpenDistro for Elasticsearch Security Demo Configuration ########
    cluster.routing.allocation.disk.threshold_enabled: false
    node.max_local_storage_nodes: 3
    ######## End OpenDistro for Elasticsearch Security Demo Configuration ########

    2、把压缩包解压到 es-1/data/目录下面

    3、启动节点启动脚本如下

    #!/bin/bash

    docker stop aws-es-1
    docker rm aws-es-1
    docker run --name aws-es-1  -p 9800:9200 -p 9900:9900  
        -v /data_es/es-1/data:/usr/share/elasticsearch/data
        -v /data_es/es-1/logs:/usr/share/elasticsearch/logs
        -v /data_es/es-1/config:/usr/share/elasticsearch/config
        -v /data_es/es-1/config/ik:/usr/share/elasticsearch/plugins/ik
        --log-opt max-size=10m --log-opt max-file=5
        -d elasticsearch:6.8.10
    4、通过head 插件查看数据状态是否正常

    二、加入第二个节点

    1、更改节点1的配置

    elasticsearch.yml 添加内容如下,第一个ip 是待加入的新节点IP,第二个是节点1的IP

    discovery.zen.ping.unicast.hosts: ["172.31.9.27:9900", "172.31.6.81:9900"]

    2、新加入节点配置如下(data logs 等目录为空)

    cluster.name: "docker-cluster-es-1"                        #集群名字必须都一样
    network.host: 0.0.0.0
    node.name: es-3                                                  #节点名字每个节点都是唯一的
    network.publish_host: 172.31.9.27
    discovery.zen.ping.unicast.hosts: ["172.31.9.27:9900", "172.31.6.81:9900"]     #组播的地址池,里面的IP 是节点1和自己的
    discovery.zen.minimum_master_nodes: 1                                                  #跟节点1保持一致
    transport.tcp.port: 9900
    transport.tcp.compress: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    ######## Start OpenDistro for Elasticsearch Security Demo Configuration ########
    cluster.routing.allocation.disk.threshold_enabled: false
    node.max_local_storage_nodes: 3
    ######## End OpenDistro for Elasticsearch Security Demo Configuration ########

    3、启动节点2,重启节点1

    4、通过head查看分配状态,待所有数据分配完毕加入第三个节点

    三、加入第三个节点     

     1、新节点配置如下

    cluster.name: "docker-cluster-es-1"
    network.host: 0.0.0.0
    node.name: es-2                                  #自己名字
    network.publish_host: 172.31.12.145         #自己IP
    discovery.zen.ping.unicast.hosts: ["172.31.9.27:9900", "172.31.6.81:9900", "172.31.12.145:9900"]        #加入自己的IP
    discovery.zen.minimum_master_nodes: 2  #由1 变为2,三节点设置为2,防止脑裂。
    transport.tcp.port: 9900
    transport.tcp.compress: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    ######## Start OpenDistro for Elasticsearch Security Demo Configuration ########
    cluster.routing.allocation.disk.threshold_enabled: false
    node.max_local_storage_nodes: 3
    ######## End OpenDistro for Elasticsearch Security Demo Configuration ########

    2、第二节点配置

    3、第三节点配置变动如下

    discovery.zen.ping.unicast.hosts: ["172.31.9.27:9900", "172.31.6.81:9900", "172.31.12.145:9900"]        #加入新节点的IP
    discovery.zen.minimum_master_nodes: 2  #由1 变为2,三节点设置为2,防止脑裂。

    4、第一个节点配置变更同上。

    5、重启节点一,二,启动节点三

    6、查看数据分配状态

    维护调优

    1、jvm 配置

     堆内存最大最小值要相同,最大配置不能超过32G,一般配置为宿主机的内存的一半(剩余的留给lucen),配置地点 config/jvm.options

    2、节点宕机

     集群中有一台节点宕机或者网络故障时,无论此节点是master 还是node 都没关系,数据分片有 Unassigned状态,过段时间,就会把故障节点数据调度到其它两个节点,而后数据分片状态恢复正常。注意,如果故障节点不能够短时间恢复,需要更改现有两个节点的配置为 discovery.zen.minimum_master_nodes: 1 ,这样现有两个节点其中一个故障,集群依然存活,否则discovery.zen.minimum_master_nodes: 2 的时候,要求最少存在两个节点且具有选举为master 的资格的节点。

    当只能正常运行两个节点的时候,如果其中一个挂了(无论主备),只剩下唯一的一个节点,discovery.zen.minimum_master_nodes: 1 的配置下,集群可以启动,会有Unassigned分片,且在故障节点无法恢复的前提下,此状态分片不会消失,原因:集群的副本数量为1,也就是存在两份相同数据,如果只有一个节点存活,那么两份相同数据无法分配给一个节点,所以就会有一个数据处于Unassigned,知道有新的节点加入集群,无论此节点是之前宕机的哪个节点。

    3、调试

    集群创建索引 kzf   :   curl -XPUT 'http://localhost:9800/kzf?pretty'

  • 相关阅读:
    算法作业实验三
    牛客练习赛53 B 美味果冻
    牛客练习赛53 C 富豪凯匹配串
    bitmat
    牛客挑战赛33 B 鸽天的放鸽序列
    树状数组
    线段树
    2019牛客国庆集训派对day7 A 2016
    背包
    作业三 -并查集
  • 原文地址:https://www.cnblogs.com/fanggege/p/13656474.html
Copyright © 2011-2022 走看看