搭建elasticsearch-学习笔记

linux下启动elasticsearch

  • 以守护进行启动elasticsearch: ./bin/elasticsearch -d -p pid

  • 可以通过进程id来关闭elasticsearch:kill ‘cat pid’

  • elasticsearch可以通过配置文件elasticsearch.yml进行设置,也可以在elasticsearch的启动命令行进行设置:./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1,把配置参数前面加E即可。

    配置elasticsearch

    6.1版本的es有三个配置文件:

  • elasticsearch.yml 配置elasticsearch

  • jvm.options 配置elasticsearch的jvm参数

  • log4j2.properties 配置elasticsearch的日志打印

    这些配置文件在elasticsearch的config目录下,配置文件也可以通过环境变量指定特定的配置文件夹(也可以通过export配置环境变量的方式进行配置):

ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch

配置文件格式

YAML格式的文件可以通过两种格式配置:

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

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

环境变量提取

在配置文件中可以用${...}的形式提取系统的环境变量,如:

node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

高级配置

如果有些配置不想写入配置文件,可以在elasticsearch启动的时候通过交互的方式动态输入,其中${prompt.text}表示明文交互, ${prompt.secret}表示密文交互:

node:
  name: ${prompt.text}

在启动es后,控制台会提示以下文字:

Enter value for [node.name]:

注意,如果利用此功能,elasticsearch不要在后台启动,必须在前台显式启动。

安全设置

elasticsearch提供elasticsearch-keystore的方式保存配置信息。具体可见:

https://www.elastic.co/guide/en/elasticsearch/reference/6.1/secure-settings.html

日志配置

elasticsearch利用log4j2打印日志,elasticsearch向日志配置提供三个变量:

  • ${sys:es.logs.base_path}:表示存日志的目录

  • ${sys:es.logs.cluster_name}:表示elasticsearch的集群名,在默认配置中用于日志名称的前缀。

  • ${sys:es.logs.node_name}:表示节点的名字


