您的位置:首页 > 其它

Elasticsearch部署指南

2017-12-18 18:47 302 查看

安装Elasticsearch

//下载tar.gz软件包
elasticsearch-6.1.0.tar.gz

//安装
tar xf elasticsearch-6.1.0.tar.gz -C /opt
cd /opt
ln -s elasticsearch-6.1.0 elasticsearch

运行Elasticsearch
默认情况下,Elasticsearch在前台运行,将其日志打印到标准输出(stdout),停止通过Ctrl-C
./bin/elasticsearch

作为守护进程运行
要将Elasticsearch作为守护程序运行,请-d在命令行上指定,并使用以下-p选项将进程ID记录到文件中
./bin/elasticsearch -d -p pid

要关闭Elasticsearch,请杀死pid文件中记录的进程ID
kill `cat pid`


目录说明

bin	二进制脚本,包括elasticsearch启动节点和elasticsearch-plugin安装插件
config  配置文件,包括elasticsearch.yml, jvm.options
data	在节点上分配的每个索引/分片的数据文件的位置。可以容纳多个地点
logs	日志文件位置
plugins	插件文件的位置。每个插件将被包含在一个子目录中


重要的Elasticsearch配置(elasticsearch.yml)

path.data和path.logs

默认配置:
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch


在生产环境中几乎肯定的需要更改数据和日志文件夹的位置。如果保留在默认位置,则在Elasticsearch升级到新版本时,这些文件夹被删除的风险很高
path.data可以设置为多条路径,在这种情况下,所有的路径将会被用于存储数据(虽然属于单个碎片文件将全部存储相同的数据路径上)

path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3


cluster.name

一个集群中,所有节点的cluster.name是相同的。默认名称是elasticsearch,但是我们应该改为集群用途适当的名称

cluster.name:logging-prod


确保不要在不同的环境中重复使用相同的集群名称,否则可能会导致节点加入错误的集群

node.name

默认情况下,Elasticsearch将随机生成的uuid的第一个字符作为节点ID。请注意节点ID是持久的,并且节点重启时不会更改,因此默认节点名称也不会更改
我们应该配置一个更有意义的名字

node.name: prod-data-2


也可以设置为服务器的主机名

node.name: ${HOSTNAME}


bootstrap.memory_lock

要尽量到进程的地址空间锁定到RAM中,防止任何Elasticsearch内存被交换出去

bootstrap.memory_lock:true


network.host

默认情况下,Elasticsearch只绑定到回送地址 - 例如127.0.0.1 和[::1]。这足以在服务器上运行单个开发节点
为了与其他服务器上的节点进行通信并形成群集,您的节点将需要绑定到非环回地址。虽然有许多 网络设置,通常您只需要配置 network.host

network.host:192.168.88.1


discovery.zen.ping.unicast.hosts

开箱即用,没有任何网络配置,Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305,尝试连接到运行在同一服务器上的其他节点。这提供了自动集群体验,而无需进行任何配置。
当需要与其他服务器上的节点组成群集时,您必须提供群集中其他节点的种子列表,这些节点可能是活的并且可联系的。这可以指定如下

discovery.zen.ping.unicast.hosts:
-  192.168.1.10:9300
-  192.168.1.11    #如果未指定 ,端口将默认为transport.profiles.default.port
-  seeds.mydomain.com   #解析为多个IP地址的主机名将尝试所有解析的地址


discovery.zen.minimum_master_nodes

为防止数据丢失,配置该discovery.zen.minimum_master_nodes设置至关重要, 以便每个符合主节点的节点都知道为了形成群集而必须可见的主节点的最小数量
如果没有这个设置,那么遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
为了避免脑裂,应将此设置设置为符合主数据节点的法定人数

(master_eligible_nodes / 2)+ 1

换句话说,如果有三个主要节点,则最小主节点应设置为(3 / 2) + 1或2

discovery.zen.minimum_master_nodes:2

JVM堆转储路径

RPM和Debian软件包分发默认配置JVM倾倒在内存不足异常给堆/var/lib/elasticsearch
如果该路径不适合用于存储堆转储,则应修改条目-XX:HeapDumpPath=/var/lib/elasticsearch中 jvm.options到备用路径
如果你指定一个文件名而不是一个目录,JVM将重复使用同一个文件; 这是防止堆转储堆积在堆转储路径中的一种机制。或者,您可以通过操作系统配置计划任务,以删除比配置的时间早的堆转储

请注意,归档分发默认情况下不配置堆转储路径。相反,JVM将默认转储到Elasticsearch进程的工作目录。如果你想配置一个堆转储路径,您应该修改条目#-XX:HeapDumpPath=/heap/dump/path中 jvm.options删除注释标记#,并指定一个实际的路径

重要的系统配置

文件句柄数和线程数

在Linux系统上,可以通过编辑/etc/security/limits.conf文件为特定用户设置持续限制。要将elasticsearch用户打开文件的最大数量设置为65,536,请将以下行添加到limits.conf文件中:此更改仅在elasticsearch用户下次打开新会话时生效

elasticsearch  -  nofile 65536   #文件句柄数
elasticsearch soft nproc 65535   #线程数
elasticsearch hard nproc 65535
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited


使用RPM或Debian软件包时,必须通过systemd指定系限制,systemd服务文件(/usr/lib/systemd/system/elasticsearch.service)

//编辑文件
sudo systemctl edit elasticsearch

[Service]
LimitMEMLOCK=infinity

//完成后,运行以下命令重新加载
sudo systemctl daemon-reload


通过jvm.options设置JVM堆大小

默认情况下,Elasticsearch使用JVM最小和最大为1GB的堆。在生产环境中,配置堆的大小来确保Elasricsearch有足够的可用堆是非常重要的
这些设置的值取决于服务器上可用的RAM数量,好的经验法则是:

  1、将最小堆大小(Xms)和最大堆大小(Xmx)设置为彼此相等
  2、Elasticsearch可用的堆越多,可用于缓存的内存就越多。但是请注意,太多的堆可能使您长时间垃圾收集暂停。
  3、将Xmx设置为不超过物理RAM的50%,以确保有足够的物理内存留给内核文件系统缓存

通过配置elasticsearch/config/jvm.options可以调整堆大小

#设置为2G
-Xms2g
-Xmx2g


禁用交换

交换可能会导致部分JVM堆甚至其可执行页被换出到磁盘,性能非常糟糕,节点稳定性能差,我们应该不惜一切代价避免
在Linux系统上,您可以运行以下命令临时禁用交换:

sudo swapoff -a


要永久禁用它,您需要编辑该/etc/fstab文件并注释掉包含该单词的所有行swap

要尽量到进程的地址空间锁定到RAM中,防止任何Elasticsearch内存被交换出去。这可以通过将这一行添加到config/elasticsearch.yml文件来完成:

bootstrap.memory_lock:true


虚拟内存

使用root在Linux上,可以通过运行以下命令来增加限制

vm.max_map_count=262144


要永久设置此值,请更新中的vm.max_map_count设置 /etc/sysctl.conf。要在重新启动后进行验证,请运行sysctl vm.max_map_count
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: