Elasticsearch集群部署1.0

此文档基于1.0版本。

Elasticsearch集群部署

配置文件

Elasticsearch有三个配置文件:

  • elasticsearch.yml 用于配置Elasticsearch
  • jvm.options 用于配置Elasticsearch JVM 设置
  • log4j.properties 用于配置Elasticsearch 日志记录

这三个文件位于config目录中,默认位置如下:

  • 对于归档分发,config目录位置默认为 $ES_HOME/config,可通过ES_PATH_CONF 环境变量更改config目录位置,或者,您可以通过命令行或通过shell配置文件来export获取ES_PATH_CONF环境变量:
ES_PATH_CONF = /path/to/my/config./bin/elasticsearch
  • 对于包分发,config目录位置默认为/etc/elasticsearch。config目录的位置也可以通过ES_PATH_CONF环境变量进行更改,但请注意,在shell中设置它是不够的。相反,此变量来自 /etc/default/elasticsearch(对于Debian软件包)和 /etc/sysconfig/elasticsearch(对于RPM软件包)。您需要相应地编辑ES_PATH_CONF=/etc/elasticsearch其中一个文件中的 条目以更改配置目录位置。

硬件

  • 内存

    排序和聚合很耗内存,不要64GB>=内存>不可小于8GB

  • CPUs

    多核远胜时钟频率稍快

  • 硬盘

SSD最好

注:需要确保系统I/O调度是正确的。*nix系统下调度程序是cfq(完全公平队列),对机械硬盘是高效的,但对SSD却很低效。在使用SSD时应使用deadline或者noop。不论是机械硬盘还是SSD,都应该使用RAID 0。没有必要使用镜像或其他变体。避免使用NAS。

  • 网络
    低延迟网络最好。

虚拟机

  • 尽可能使用最新版JVM
  • java客户端版本应保持与Elasticsearch服务器JVM版本一致,若不一致则可导致未知异常

Transport Client
传输客户端作为一个集群和应用程序之间的通信层。它知道 API 并能自动帮你在节点之间轮询,帮你嗅探集群等等。但它是集群 外部的 ,和 REST 客户端类似。

Node Client
节点客户端,实际上是一个集群中的节点(但不保存数据,不能成为主节点)。因为它是一个节点,它知道整个集群状态(所有节点驻留,分片分布在哪些节点,等等)。 这意味着它可以执行 APIs 但少了一个网络跃点。

案例

如果要将应用程序和 Elasticsearch 集群进行解耦,传输客户端是一个理想的选择。例如,如果您的应用程序需要快速的创建和销毁到集群的连接,传输客户端比节点客户端”轻”,因为它不是一个集群的一部分。
类似地,如果您需要创建成千上万的连接,你不想有成千上万节点加入集群。传输客户端( TC )将是一个更好的选择。
另一方面,如果你只需要有少数的、长期持久的对象连接到集群,客户端节点可以更高效,因为它知道集群的布局。但是它会使你的应用程序和集群耦合在一起,所以从防火墙的角度,它可能会构成问题。

重要配置修改

指定名字

Elasticsearch默认启动集群的名字叫elasticsearch,可在elasticsearch.yml文件中修改:

cluster.name: elasticsearch_production

节点名称默认是一个UUID值,可在elasticsearch.yml中修改:

node.name: elasticsearch_005_data

路径

默认会将插件、日志和数据放在安装目录下,如果重装Elasticsearch,则有可能会覆盖数据。所以最好将数据放在其他目录下。

  • 数据存储路径
path.data: /path/to/data1,/path/to/data2
  • 日志路径
path.logs: /path/to/logs
  • 插件路径
path.plugins: /path/to/plugins

注:使用多个数据路径并不能提高性能,Elasticsearch会将整个分片置于单个驱动器上尽可能减小驱动器损坏时的损失。

  • 最小主节点数

脑裂
一种两个主节点同时存在于一个集群的现象
最小节点数 告诉Elasticsearch 当没有足够master候选节点时,就不要进行master节点选举,等master候选节点足够了才进行选举。该项应始终配置为master节点的法定个数(master候选节点/2 + 1)
可通过修改elasticsearch.yml配置此项:

discovery.zen.minimum_master_nodes: 2

动态修改此项
修改为永久生效,且较配置文件优先
Elasticsearch只需要很少配置,可以使用Cluster update Settings API在正在运行的集群上更改配置。

PUT /_cluster/settings
{
    "persistent" : {
        "discovery.zen.minimum_master_nodes" : 2
    }
}
  • 集群恢复相关配置
    设置如下三个配置项以避免集群重启时过多的分片交换。
#等待集群至少存在 8 个节点
#等待 5 分钟,或者10 个节点上线后,才进行数据恢复,这取决于哪个条件先达到
gateway.recover_after_nodes: 8
gateway.expected_nodes: 10
gateway.recover_after_time: 5m
  • 单播代替组播
    默认使用单播,可以为Elasticsearch提供一些尝试连接的节点列表:
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

避免修改的配置项

  • 垃圾回收器
    默认垃圾回收器是CMS
  • 线程池
    搜索线程池设置的大一点,配置为 int ((核心数 * 3 )/2)+ 1
    线程池的线程数应该根据CPU核数来定,最大设置为核数*2,再大反而会降低性能。

堆内存:大小和交换

Elasticsearch 默认使用堆内存1GB。修改Elasticsearch堆内存大小的方式:

export ES_HEAP_SIZE=10g
#堆内存最大值与最小值相同,防止堆内存大小调整过程消耗性能
./bin/elasticsearch -Xmx10g -Xms10g

堆内存设置大小经验:

  • JVM堆内存大小不应大于32GB
  • 应将整个内存大小的50%作为Elasticsearch的堆内存,剩余50%留给Luncene
  • 堆内存换出会影响Elasticsearch性能,可采用禁用/降低堆内存换出的方式优化,具体方式:
# 暂时禁用换出可用如下命令,若要永久禁用换出,则需要参考操作系统文档
sudo swapoff -a
# 在sysctl中做如下配置
vm.swappiness = 1
#elasticsearch.yml中配置项锁定堆内存
bootstrap.mlockall: true

文件描述符和MMap

Elasticsearch 需要巨量的文件描述符,而*nux系统,默认每个进程最多允许有1024个文件描述符。应该增加文件描述符数量,比如64000.
修改操作系统单进程最大文件描述符数量后,可使用如下方式进行检验:

GET /_nodes/process

{
   "cluster_name": "elasticsearch__zach",
   "nodes": {
      "TGn9iO2_QQKb0kavcLbnDw": {
         "name": "Zach",
         "transport_address": "inet[/192.168.1.131:9300]",
         "host": "zacharys-air",
         "ip": "192.168.1.131",
         "version": "2.0.0-SNAPSHOT",
         "build": "612f461",
         "http_address": "inet[/192.168.1.131:9200]",
         "process": {
            "refresh_interval_in_millis": 1000,
            "id": 19808,
            "max_file_descriptors": 64000, 
            "mlockall": true
         }
      }
   }
}
# max_file_descriptors  项的值正是Elasticsearch进程可访问的可用文件描述符数量

Elasticsearch 对各种文件混合使用了NioFs(非阻塞文件系统),MMapFs(内存映射文件系统);需要确保配置的最大映射数量,以便有足够的虚拟内存可用于mmapped文件。

sysctl -w vm.max_map_count=262144

或者可以在/etc/sysctl.conf通过修改vm.max_map_count永久修改。

linux下I/O模型

[外链图片转存失败(img-h2YE1jZb-1565510468385)(./IO模型.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值