Elasticsearch官档翻译——2.1 配置

配置

环境变量

Elasticsearch会使用脚本中内置的JAVA_OPTS变量值作为JVM启动参数,最重要参数-Xmx,它控制进程最大的堆内存,-Xms,控制进程分配最小堆内存(通常来说内存分配越多越好)。
通常来说,推荐做法是不改变JAVA_OPTS变量,而使用ES_JAVA_OPTS来改变JVM参数配置。
ES_HEAP_SIZE参数用来配置Java为ES进程分配的堆内存,最大最小值是一样的,当然也可以通过指定的参数分别设置,最小最大分别是 ES_MIN_MEM(默认256M)和ES_MAX_MEM(默认是1G)。
译者批注:通常建议最大最小内存设置成一样的,因为通常ES集群所在服务器资源尽可能都是提供给集群使用的,所以资源管够,而设置不同的最大最小值,会产生内存扩容导致过多开销
建议将最大值最小值设置一样,并且打开(mlockall)
译者批注:mlockall这个参数可以防止进程进行swap内存交换,内存交换效率很低,毕竟要读写磁盘。详细原因可以看这里:把bootstrap.mlockall设为true

系统配置

文件描述符
确保增大你机器(或者运行ES的用户)的最大文件打开数,推荐设置为32K或64K。
为了测试一个进程的最大文件打开数,启动时配置参数-Des.max-open-filestrue。这样系统启动时就会打印最大文件打开数。
另外,你也可以通过解析下面API的结果中的max_file_descriptors参数获取每个节点的最大文件打开数:

curl localhost:9200/_nodes/stats/process?pretty

虚拟内存
Elasticsearch默认使用mmaps / niofs混合的目录存储类型存储索引。默认的操作系统限制mmaps(内存映射模式)中的虚拟地址空间限制太小了,可能会导致内存溢出,在Linux上,你可以使用root用户通过如下命令扩大限制:

sysctl -w vm.max_map_count=262144

如果想要永久改变这个参数的花,修改配置文件/etc/sysctl.conf中的vm.max_map_count这项配置。

注意:如果你是用安装包安装ES(.deb或rpm),这个配置会自动改变,你可以使用命令sysctl vm.max_map_count 来校验。

内存配置
大多数操作系统会尽可能多的使用内存给文件系统缓存并迫切的交换(后称swap)无用的应用内存到磁盘,这有可能导致Elasticsearch进程被swap到磁盘,swap十分消耗性能并且影响节点的稳定性,因此要不惜一切代价避免它发生。
你有三种选择:

  • 禁用swap
    简单粗暴的禁用swap,通常Elasticsearch作为一个服务运行在沙箱环境中,其内存通过系统变量ES_HEAP_SIZE来控制,因此swap不应该启用。
    Linux系统中,你可以通过命令sudo swapoff -a来关闭,如果想永久关闭,需要修改配置文件/etc/fstab并找到注释中包括swap的那行。
    Windows下,你可以完全禁用分页文件,设置方法:我的电脑右键属性->高级系统设置->高级/性能,点击设置->高级->虚拟内存,点击更改->选择无分页文件。
  • 配置swappiness
    第二个选择就是确保sysctl的配置vm.swappiness设置为0。这样能够降低内核的swap频率,正常情况下是不会产生swap的,当然系统在紧急情况下还是会进行swap。

注意:在内核版本3.5-rc1及以上,vm.swappiness设置为0的时候,触发OOM则会杀掉进程而不是进行swap,紧急情况下你需要设置该配置为1来确保swap是能够执行的。

  • mlockall
    第三个选择是在Linux/Unix使用mlockall,Windows使用 VirtualLock,能够将进程地址空间锁在内存中,防止Elasticsearch进程内存被swap出去,可以通过在配置文件elasticsearch.yml中加入下面的配置:

bootstrap.mlockall: true

启动后,你可以通过检验下面这个命令的返回结果中的mlockall值来看配置是否成功:

curl http://localhost:9200/_nodes/process?pretty

如果你发现mlockall的值是false,说明配置失败了,最有可能的原因是在Linux/Unix系统中启动ES的用户没有权限锁住内存,你可以在启动前,通过root用户执行ulimit -l unlimited来授权。

另一个原因可能是临时文件目录(Linux下通常是/tmp)挂载时指定了noexec选项,你可以在启动ES的时候指定新的临时目录来解决:

./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir

注意:启用mlockall,如果尝试申请超过可用内存大小的内存,可能会导致JVM或shell 回话退出。

Elasticsearch配置

