ES集群调优

一、内存

64GB RAM的机器是最理想的,少于8GB往往适得其反(你最终需要许多,许多小机器),大于64GB可能会有问题

二、网络

低延迟有助于确保节点可以轻松地进行通信,避免跨越多个数据中心的群集

三、操作系统文件描述符

可以临时设置sysctl -w vm.max_map_count=655300或者在/etc/sysctl.conf下永久设置vm.max_map_count。查看设置cat /proc/sys/vm/max_map_count

四、es参数配置

1. 指定集群名称

Elasticsearch 默认启动的集群名字叫 elasticsearch你最好给你的生产环境的集群改个名字,改名字的目的很简单, 就是防止某人的笔记本电脑加入了集群这种意外.
lasticsearch.yml 文件中修改:

cluster.name: elasticsearch_production

每个节点设置一个有意义的、清楚的、描述性的名字

node.name: elasticsearch_005_data

2. 文件路径

默认情况下,Elasticsearch 会把插件、日志以及你最重要的数据放在安装目录下。这会带来不幸的事故, 如果你重新安装 Elasticsearch 的时候不小心把安装目录覆盖了。如果你不小心,你就可能把你的全部数据删掉了。

path.data: /path/to/data
path.logs: /path/to/logs
path.plugins: /path/to/plugins

3. 防脑裂

discovery.zen.minimum_master_nodes: 2  [3个节点,就写2,多于3个,就(总数/2 + 1)]

minimum_master_nodes (还有一些其它配置)允许通过 API 调用的方式动态进行配置。 当你的集群在线运行的时候,你可以这样修改配置

PUT /_cluster/settings
{
    "persistent" : {
        "discovery.zen.minimum_master_nodes" : 2
    }
}

4. 集群节点重启与同步

防止集群节点重启后启动时间节点差异导致的数据迁移
集群节点有8个才可以对外服务

gateway.recover_after_nodes: 8

集群有10个节点,等待 5 分钟,或者10 个节点上线后,才进行数据恢复,这取决于哪个条件先达到。

gateway.expected_nodes: 10
gateway.recover_after_time: 5m [默认5m可以10m]

5. 环境变量

设置堆的大小

export ES_HEAP_SIZE=10g

6.禁用swap

bootstrap.memory_lock: true

其它

node.master: true
node.data: true
action.destructive_requires_name: true
indices.query.bool.max_clause_count: 10240
http.cors.enabled: true
http.cors.allow-origin: "*"
indices.fielddata.cache.size: 30%

cat>>/etc/security/limits.conf<

  • soft nofile 65536
  • hard nofile 65536
  • soft nproc 32000
  • hard nproc 32000
  • hard memlock unlimited
  • soft memlock unlimited
    EOF

echo "fs.file-max = 1000000" >> /etc/sysctl.conf
echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
echo "vm.swappiness=10" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_tw_buckets = 262144" >> /etc/sysctl.conf
echo "vm.min_free_kbytes=1048576" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 51000 65000" >> /etc/sysctl.conf
sysctl -p

修改文件 /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
systemctl daemon-reload

你可能感兴趣的:(ES集群调优)