Elasticsearch 5.0 笔记

安装设置 Elasticsearch

安装

安装 elasticsearch

具体可以参考官网,这里仅介绍通过rpm安装方法。

下载安装签名公钥:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

签名指纹:

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4
从 rpm 仓库安装

在 RedHat 基本发行版系统的 /etc/yum.repos.d/ 目录下创建 elasticsearch.repo 文件,内容包含:

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
sudo yum install elasticsearch

查看当前可用版本

yum list --showduplicates elasticsearch
手动下载 rpm 包

请参见官网

SysV init 和 systemd

Elasticsearch 安装好以后不会自动启动,如何启动和停止它取决于系统使用了哪种 SysV .查看方法

ps -p 1

具体设置参见官网

安装 x-pack(可选安装)

从ES栈5.0正式版开始,集成 x-pack —— 一种集成了 安全、告警、监控、报告和拓扑能力的插件。它是一场革命性功能,用来替代单独安装 Shield, Watcher, Marvel, Reporting 和 Graph 插件。

网站链接

安装方法:

# 通过 yum 安装的 elasticsearch 运行路径在 /usr/share/elasticsearch/bin
bin/elasticsearch-plugin install x-pack
# 通过 yum 安装的 kibanba 运行路径在 /usr/share/kibanba/bin
bin/kibana-plugin install x-pack

安装好插件后,它自动创建两个账户 elastickibana,密码为 changeme

安装好以后默认开启了基本认证。如果不安装 x-pack 则不会有访问权限的问题存在

普通访问

curl -s "http://localhost:9200"|jq
{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "missing authentication token for REST request [/]",
        "header": {
          "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
        }
      }
    ],
    "type": "security_exception",
    "reason": "missing authentication token for REST request [/]",
    "header": {
      "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
    }
  },
  "status": 401
}

需要加入权限

curl -s --user elastic:changeme "http://localhost:9200"|jq
{
  "name": "4vFr63A",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "kT3iHw6wQ4OEw5p8wkRQUw",
  "version": {
    "number": "5.0.0",
    "build_hash": "253032b",
    "build_date": "2016-10-26T04:37:51.531Z",
    "build_snapshot": false,
    "lucene_version": "6.2.0"
  },
  "tagline": "You Know, for Search"
}

关闭 x-pack 中的功能

设置 /etc/elasticsearch.yml

# --------------------------------- xpack ----------------------------------
xpack.security.enabled: false
xpack.monitoring.enabled: false
xpack.graph.enabled: false
xpack.watcher.enabled: false

设置

Elasticsearch 配置文件位置

Elasticsearch 有两个配置:

  • elasticsearch.yml
  • log4j2.properties

文件放在 /etc/elasticsearch 目录下。yaml 格式

RPM 系统级设置文件 /etc/sysconfig/elasticsearch 可在内部设置环境变量。

重要的 Elasticsearch 设置项

path.data and path.logs
path.data: 
    - /path/to/data1
    - /path/to/data2
path.logs: /path/to/log
cluster.name

服务器节点只能加入到同一个集群名称的集群内。默认集群名称是elasticsearch,请确认修改该名称,防止使用默认集群名称造成错误的节点加入其中。

cluster.name: dzhyun-log-collect
node.name

某个集群节点名称,如果不填,Elasticsearch 将用uuid产生并取前7个字符作为节点名。填写的好处是能够直观了解是哪个节点。

node.name: es-node-1

或者用系统环境变量:

node.name: ${HOSTNAME}
bootstrap.memory_lock

这是一个极其重要的设置项关乎于你的节点健康状况,将不让 JVM 发生内存数据交换出磁盘。

bootstrap.memory_lock: true

要使之生效,首先需要更改服务器系统设定。

network.host

如果不设置该选项,默认使用本地回环地址(127.0.0.1 和 [::1])。

为了跟其他节点通信和形成集群,节点需要有一个具体的IP地址。

network.host: 10.15.144.105

进阶设置说明,可参考官网 network.host

