es集群的配置非常简单,在es目录下的config/elasticsearch.yml中有如下几个需要配置的项
cluster.name:elasticsearch #集群名称,在同一集群中保持一致,即可发现同网段下的node node.name:node-1 #节点名称,可以设置为node-IP,以方便定位问题。 node.rack:r1 #给节点添加自定义机架 path.data: #es数据存储路径 path.logs: #es log存放路径 network.host: 0.0.0.0 #设置es的IP(同时设定bind和publish) http.port: 9200 #设置es端口 discovery.zen.ping.unicast.hosts:["ip:port"," ip:port "," ip:port "] #单播发现节点主机,配置一个即可通过它发现所有node,相当于路由作用。集群设置为master的IP即可。
配置完以上参数的es就可以启动了,但这有时候是远远不够的。
node.master:true #该节点有机会成为master节点 node.data:true #该节点可以存储数据 index.number_of_shards:5 #shard的数目 (合理根据node数分配分片和副本,确保一台离开时不会丢失分片) index.number_of_replicas:3 #数据副本的数目 network.bind_host:0.0.0.0 #设置绑定的IP地址,可以是IPV4或者IPV6 network.publish_host:0.0.0.0 #设置其他节点与该节点交互的IP地址 transport.tcp.port:9300 #设置节点之间交互的端口号 transport.tcp.compress:true #设置是否压缩tcp上交互传输的数据 http.max_content_length:100mb #设置http内容的最大大小 http.enabled:true #是否开启http服务对外提供服务 discovery.zen.minimum_master_nodes:2 #设置这个参数防脑裂(node数/2+1) discovery.zen.ping.timeout:120s #设置集群中自动发现其他节点时ping连接的超时时间 discovery.zen.ping.multicast.enabled:true #打开多播发现,默认关闭。(需插件,不建议) bootstrap.mlockall:true #设置为true来锁住内存。当jvm开始swapping时es的效率会降低,要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许Elasticsearch的进程可以锁住内存,linux下可以通过`ulimit-l unlimited`命令。
归并线程速度配置
Elasticsearch写入数据时,会产生非常多segment,并且有一个segment merge的过程,segment merge的过程,会先读取 segment,归并计算,再写一遍大的segment,最后刷到磁盘。
可以说,这是一个非常消耗磁盘 IO和 CPU的任务。所以,ES 提供了对归并线程的限速机制,确保这个任务不会过分影响到其他任务。
默认情况下,归并线程的限速配置 indices.store.throttle.max_bytes_per_sec 是 20MB。对于写入量较大,磁盘转速较高,甚至使用 SSD 盘的服务器来说,这个限速是明显过低的。对于 ELK Stack 应用,建议可以适当调大到 100MB或者更高。
curl -XPUT http://127.0.0.1:9200/_cluster/settings -d' { "persistent" : { "indices.store.throttle.max_bytes_per_sec" : "20mb" } }'