ES生产优化建议

      直接进入主题 生产环境中首先进行节点角色的划分,当集群出现问题时可以快速进行数据恢复

                                     master node , Data node  ,coordinate node  .ingestz node

各节点作用如下:

      master node 主要用户集群的轻量级的管理工作,比如索引的创建删除,追踪集群中的买个node,决定如何将shard分配给node

在集群中专门设置写master节点:

                                                            node.master: true 
                                                            node.data: false 
                                                            node.ingest: false

      data  node 用于存储数据,执行CRUD操作,这些操作都是非常耗费IO的.

在集群中专门设置data node :         

                                                           node.master: false 
                                                           node.data: true 
                                                           node.ingest: false

      ingest node 可以执行预处理pipeline,包含了多个ingest processors。不同的ingest processor执行的操作类型是不同的

如果要配置一个单独的ingest node:

                                                            node.master: false 
                                                            node.data: false 
                                                            node.ingest: true 
                                                            search.remote.connect: false

      coordinate node 这些node专门用来接收客户端的请求,同时对请求进行路由和转发,并对请求的结果进行合并但是如果在一个集群中规划太多的coordinating node可能会加重整个集群的负担,因为被选举出来的master node必须要从所有的node上得到cluster state update的ack,如果coordinating nodes过多,那么可能会加重master node的负担。

如果要设置coordinating only node的话:

                                                             node.master: false 
                                                             node.data: false 
                                                             node.ingest: false 
                                                             search.remote.connect: false

    第二:合理设置es的jvm内存,单个实例内存不建议超过32G.如果生产环境的机器配置比较高,例如2路10核 256G的超级物理机,可以在单台物理机上跑两个实例.

    第三:防止脑裂现象出现设置置master候选节点数   算法 节点数/ 2 + 1
        discovery.zen.minimum_master_nodes  (master_eligible_nodes / 2) + 1

    第四:对于单台物理机上跑多个实例的情况下建议设置如下参数保证数据安全性,防止primary shard 和 replica shard在同一台物理机上.  #禁止同一台机器内同时本节点的replica shard和primary shard
              cluster.routing.allocation.same_shard.host: true

    第五:锁定物理内存,禁止与磁盘缓存进行交换

              bootstrap.memory_lock: true

    第六:调整translog为异步刷盘,增大写入速度

              index.translog.durability: async

    第七:合理设置es的merge操作,避免频繁磁盘操作

    第八:根据数据的安全性合理设置副本数量
             index.number_of_replicas: 1
    第九:尽可能的将物理内存让给os cache使用,这样可以增加搜索速度.es底层严重依赖于os cache的.假如你的数据有500G 物理内存也有500G的空间,整个数据全部都是纯内存操作,CRUD基本都是毫秒响应.

    第十:业务层放弃深度分页操作.通过scoll进行滚动查询(可以理解成redis的scan命令)

    第十一:在删除索引时需要明确指出索引名称,禁止进行模糊删除
              action.destructive_requires_name: true

    第十二:设置表结构的时候字段类型尽可能使用keyword,可以加快检索速度

    第十三:查询时通过source 指定需要的字段,避免查询所有字段量非得带宽.

    第十四:对于十亿加的数据量尽可能的采用es+hbase的架构存储

    第十五:三个shard数据量保持在60G以内

    第十六:增大节点之间的心跳检测时间,预防网络抖动

                 discovery.zen.ping_timeout: 120s 
                 discovery.zen.fd.ping_timeout: 120s
                 discovery.zen.fd.ping_retries: 6
                 discovery.zen.fd.ping_interval: 120s

    第十七:设置集群中到达指定节点数量时进行数据恢复

                 gateway.recover_after_nodes: 30

基本上按照以上17点进行优化就可以达到秒级响应.还是那句话,尽可能将物理内存预留给os cache使用.一下是我生产环境的配置.生产环境采用19台物理机.物理机是2路10核128G44T(raid 0) 14台机器作data node 每台2个实例.3个mater node 3个coordinate node  1个 ingest node  

#禁止同一台机器内同时本节点的replica shard和primary shard
cluster.routing.allocation.same_shard.host: true
# ------------------------------------ Node ------------------------------------
node.name: node-32
#主节点
node.master: true
#数据节点
node.data: false
#客户端 默认true
node.ingest: false 
#禁止跨集群搜索
cluster.remote.connect: false
# ----------------------------------- Paths ------------------------------------
path.data: */data
path.logs: */logs
# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: true
# ---------------------------------- Network -----------------------------------
network.host: *
http.port: 9200
#节点之间的交互端口
transport.tcp.port: 9400
# --------------------------------- Discovery ----------------------------------
#master节点 端口是数据交换端口
discovery.zen.ping.unicast.hosts: []
#集群中主节点的个数2-4
discovery.zen.minimum_master_nodes: 2
# 心跳超时时间
discovery.zen.ping_timeout: 120s 
#节点之间的ping超时时间
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 120s
#--------------------------------- Index ----------------------------------------
# 这个可以异步写硬盘,增大写的速度
index.translog.durability: async 
#translog 间隔时间
index.translog.sync_interval: 120s 
#log文件大小
index.translog.flush_threshold_size: 1g
#索引刷新间隔
index.refresh_interval: 300s
#副本数 
index.number_of_replicas: 1
# ---------------------------------- Gateway -----------------------------------
gateway.recover_after_nodes: 30
#设置该集群中可存在的节点上限
gateway.expected_nodes: 32
gateway.recover_after_time: 5m
#在删除索引时,是否需要明确指定名称
action.destructive_requires_name: true

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值