elasticsearch的配置文件在ES_HOME/config目录下,目录中有两个文件,elasticsearch.yml用来配置ES的不同模块,logging.yml用来配置ES日志相关设置。
配置风格是YAML,下面我们来一个示例,修改所有网络模块绑定的地址信息,改为如下:

network.host: 10.0.0.4

译者批注:格式按照默认配置文件来即可,官网的yaml配置风格和我是用的略有不同,这里我直接使用默认的配置文件中的注释demo

目录

生产环境使用,我们肯定需要修改data和log的存放目录:

path.data: /var/data/elasticsearch
path.logs: /var/log/elasticsearch

译者批注:data目录可以写多个,通过逗号分隔,实现磁盘阵列,把数据写到多个磁盘上,降低读写锁的开销。不过目前译者没有这么实践过。

集群名

别忘了给你的集群命名,用来使节点发现并自动加入集群。

cluster.name: <NAME OF YOUR CLUSTER>

确保你的集群名不会在不同环境复用,否则可能会导致节点加入错误的集群而出错。例如你可以使用 logging-dev,logging-stagelogging-prod表示开发集群,预发布(译者公司称作沙箱)集群和生产集群。

节点名

也许你也需要修改节点名称,就像主机名一样。默认情况下节点启动时会从3000个漫威人物名字中随机选取一个。

node.name: <NAME OF YOUR NODE>

译者批注:推荐命名用编号区分方便管理维护

机器的主机名可以通过系统变量 HOSTNAME获取,如果你的机器只运行集群中的一个节点,可以设置节点名为主机名,使用标签 ${...}

node.name: ${HOSTNAME}

译者批注:这种配置方式极不推荐,不利于管理,风险高,把它当做一个trick测试玩好了。除非你做了一些安全或权限的插件,用到输入密码这种配置。

ES内部在处理这些配置的时候都会使用“ namespaced”压缩处理(译者批注:也就是译者现在为大家展示的这种风格)。你也可以使用JSON风格的配置,配置文件命名为:elasticsearch.json就行了:
Code style

{
    "network" : {
        "host" : "10.0.0.4"
    }
}

也就是说你可以很轻松的通过外部配置,使用ES_JAVA_OPTS或者启动时参数进行配置,例如:

./elasticsearch -Des.network.host=10.0.0.4

另外,如果你不希望存储你的配置,还可以使用通配符的方式在启动ES时从前台传值,使用${prompt.text}${prompt.secret}配置,前者控制台输入显示明文,后者则不显示,示例如下:

node.name: ${prompt.text}

启动ES后,会提示你输入参数值,如下:

Enter value for [node.name]:

如果${prompt.text}${prompt.secret}已经存在于配置中,或者你使用后台启动ES,则这两个配置不会起作用。

索引配置

集群中创建的索引拥有它自己的配置,例如,以下创建索引的配置设置了刷新间隔为5s,而没有使用默认的刷新间隔(可以使用YAML或JSON格式):

$ curl -XPUT http://localhost:9200/kimchy/ -d
'
index:
refresh_interval: 5s
'

索引级别的配置也可以用于节点级别的配置,比如刚才的配置我们也可以在elasticsearch.yml中设置:

index.refresh_interval: 5s

就是说在特定节点上创建的每个索引都将使用5s的刷新间隔,除非创建索引时设置它。也可以说,索引级别的配置可以覆盖节点级别的配置。

所有的配置信息都可以在索引模块找到。

日志配置

elasticsearch内部使用log4j日志系统,开箱即用,并使用YAML配置风格简化log4j的配置,配置文件是conf/logging.yml,同样JSON风格的配置文件也支持。多个配置文件也是支持的,它们会被整合到一起,前提是文件名要以logging.开头,并以支持的后缀结尾(目前可以是.yml, .yaml, .json.properties)。日志器包括Java包名和相应的日志级别,你可以省略org.elasticsearch前缀。Appender部分包括日志目的地。更多地自定义日志配置和appender类型请看 log4j documentation
额外的Appender还有 log4j-extras
提供的其他日志类也是支持的,开箱即用。

过期日志

除了常规日志,ES允许你启动过期日志记录。例如如果你要迁移某些功能,需要你提前确定。默认的过期日志是禁用的,你可以通过如下配置启用:

deprecation: DEBUG, deprecation_log_file

这将会每天在你的日志目录创建滚动日志,经常检查

上一节:Elasticsearch官档翻译——2 设置

下一节:Elasticsearch官档翻译——2.2 在Linux上启动服务

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容