Elasticsearch简介
- ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene
- Elastic Stack生态(简称ELK Stack,包括 Elasticsearch、Kibana、Beats 和 Logstash)。Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。
ElasticSearch环境搭建
- ElasticSearch下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.zip
- 服务器环境
IP地址 | 模式 | 环境 |
---|---|---|
192.168.102.128 | 单机 | Java1.8开发环境 |
- 配置安装Elasticsearch环境
1.获取Elasticsearch安装包并解压
#切换安装路径
cd /usr/local/src/
#获取安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.zip
#使用unzip命令解压
unzip elasticsearch-5.6.16.zip
# 重命名文件名
mv elasticsearch-5.6.16 elasticsearch
2.配置Elasticsearch环境
#打开配置文件
vi /etc/profile
#增加配置信息
export ELASTICSEARCH_HOME=/srv/elasticsearch
export PATH=$ELASTICSEARCH_HOME/bin:$PATH
- Elasticsearch目录介绍
文件名 | 作用 |
---|---|
bin | 启动脚本命令 |
config | elasticsearch.yml配置文件,虚拟机配置文件,日志配置文件 |
lib | 依赖jar包 |
modules | 模块目录 |
plugins | 第三方插件安装目录 |
- 启动Elasticsearch服务
#启动Elasticsearch服务
elasticsearch
[2020-09-22T02:17:22,855][INFO ][o.e.n.Node ] [] initializing ...
[2020-09-22T02:17:23,012][INFO ][o.e.e.NodeEnvironment ] [3WPRtG6] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [35.2gb], net total_space [36.9gb], spins? [unknown], types [rootfs]
[2020-09-22T02:17:23,013][INFO ][o.e.e.NodeEnvironment ] [3WPRtG6] heap size [1.9gb], compressed ordinary object pointers [true]
[2020-09-22T02:17:23,014][INFO ][o.e.n.Node ] node name [3WPRtG6] derived from node ID [3WPRtG6tTruw6R1CnBb-_g]; set [node.name] to override
[2020-09-22T02:17:23,014][INFO ][o.e.n.Node ] version[5.6.16], pid[2591], build[3a740d1/2019-03-13T15:33:36.565Z], OS[Linux/3.10.0-1127.el7.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_131/25.131-b11]
[2020-09-22T02:17:23,015][INFO ][o.e.n.Node ] JVM arguments [-Xms2g, -Xmx2g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Dlog4j.skipJansi=true, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/srv/elasticsearch]
[2020-09-22T02:17:24,697][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [aggs-matrix-stats]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [ingest-common]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [lang-expression]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [lang-groovy]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [lang-mustache]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [lang-painless]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [parent-join]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [percolator]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [reindex]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [transport-netty3]
[2020-09-22T02:17:24,698][INFO ][o.e.p.PluginsService ] [3WPRtG6] loaded module [transport-netty4]
[2020-09-22T02:17:24,699][INFO ][o.e.p.PluginsService ] [3WPRtG6] no plugins loaded
[2020-09-22T02:17:28,053][INFO ][o.e.d.DiscoveryModule ] [3WPRtG6] using discovery type [zen]
[2020-09-22T02:17:28,679][INFO ][o.e.n.Node ] initialized
[2020-09-22T02:17:28,679][INFO ][o.e.n.Node ] [3WPRtG6] starting ...
[2020-09-22T02:17:28,846][INFO ][o.e.t.TransportService ] [3WPRtG6] publish_address {127.0.0.1:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300}
[2020-09-22T02:17:28,858][WARN ][o.e.b.BootstrapChecks ] [3WPRtG6] max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2020-09-22T02:17:31,906][INFO ][o.e.c.s.ClusterService ] [3WPRtG6] new_master {3WPRtG6}{3WPRtG6tTruw6R1CnBb-_g}{mxxL3tJXTuq3lxUcNdmgcg}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)
[2020-09-22T02:17:31,946][INFO ][o.e.g.GatewayService ] [3WPRtG6] recovered [0] indices into cluster_state
[2020-09-22T02:17:31,949][INFO ][o.e.h.n.Netty4HttpServerTransport] [3WPRtG6] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
[2020-09-22T02:17:31,949][INFO ][o.e.n.Node ] [3WPRtG6] started
5.解决警告信息
- max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
每个进程最大同时打开文件数太小,至少需要65536
#修改限制同时打开文件的配置文件
vi /etc/security/limits.conf
#把soft、hard注释去掉并修改限制数量为65536
* soft nofile 65536
* hard nofile 65536
- max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
虚拟机最大可用空间64M太小,至少需要256M的空间
#修改sysctl.conf文件,增加vm.max_map_count=262144
vim /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.max_map_count=262144
#执行sysctl命令让内核参数配置生效
sysctl -p
- Elasticsearch配置文件介绍
属性 | 作用 |
---|---|
cluster.name | 配置es的集群名称 |
node.name | 节点名,默认随机指定一个name列表中名字 |
node.master | 指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master |
node.data | 指定该节点是否存储索引数据,默认为true |
index.number_of_shards | 设置默认索引分片个数,默认为5片 |
index.number_of_replicas | 设置默认索引副本个数,默认为1个副本 |
path.conf | 设置配置文件的存储路径,默认是es根目录下的config文件夹 |
path.data | 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开 |
path.work | 设置临时文件的存储路径,默认是es根目录下的work文件夹 |
path.logs | 设置日志文件的存储路径,默认是es根目录下的logs文件夹 |
path.plugins | 设置插件的存放路径,默认是es根目录下的plugins文件夹 |
bootstrap.mlockall | 设置为true来锁住内存。因为当jvm开始swapping时es的效率 会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。 同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过ulimit -l unlimited 命令 |
network.bind_host | 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0 |
network.publish_host | 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址 |
network.host | 这个参数是用来同时设置bind_host和publish_host上面两个参数 |
transport.tcp.port | 设置节点间交互的tcp端口,默认是9300 |
transport.tcp.compress | 设置是否压缩tcp传输时的数据,默认为false,不压缩 |
http.port | 设置对外服务的http端口,默认为9200 |
http.max_content_length | 设置内容的最大容量,默认100mb |
http.enabled | 是否使用http协议对外提供服务,默认为true,开启 |
gateway.type | gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器 |
gateway.recover_after_nodes | 设置集群中N个节点启动时进行数据恢复,默认为1 |
gateway.recover_after_time: | 设置初始化数据恢复进程的超时时间,默认是5分钟。 |
gateway.expected_nodes | 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。 |
cluster.routing.allocation.node_initial_primaries_recoveries | 初始化数据恢复时,并发恢复线程的个数,默认为4。 |
cluster.routing.allocation.node_concurrent_recoveries | 添加删除节点或负载均衡时并发恢复线程的个数,默认为4。 |
indices.recovery.max_size_per_sec | 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。 |
indices.recovery.concurrent_streams | 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。 |
discovery.zen.minimum_master_nodes | 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4) |
discovery.zen.ping.timeout | 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错 |
discovery.zen.ping.multicast.enabled | 设置是否打开多播发现节点,默认是true |
discovery.zen.ping.unicast.hosts | 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 |