如果elasticsearch的集群名为production,配置的path.logs配置为:/var/log/elasticsearch,所以${sys:es.logs.base_path}表示/var/log/elasticsearch。${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log则表示/var/log/elasticsearch/production.log


其他日志级别、日志策略的配置请参考:

https://www.elastic.co/guide/en/elasticsearch/reference/6.1/logging.html

重要的elasticsearch配置

path.data和path.logs

在zip包或者tar.gz包安装的elasticsearch中,默认的路径在elasticsearch的安装目录下,但是当es升级时,会造成elasticsearch安装目录删除的情况,这样会造成文档数据和日志数据的丢失。
因此,有必要更改这两种数据的目录,可以通过下面配置更改:

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

文档数据目录可以指定多个,每个路径都会用来存储数据,但是一个分片的数据只会保存在一个路径下:

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

集群名称

见上文

节点名称

默认情况下,节点名称取UUID的前7位字符作为节点名称。
注:默认名称已经有了的时候,重启不会改变节点名称。
其他请见上文

网络设置

network.host

默认情况下,elasticsearch绑定到loopback地址,该绑定只适合本机操作不适合路由网络。
可以把该配置修改为ip或者主机名,这样es把该主机广播给集群其他节点,从而网络集群的组件。

discovery.zen.ping.unicast.hosts

该配置用于提供一些ip或者主机名,用于elasticsearch集群的初始化连接,如:

discovery.zen.ping.unicast.hosts:
 - 192.168.1.10:9300
 - 192.168.1.11 
 - seeds.mydomain.com (域名可以绑定多个ip)

http.port

  • 该端口用来接收http请求
  • 端口可以为一个特定的值也可以指定一个range,如果是range则会绑定第一个可用的port
  • 默认值为9200-9300

transport.tcp.port

  • 该端口主要用于节点之间的通信
  • 端口可以为一个特定的值也可以指定一个range,如果是range则会绑定第一个可用的port
  • 默认值为:9300-9400

discovery.zen.minimum_master_nodes

防止elasticsearch脑裂

  • 需要给每个master指定最小连接数量
  • 计算公式:(master_eligible_nodes / 2) + 1

heap dump

  • 在RPM或debian版本的es中,如果出现oom这会自动dump文件到/var/lib/elasticsearch
  • 可以在jvm.options文件中通过-XX:HeapDumpPath=/var/lib/elasticsearch修改路径,如果指定到文件,则每次执行都会覆盖掉原来的dump
  • zip或tar包中,默认不执行该操作,可以在jvm.options中对#-XX:HeapDumpPath=/heap/dump/path进行解注,然后配置真是路径来添加该功能。

重要的系统配置

heap size

  • 通过jvm.options设置
  • Xms与Xmx值设置为相同
  • 太多的内存会造成长gc,内存不要超过系统内存的50%,为了保证压缩指针功能的正常,内存不要超过32G
  • zero-based compressed oops
    该功能需要保证内存不超过32G,最好30G。可以通过启动参数“-XX:+UnlockDiagnosticVMOptions
    -XX:+PrintCompressedOopsMode”来查看该功能是否正常
  • 该设置主要使用linux,widows需要参考官网

关闭内存交换

内存交换可能导致垃圾回收时间过长,造成节点响应变慢甚至断开连接。

  • 关闭所有的内存交换
    1、sudo swapoff -a(暂时关闭)
    2、编辑/etc/fstab文件,注释到所有包含swap的配置行(永久关闭)

  • 锁定es内存,禁止交换
    1、设置elasticsearch.yml bootstrap.memory_lock: true
    2、可以通过
    GET _nodes?filter_path=**.mlockall
    来确定是否设置成功。同时,如果日志失败在启动日志中会出现“Unable to lock JVM Memory”的字样。
    3、如果设置失败,可能是当前用户没有该权限。可以以root权限运行ulimit -l unlimited 或编辑/etc/security/limits.conf文件把memlock 修改成unlimited
    4、设置失败的另外一个原因可能是临时文件挂载的问题。可以通过es环境变量

export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch

或设置jvm.options的jvm标志来解决

文件描述符

  • 该配置适用于linux或macOS系统
  • 如果运行超过文件描述符的限制大小,可能导致数据丢失、系统报错等。
  • 为es用户设置文件描述符数量最少为:65536
  • 通过root用户执行命令行:ulimit -n
    65536或修改/etc/security/limits.conf中的nofile选项值为65536
  • 通过:GET _nodes/stats/process?filter_path=**.max_file_descriptors
    可以查看每个节点的具体描述符配置

虚拟内存设置

6.1版本的elasticsearch中,索引的存储类型默认使用mmapfs格式,这种方式将映射的文件加载到虚拟地址空间。在使用该类型之前,请确定是否有足够的虚拟内存。在linux环境下可以用root运行以下命令进行调整:

sysctl -w vm.max_map_count=262144  

如果需要配置永久生效:
在/etc/sysctl.conf中配置vm.max_map_count。


查看系统的虚拟内存数量:

sysctl vm.max_map_count

http://blog.csdn.net/changong28/article/details/38406261
https://elasticsearch.cn/article/120

线程数

  • es利用线程池进行各种类型的操作
  • 要保证es的用户可以创建最少4096个线程(v6.1)
  • root用户运行ulimit -u 4096 或 编辑/etc/security/limits.conf
    文件设置nproc的值为4096

http://blog.csdn.net/opensure/article/details/51491815
https://www.elastic.co/guide/en/elasticsearch/reference/current/max-number-of-threads.html
优化实践:http://blog.csdn.net/opensure/article/details/47617437

启动设置检查(bootstrap)

Bootstrap Checks 是 Elasticsearch 5.0后 新加入的。之前的版本中,错误的配置会被当成 warning 记录到日志中,但这些信息往往被用户忽视。为了保证一些重要的配置得到应有的重视,Elasticsearch 会在启动时进行 Bootstrap Checks .

Bootstrap Checks 会检查很多 Elasticsearch 和系统的配置。在开发模式下,所有没通过的检查都会报 warnings 并写进日志文件,即使检查没通过,依然可以启动节点运行 Elasticsearch;而在生产模式下,任何没通过的 Bootstrap Checks 都会报异常并阻止 Elasticsearch 启动

  • 开发模式 vs. 生产模式

    Elasticsearch 的 HTTP 默认绑定到localhost,并且 transport 使用内部通信,适用于日常开发;而组成集群时,由于每个 ES 实例要网络可达,故 transport 必须绑定到外部接口。
    一般 Elasticsearch 默认是在开发模式下工作;一旦配置了诸如network.host的网络配置项,Elasticsearch会认为处于生产环境。这是避免服务器因不良配置造成数据丢失的重要安全措施。
    另外,HTTP 和 transport 可以分别通过 http.host 和 transport.host进行配置,所以配置单点实例可达时,可以用 HTTP 进行测试而无需触发生产模式。


具体的检查项分别有:
Heap size check
File descriptor check
Memory lock check
Maximum number of threads check
Maximum size virtual memory check
Maximum map count check
Client JVM check
Use serial collector check
OnError and OnOutOfMemoryError checks

在开发环境下也可以强制检查,详情请见:

https://www.elastic.co/guide/en/elasticsearch/reference/6.1/bootstrap-checks.html
https://www.jianshu.com/p/bee6cadc0809

elasticsearch关闭

  • 正常关闭
  • 非正常关闭

https://www.elastic.co/guide/en/elasticsearch/reference/current/stopping-elasticsearch.html

猜你喜欢

转载自blog.csdn.net/fsz9065/article/details/78939647
今日推荐