自建ES迁移至阿里云ES(使用脚本及logstash同步) - Go语言中文社区

自建ES迁移至阿里云ES(使用脚本及logstash同步)


搭建测试3节点ES集群,官网下载所需的版本进行解压运行,ECS与阿里云ES在同一地域可用区,并在相同的VPC内。

# mkdir /usr/java
# tar xvf jdk-8u162-linux-x64.tar.gz -C /usr/java/
# tar xvf logstash-5.5.3.tar.gz -C /srv/
# tar xvf kibana-5.4.3-linux-x86_64.tar.gz -C /srv
# tar xvf elasticsearch-5.4.3.tar.gz -C /srv/
# cat /etc/profile.d/elk.sh
export JAVA_HOME=/usr/java/jdk1.8.0_162/
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:/srv/elasticsearch-5.4.3/bin
export PATH=$PATH:/srv/logstash-5.5.3/bin
export PATH=$PATH:/srv/kibana-5.4.3-linux-x86_64/bin
# nohup kibana -c /srv/kibana-5.4.3-linux-x86_64/config/kibana.yml &
# nohup elasticsearch &
# cat /srv/kibana-5.4.3-linux-x86_64/config/kibana.yml
server.name: "kibana_test"
server.port: 9070   #监听端口
server.host: "192.168.0.80"  #监听端口
elasticsearch.url: "http://es1:9007"
logging.dest: /srv/logs/kibana/kibana.log

xpack.security.enabled: false

ES配置文件说明,重要配置修改

# cat /srv/elasticsearch-5.4.3/config/elasticsearch.yml
cluster.name: robin_test    #集群名称,默认叫elasticsearch 
node.name: es1              #节点名称,若不指定,每次启动时会随机分配一个
node.master: true           #是否有选举为主节点的资格,主节点可以控制整个集群
node.data: false            #是否设置为数据节点,数据节点保存数据并执行增删改查,搜索聚合
node.ingest: false          #是否为摄取节点,可以执行由一个或多个摄取处理器组成的预处理管道
path:
    data:                   #默认将插件、日志以及数据配置在安装目录,建议拆分
        - /srv/data/elasticsearch//0/
        - /srv/data/elasticsearch//1/
    logs: /srv/logs/elasticsearch/
http:
    host: es1
    port: 9007
network.host: es1
transport.tcp.port: 9002
discovery.zen.minimum_master_nodes: 2 #需要多少个node选举通过才能当上master,应设置为master候选节点的法定个数((master候选节点个数/2)+1)。
gateway:
    recover_after_nodes: 2   #至少要有几个节点在线,集群才可用
    expected_nodes: 2        #集群正常情况下应该存活的节点个数
    recover_after_time: 1m   #等待多长时间后才进行数据恢复
discovery.zen.ping:
    unicast.hosts: ['es1:9002','es2:9002','es3:9002']
    #单播列表,至少列出集群中一部分节点,当一个节点联系到列表中的成员时,可以获得整个集群所有节点的状态,然后它会联系master节点,并加入集群

thread_pool:
    bulk:
        size: 3
        queue_size: 300
    index:
        size: 3
        queue_size: 300

bootstrap:
    memory_lock : true  #避免系统swapping来提高性能
    system_call_filter: false #Centos6不支持SecComp,设置为false,不进行检测
action.destructive_requires_name: true #在删除索引时是否指定索引名称,设置为true禁止允许通过通配符或_all删除索引
indices:
    fielddata.cache.size: 40%  #设置fielddata缓存的最大大小,Fielddata cache主要用于字段(field)的排序和聚合。Elasticsearch使用Fielddata和Filter两种主要类型的缓存来更快地提供搜索请求 
    breaker.total.limit: 70%  #通过设置parent-level breaker指定所有breaker可以使用的内存总量,默认为JVM堆的70%。Elasticsearch包含多个断路器,用于防止操作引起的OutOfMemoryError。
    breaker.request.limit: 60% #阻止每个请求数据结构超过一定数量的内存,默认为JVM堆的60%
    store.throttle.max_bytes_per_sec: 500mb #存储节流限制,默认为20mb.
    recovery.max_bytes_per_sec: 20mb #从0.90.1版开始,默认为20mb.
                             
monitor.jvm.gc.overhead:
    warn: 60
    info: 50
    debug: 40
                                         
