虽然Elasticsearch只须要不多的配置,可是在投入生产以前须要考虑许多设置。html
若是你使用.zip
或.tar.gz
归档,数据和日志目录都是$ES_HOME
的子文件夹,若是这些重要的文件夹被保留在它们的默认位置,那么在升级到新版本时,它们颇有可能被删除。node
在生产使用中,你几乎确定但愿更改数据和日志文件夹的位置:segmentfault
path: logs: /var/log/elasticsearch data: /var/data/elasticsearch
RPM和Debian发行版已经为数据和日志使用了自定义路径。windows
path.data
设置能够设置为多个路径,在这种状况下,全部路径都将用于存储数据(尽管属于单个碎片的文件都将存储在相同的数据路径上):缓存
path: data: - /mnt/elasticsearch_1 - /mnt/elasticsearch_2 - /mnt/elasticsearch_3
节点只有在与集群中的全部其余节点共享其cluster.name
时才能加入集群,默认的名称是elasticsearch
,可是应该将其更改成描述集群用途的适当名称。安全
cluster.name: logging-prod
确保不要在不一样的环境中重用相同的集群名称,不然可能会致使节点加入错误的集群。服务器
默认状况下,Elasticsearch将使用随机生成的UUID的前7个字符做为节点id。注意,节点id是持久的而且在节点从新启动时不会更改,所以默认节点名也不会更改。网络
值得配置一个更有意义的名称,这个名称在从新启动节点以后也具备持久化的优点:dom
node.name: prod-data-2
节点名也能够设置为服务器的主机名以下:jvm
node.name: ${HOSTNAME}
在默认状况下,Elasticsearch只绑定回环地址 — 例如,127.0.0.1
和[::1]
,这足以在服务器上运行单个开发节点。
实际上,能够从单个节点上相同的
$ES_HOME
位置启动多个节点,这对于测试Elasticsearch造成集群的能力是颇有用的,可是这并非推荐用于生产的配置。
为了与其余服务器上的节点进行通讯并造成集群,你的节点将须要绑定到非回环地址,虽然有许多网络设置,但一般你须要配置的只是network.host:
network.host: 192.168.1.10
network.host
设置还能够理解一些特殊值,如_local_
、_site_
、_global_
和像:ip4
和:ip6
的修饰符,详细信息能够在network.host的特殊值中找到。
很快你就能够为
network.host
提供一个自定义设置,Elasticsearch假定你正在从开发模式转换到生产模式,并将许多系统启动检查从警告升级到异常,有关更多信息,请参见
开发模式与生产模式。
Elasticsearch使用一种名为“Zen discovery”的自定义发现实现,用于节点到节点的集群和主选择,在开始生产以前应该配置两个重要的发现设置。
在没有任何网络配置的状况下,Elasticsearch将绑定到可用的回环地址,并扫描端口9300到9305,以尝试链接到同一服务器上运行的其余节点,这提供了自动集群体验,而无需进行任何配置。
当节点在其余服务器上造成集群时,你必须提供集群中可能存在的其余节点的种子列表,能够指定以下:
discovery.zen.ping.unicast.hosts: - 192.168.1.10:9300 - 192.168.1.11 - seeds.mydomain.com
transport.profiles.default.port
,而且回退到transport.tcp.port
为了防止数据丢失,配置discovery.zen.minimum_master_nodes
很是重要,使每一个适合的主节点都知道要造成集群必须可见的适合的主节点的最小数目。
若是没有这种设置,遭受网络故障的集群有可能被分割成两个独立的集群 - 脑分裂 - 这将致使数据丢失,使用minimum_master_nodes
避免脑分裂提供了一个更详细的解释。
为了不脑分裂,这个设置应该设置为适合的主节点的法定数量:
(master_eligible_nodes / 2) + 1
换句话说,若是有三个适合的主节点,那么最小主节点应该设置为(3 / 2) + 1
或2
:
discovery.zen.minimum_master_nodes: 2
在默认状况下,Elasticsearch告诉JVM使用最小和最大大小为1GB的堆,在迁移到生产时,重要的是配置堆大小以确保Elasticsearch有足够的可用堆。
Elasticsearch将在jvm.options中经过Xms
(最小堆大小)和Xmx
(最大堆大小)的设置分配指定的整个堆。
这些设置的值取决于服务器上可用RAM的总数,好的经验法则是:
Xms
)和最大堆大小(Xmx
)彼此相等。Xmx
设置为不超过物理RAM的50%,以确保有足够的物理RAM留给内核文件系统缓存。不要将Xmx
设置在JVM用于压缩对象指针的截点之上(被压缩的oops)。确切的截点不一样,但接近32GB,你能够经过在日志中查找以下所示的行来验证你是否处于限制之下:
heap size [1.9gb], compressed ordinary object pointers [true]
更好的方法是,尽可能低于零基础被压缩的oops阈值。确切的截点不一样,但在大多数系统中26GB是安全的,但在某些系统中可能高达30GB。你能够经过使用JVM选项-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode
启动Elasticsearch,并查找以下所示的行来验证你是否处于限制之下:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
显示零基础被压缩的oops被启用,而不是:
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
下面是如何经过jvm.options
设置堆大小的示例:
-Xms2g -Xmx2g
还能够经过环境变量设置堆大小,这能够经过注释jvm.options
文件中的Xms
和Xmx
设置来实现,并经过ES_JAVA_OPTS
设置这些值:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
为 Windows服务配置堆与上面的不一样,最初为Windows服务填充的值能够如上所述进行配置,但在被安装为服务以后会有所不一样,有关更多细节,请参阅 Windows服务文档。
默认状况,Elasticsearch配置JVM将内存溢出异常堆转储到默认数据目录(RPM和Debian包发行版的/var/lib/elasticsearch
目录,和Elasticsearch的tar和zip存档发行版的安装根目录下的的data
目录)。若是此路径不适合接收堆转储,你应该在jvm.options
中修改条目-XX:HeapDumpPath=...
。若是你指定了一个目录,JVM将根据运行实例的PID为堆转储生成一个文件名。若是你指定了一个固定的文件名而不是目录,那么当JVM须要在内存溢出的异常上执行堆转储时,该文件必须不存在,不然堆转储将失败。
默认状况下,Elasticsearch支持GC日志,它们在jvm.options
中配置,并默认为与Elasticsearch日志相同的默认位置。默认配置每64MB滚动日志一次,最多能够占用2g的磁盘空间。
默认状况下,Elasticsearch使用一个私有的临时目录,启动脚本直接在系统临时目录下建立它。
在一些Linux发行版中,若是文件和目录最近没有被访问过,系统实用程序将从/tmp
中清除它们。若是须要临时目录的特性长时间没有使用,这可能致使在Elasticsearch运行时删除私有临时目录,若是随后使用了须要临时目录的特性,则会致使问题。
若是你使用.deb
或.rpm
包安装Elasticsearch,并在systemd
下运行,那么Elasticsearch使用的私有临时目录将被排除在按期清理以外。
可是,若是你打算在Linux上运行.tar.gz
发行版一段较长的时间,那么你应该考虑为Elasticsearch建立一个专用的临时目录,它不在清除旧文件和目录的路径下。这个目录应该有权限设置,以便只有Elasticsearch运行的用户才能访问它,而后在启动Elasticsearch以前设置$ES_TMPDIR
环境变量指向它。
默认状况下,Elasticsearch配置JVM将致命错误日志写入默认日志目录(这里是RPM和Debian软件包发行版的/var/log/elasticsearch
,以及tar和zip归档发行版的Elasticsearch安装根目录下的logs
目录)。这些是JVM在遇到致命错误(例如,分段故障)时生成的日志。若是此路径不适合接收日志,你应该修改在jvm.options
中-XX:ErrorFile=…
条目到另外一个路径。