elasticsearch 配置小计

elasticsearch 配置小计

1.内存调整

bin/elasticsearch.in.sh

#修改ES占用的内存大小,可根据服务器情况而定。
#目前我的ES_NODE服务器只有24G内存,因此将一半给ES使用
#有同学说ES分配内存过大,会造成FGC时间过长,这个我没有实测,希望有经验的同学给个答案。
if [ "x$ES_MIN_MEM" = "x" ]; then
    ES_MIN_MEM=10g
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
    ES_MAX_MEM=10g
fi
 
#关于线程大小,我设置的比较大,主要是考虑到ES虽然会开很多线程,但承载的数据量较大,同时Xss并不是直接分配掉设定的内存,所以进行如下设置。
JAVA_OPTS="$JAVA_OPTS -Xss128m"

2.集群配置

config/elasticsearch.yml

# 我只挑选了我用到的配置,如果有其他需求还请参考配置文档
# 部分配置可通过template实现,后面会提到,优劣还需自己斟酌
 
# 由于ES基于广播方式发现集群内的服务器,所以配置起来相对简单
# 集群名称可以自动生成,当然也可以手动配置。如果你想要在同一网络中运行多个集群,就需要独一无二的集群名来区分他们
cluster.name: elasticsearch-test-cluster
# 节点名称同理,可自动生成也可手动配置。
node.name: "node-10.7.3.121"
# 配置该节点为主节点(默认开启)
# node.master: true
# 允许该节点存储数据(默认开启)
# node.data: true
# 一些高级的集群配置
# 1. 如果你想让节点从不选举为主节点,只用来存储数据,可作为负载器
# node.master: false
# node.data: true
#
# 2. 如果想让节点成为主节点,且不存储任何数据,并保有空闲资源,可作为协调
# node.master: true
# node.data: false
#
# 3. 如果想让节点既不称为主节点,又不成为数据节点,那么可将他作为搜索器,从节点中获取数据,生成搜索结果等。
# node.master: false
# node.data: false
# 
# 设置索引的分片数,默认为5
# index.number_of_shards: 5
# 设置索引的副本数,默认为1
# 配置文件中提到的最佳实践是,如果服务器够多,可以将分片书提高,将数据分布到大集群中去
# 同时,如果增加副本数量可以有效的提高搜索性能
# 由于我现在集群较小,所以仍使用默认配置
 
# 配置文件存储位置
path.conf: /usr/local/elasticsearch-0.90.7/config   # 数据存储位置
path.data: /syslog/ESdata
# 临时文件的路径
# path.work: /path/to/work
# 日志文件的路径
# path.logs: /path/to/logs
# 插件安装路径
# path.plugins: /path/to/plugins
 
# 当JVM开始写入交换空间时(swapping)ElasticSearch性能会低下,你应该保证它不会写入交换空间
# 设置这个属性为true来锁定内存
bootstrap.mlockall: true
 
# 下面的配置控制怎样以及何时启动一整个集群重启的初始化恢复过程
# (当使用shard gateway时,是为了尽可能的重用local data(本地数据))
 
# 一个集群中的N个节点启动后,才允许进行恢复处理
#
gateway.recover_after_nodes: 1
 
# 设置初始化恢复过程的超时时间,超时时间从上一个配置中配置的N个节点启动后算起
#
gateway.recover_after_time: 5m
# 设置这个集群中期望有多少个节点。一旦这N个节点启动(并且recover_after_nodes也符合),
# 立即开始恢复过程(不等待recover_after_time超时)
#
gateway.expected_nodes: 2
 
# 下面这些配置允许在初始化恢复,副本分配,再平衡,或者添加和删除节点时控制节点间的分片分配
# 设置一个节点的并行恢复数
# 1. 初始化恢复期间
cluster.routing.allocation.node_initial_primaries_recoveries: 4
#
# 2. 添加/删除节点,再平衡等期间
cluster.routing.allocation.node_concurrent_recoveries: 4
# 设置恢复时的吞吐量(例如,100mb,默认为无限制。如果同上联还有其他业务在跑的话还是限制一下的好)
#
indices.recovery.max_size_per_sec: 400mb
# Set to limit the number of open concurrent streams when
# recovering a shard from a peer:
# 设置当一个分片从对等点恢复时能够打开的并发流的上限
indices.recovery.concurrent_streams: 5
 
# 多播的就不翻了,就两条,自己看配置文件
# 当多播不可用或者集群跨网段的时候集群通信还是用单播吧
# 探查的超时时间,默认3秒,提高一点以应对网络不好的时候
discovery.zen.ping.timeout: 20s
# 1. 禁用多播探查(默认可用)
# discovery.zen.ping.multicast.enabled: false
#
# 2. 这是一个集群中的主节点的初始列表,当节点(主节点或者数据节点)启动时使用这个列表进行探测
# discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]
discovery.zen.ping.unicast.hosts: ["10.7.3.121", "10.7.3.122"]
 
# out of memory错误 避免过于频繁的查询时集群假死
# 1.设置es的缓存类型为Soft Reference,它的主要特点是据有较强的引用功能。只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。另外,这些引 用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null。它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory。在es的配置文件加上index.cache.field.type: soft即可。
# 2.设置es最大缓存数据条数和缓存失效时间,通过设置index.cache.field.max_size: 50000来把缓存field的最大值设置为50000,设置index.cache.field.expire: 10m把过期时间设置成10分钟。
index.cache.field.max_size: 50000
index.cache.field.expire: 10m
index.cache.field.type: soft

3.模板配置。

ES默认会对传上去的日志进行审计。
会将形如

referrer        "http://player.cntv.cn/standard/cntvplayer201311301256.swf?v=0.171.5.8.9.6.3.5.0";
request     /video/VSET100169007943/

这类日志内容切分成多块,所以,mapping就排上用场了

logstash.json

{
# 模板对应的index
"template" : "logstash*",
"settings" : {
 
# 部分config中的配置可以写到这里
"index.number_of_shards" : 5,
  "number_of_replicas" : 1,
  "index" : {
    "query" : { "default_field" : "message"},
    "store" : { "compress" : { "stored" : true, "tv": true } }
   }
},
"mappings": {
    "_default_": { 
        "_all": { "enabled": false },
        "_source": { "compress": true },
        "dynamic_templates": [
            {
                "string_template" : { 
                    "match" : "*",
                    "mapping": { "type": "string", "index": "not_analyzed" },
                    "match_mapping_type" : "string"
                 } 
             }
         ],
 
# 不想被analyzed的项目写到下面 类型不要写错,index为not_analyzed 即可
         "properties" : {               
            "@fields": { "type": "object", "dynamic": true, "path": "full" }, 
            "message" : { "type" : "string", "index" : "analyzed" },
            "host" : { "type" : "string", "index" : "not_analyzed" },
            "path" : { "type" : "string", "index" : "not_analyzed" },
            "request": { "type": "string", "index" : "not_analyzed" }, 
            "referrer": { "type": "string", "index" : "not_analyzed" }, 
            "@timestamp" : { "type" : "date", "index" : "not_analyzed" },
            "type" : { "type" : "string", "index" : "not_analyzed" }
        }
     }
  }
}

默认可将模板放置在config/templates/下,重启ES会自动生效

由于logstash-1.3.1版本在output_elasticsearch中开始支持template(谢谢@松涛同学的帮助),故可以在logstash配置中添加相应参数。

elasticsearch {
...
template => "/usr/local/logstash/logstash.json"
template_overwrite => true
}

上面的logstash.json 我直接使用的给logstash端使用的版本,ES使用的版本还需在前面添加template名称。

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 66 queries in 0.365 seconds