美文网首页
Elasticserch 单机多实例

Elasticserch 单机多实例

作者: zfylin | 来源:发表于2018-05-22 15:35 被阅读0次

    为什么要单机多实例?

    elasticsearch单实例最大内存是建议不超过32G。但是如果服务器的内存比较大如256G,想充分使用机器的内存就要多开实例。

    JVM 在内存小于 32 GB 的时候会采用一个内存对象指针压缩技术。
    在 Java 中,所有的对象都分配在堆上,并通过一个指针进行引用。 普通对象指针(OOP)指向这些对象,通常为 CPU 字长 的大小:32 位或 64 位,取决于你的处理器。指针引用的就是这个 OOP 值的字节位置。
    对于 32 位的系统,意味着堆内存大小最大为 4 GB。对于 64 位的系统, 可以使用更大的内存,但是 64 位的指针意味着更大的浪费,因为你的指针本身大了。更糟糕的是, 更大的指针在主内存和各级缓存(例如 LLC,L1 等)之间移动数据的时候,会占用更多的带宽。
    Java 使用一个叫作 内存指针压缩(compressed oops)的技术来解决这个问题。 它的指针不再表示对象在内存中的精确位置,而是表示 偏移量 。这意味着 32 位的指针可以引用 40 亿个 对象 , 而不是 40 亿个字节。最终, 也就是说堆内存增长到 32 GB 的物理内存,也可以用 32 位的指针表示。
    一旦你越过那个神奇的 ~32 GB 的边界,指针就会切回普通对象的指针。 每个对象的指针都变长了,就会使用更多的 CPU 内存带宽,也就是说你实际上失去了更多的内存。事实上,当内存到达 40–50 GB 的时候,有效内存才相当于使用内存对象指针压缩技术时候的 32 GB 内存。
    这段描述的意思就是说:即便你有足够的内存,也尽量不要 超过 32 GB。因为它浪费了内存,降低了 CPU 的性能,还要让 GC 应对大内存。
    

    堆内存:大小和交换

    配置

    vi $ES_HOME/config/elasticsearch.yml 添加如下配置

    node.max_local_storage_nodes: 3     # 单节点的ES存储实例的个数
    cluster.routing.allocation.same_shard.host: true # 防止同一个分片(shard)的主副本存在同一个物理机上
    

    启动

    $ES_HOME/bin/elasticsearch -Ecluster.name=your-es -Enode.name=es-01 -d
    $ES_HOME/bin/elasticsearch -Ecluster.name=your-es -Enode.name=es-02 -d
    $ES_HOME//bin/elasticsearch -Ecluster.name=your-es -Enode.name=es-03 -d
    

    相关文章

      网友评论

          本文标题:Elasticserch 单机多实例

          本文链接:https://www.haomeiwen.com/subject/ixzhjftx.html