cluster.routing.allocation:
    node_concurrent_recoveries: 1  #允许在一个节点上发生多少次并发恢复。默认为2
    cluster_concurrent_rebalance: 1 #允许集群范围内分片并发重平衡的数量,默认为2

使用logstash同步同步单个index

# cat index2index.conf 
input {
    elasticsearch {
        hosts => ["es1:9007"]         #老ES集群访问地址
        index => "messages-20180401"  #需要同步的索引名称
        size => 1000
        scroll => "1m"
        codec => "json"
        docinfo => true
    }
}

output {
    elasticsearch {
        hosts => ["es-id.elasticsearch.aliyuncs.com:9200"] #阿里云ES访问地址
        user => "elastic"         #默认为 elastic
        password => "123456789"   #购买阿里云ES界面中指定的密码,或初始化 Kibana 时指定的密码
        index => "messages-20180401"  #在新ES集群中的索引名

    }
    stdout { codec => rubydebug { metadata => true } }

}
# logstash -f index2index.conf

在目标的elasticsearch中看到已经同步的index
TIM_20180408180721

使用Shell脚本同步单个index

# cat sync.sh 
#!/bin/bash
# file:reindex.sh
indexName="sync"           #需要同步的索引名称
newClusterUser="elastic"   #默认为 elastic
newClusterPass="123456789" #购买阿里云ES界面中指定的密码,或初始化 Kibana 时指定的密码
newClusterHost="es-id.elasticsearch.aliyuncs.com:9200" #阿里云ES访问地址
oldClusterHost="http://192.168.0.79:9007"  #老ES集群访问地址
curl -u ${newClusterUser}:${newClusterPass} -XPOST "http://${newClusterHost}/_reindex?pretty" -H "Content-Type: application/json" -d'{
    "source": {
        "remote": {
            "host": "'${oldClusterHost}'"
        },
        "index": "'${indexName}'",
        "query": {
            "match_all": {}
        }
    },
    "dest": {
       "index": "'${indexName}'"
    }
}'
执行成功返回
# sh sync.sh 
{
  "took" : 418,
  "timed_out" : false,
  "total" : 151,
  "updated" : 151,
  "created" : 0,
  "deleted" : 0,
  "batches" : 1,
  "version_conflicts" : 0,
  "noops" : 0,
  "retries" : {
    "bulk" : 0,
    "search" : 0
  },
  "throttled_millis" : 0,
  "requests_per_second" : -1.0,
  "throttled_until_millis" : 0,
  "failures" : [ ]
}

TIPS

ES启动报错

[2018-04-08T11:39:20,428][ERROR][o.e.b.Bootstrap          ] Exception
java.lang.RuntimeException: can not run elasticsearch as root  #需要新建非roo用户启动进程
[2018-04-08T11:40:46,187][ERROR][o.e.b.Bootstrap          ] [es1] node validation exception
[1] bootstrap checks failed
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]  # 最大文件描述符受限

调整最大文件打开数和最大进程数限制

$ tail /etc/security/limits.conf
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
* soft memlock unlimited
* hard memlock unlimited
search  soft  nofile  65536
search  hard  nofile  65536
search  soft  nproc  2048
search  hard  nproc  2048

执行同步脚本报错

{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "[192.168.0.79:9001] not whitelisted in reindex.remote.whitelist"
      }
    ],
    "type" : "illegal_argument_exception",
    "reason" : "[192.168.0.79:9001] not whitelisted in reindex.remote.whitelist"
  },
  "status" : 400
}

由于通过IP + Port访问老集群,必须在新集群的yml中配置 reindex 白名单
TIM_20180409214218
执行同步脚本报错

{
  "error" : {
    "root_cause" : [
      {
        "type" : "connect_exception",
        "reason" : null
      }
    ],
    "type" : "connect_exception",
    "reason" : null
  },
  "status" : 500
}

同时需要在ECS所属的安全组放行公网入方向访问自建ES集群的端口,reindex 是阿里云ES访问自建ES。即使自建ES与阿里云ES在同一地域,ECS上测试访问阿里云ES并不能保证阿里云的ES能访问到自建ES

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_33805992/article/details/89723206
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 20:05:13
  • 阅读 ( 1566 )
  • 分类:职场

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