discovery.zen.ping.unicast.hosts

无需任何网络设置即可开箱即用。Elasticsearch 会绑定本地回环地址并扫描 9300 - 9305端口,尝试连接同一台服务器上的其他节点。这将提供自动建立集群的体验而无需任何设置。

当集群需要分布在不同服务器上时,就需要提供服务器地址列表。

discovery.zen.ping.unicast.hosts: 
    - 192.168.0.105:9300
    - 192.168.0.106
    - seeds.domain.com

默认端口 9300 可不填。可以是域名

discovery.zen.minimum_master_nodes

为避免数据丢失,设置 discovery.zen.minimum_master_nodes 也至关重要。

主节点选举最少节点数 (合格的主节点数/2) + 1。如果设置3台集群,最少需要 3/2+1 = 2台主节点

discovery.zen.minimum_master_nodes: 2

Elasticsearch 启动时检查项

检查 Java 堆大小

初始堆大小 = 最大堆大小

-Xms16g -Xmx16g

检查文件描述符

Elasticsearch 会打开非常多的文件句柄,例如 每个分片上的segments,以及其他文件。

临时更改系统设置: ulimit -n 65536

永久更改系统设置:/etc/security/limits.conf

检查内存锁定

JVM 的垃圾收集器会访问堆栈上的每一页。如果任何一页被交换出了内存到磁盘,它们必须被重新交换到内存中。Elasticsearch 频繁的服务请求会造成大量的磁盘垃圾碎片。有若干中方法配置系统来禁止磁盘交换。其中一个办法是通过mlockall锁定 JVM 堆栈内存。这是通过设置 Elasticsearch 的配置 bootstrap.memory_lock。但是要使 mlockall 生效,需要设置服务器参数。

设置系统内存限制的几种方式:

  • 临时设置 ulimit -l unlimited
  • 永久设置 设置 /etc/security/limits.conf memlock unlimited
  • systemd 要设置 LimitMEMLOCK=infinity
检查最大线程数

Elasticsearch 会将执行的请求分拆成不同的阶段,并将这些阶段转换到不同的线程池去执行。

Elasticsearch 需要使用至少 2048 线程数。

/etc/security/limit.conf文件中的nproc设置成至少该数值。

检查最大虚拟内存

Elasticsearch 和 Lucene 使用 mmap 管理索引地址空间,mmap 脱离 JVM 堆栈并保存着具体的索引数据,但是在内存中又可以很快被访问到。需要无限制的虚拟内存。

/etc/security/limit.conf文件中的 as设置成unlimited

检查最大map count

接上一条提到的,Elasticsearch 也需要创建大量的内存映射区域的能力。该项检查将检查linux 内核是否允许处理至少262144内存映射区域(只针对linux)。

sysctl vm.max_map_count=262144 至少设置 262144

检查 Client JVM

这个jvm.options 里面已经设置好了, 服务器模式。

检查是否使用了序列化垃圾收集器

检查垃圾收集器。序列化垃圾收集器仅适用于单核的CPU以及极小堆。使用它会影响性能。这个在 jvm.options 内也设置好了。要使用 CMS Collector

检查 OnError 和 OnOutOfMemoryError

JVM 设置项 允许设置 OnError 和 OnOutOfMemoryError 过滤器,去触发任意脚本。

但是 Elasticsearch 系统会调用 seccomp 过滤器且,该过滤器禁止 forking

Seccomp(secure computing)是Linux kernel (自从2.6.23版本之后)所支持的一种简洁的sandboxing机制。它能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system calls),即read(), write(), exit()和sigreturn(),否则进程便会被终止。

因此 OnError 和 OnOutOfMemoryError 过滤器与之不兼容。

instead, upgrade to Java 8u92 and use the JVM flag ExitOnOutOfMemoryError. While this does not have the full capabilities of OnError nor OnOutOfMemoryError, arbitrary forking will not be supported with seccomp enabled.

重要的系统设置项

results matching ""

    No results matching ""