文章目录
1 简介
ElasticSearch具备以下特点:
- 分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心)
- Restful风格,一切API都遵循Rest原则,容易上手
- 近实时搜索,数据更新在ElasticSearch中几乎是完全同步的。
- 实时分析的分布式搜索引擎。ElasticSearch的索引可以拆成多个分片,每个分片可以有零个多个副本。集群中的每个数据节点都可以承载一个或多个分片,并且协调和处理各种操作;
- 高扩展性,可以扩展到上百台服务器,处理PB级别的结构化和非结构化数据。
- 可插拔插件支持,ElasticSearch支持多种插件,比如分词插件,同步插件,hadoop插件,可视化插件。
2 安装
2.1 Mac安装
需要java环境:如何安装java自行google。
-
下载
下载地址
-
解压即可
-
目录介绍
- bin:可执行命令文件
- config:配置文件目录
- data:数据你目录
- lib:相关资源目录,里面核心就是lucene的包
- plugins:插件目录
- logs:日志
-
修改jvm参数
打开config
目录下的jvm.options
文件,修改内容如下:
#-Xms1g 原先都是1g,如果你的电脑内存够大也就不用改了,嘿嘿
#-Xmx1g
# 改为下面的
-Xms128m
-Xmx256m
- 配置环境变量
sudo vi ~/.bash_profile
增加一下内容
# 换成自己的安装目录
export ES_HOME=/usr/local/soft/elasticsearch-7.2.0
export PATH=$PATH:$ES_HOME/bin
执行下面命令
source ~/.bash_profile
- 启动
➜ ~ elasticsearch
启动日志中:
publish_address {127.0.0.1:9200}
说明默认的端口号是9200
- 浏览器访问:127.0.0.1:9200
{
"name" : "wangyaoyaodeMacBook-Pro.local", # 主机名字
"cluster_name" : "elasticsearch", # 集群名字,默认elasticsearch,但是只部署了一个服务,说明elasticsearch自动就是集群,一个服务也是一个集群的概念
"cluster_uuid" : "PdNmH9_bSMGRrLKyAR-fwg",
"version" : { 版本信息
"number" : "7.2.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "508c38a",
"build_date" : "2019-06-20T15:54:18.811730Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
-
停止服务
ctrl+c
。elsasticSearch默认是前台运行,日志输出在标准输出(stdout) -
如何以守护线程运行
使用-d
参数,并且使用-p
参数将es的进程id记录在文件中,此时日志文件将在logs
目录中找到
elasticsearch -d -p pid
多一个pid
此时退出es:根据pid文件
pkill -F pid
或者直接使用kill
kill 58203
3 elasticSearch的配置
配置文件的位置,config目录下
- elasticsearch.yml : 配置elasticSearch
- jvm.options: 配置elasticSearch依赖的jvm信息
- log4j2.properties:elasticSearch的日志配置
3.1 elasticsearch.yml
属性名 | 说明 |
---|---|
cluster.name | 配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。 |
node.name | 节点名,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理 |
path.conf | 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch |
path.data | 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开 |
path.logs | 设置日志文件的存储路径,默认是es根目录下的logs文件夹 |
path.plugins | 设置插件的存放路径,默认是es根目录下的plugins文件夹 |
bootstrap.memory_lock | 设置为true可以锁住ES使用的内存,避免内存进行swap |
network.host | 设置bind_host和publish_host,设置为0.0.0.0允许外网访问 |
http.port | 设置对外服务的http端口,默认为9200。 |
transport.tcp.port | 集群结点之间通信端口 |
discovery.zen.ping.timeout | 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些 |
discovery.zen.minimum_master_nodes | 主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2 |
如果需要在配置文件中引用环境变量,则可以在配置文件中使用${key},引用环境变量
eg:
node.name: ${HOSTNAME}
3.2 jvm.options
elasticSearch中,很少需要修改jvm的参数。一般来说最可能更改的就是堆的大小。默认情况下,最小堆空间和最大的堆空间elasticSearch的都是1GB,刚刚在安装的时候已经介绍过了。
3.3 安全配置(待研究。。。)
elasticSearch中,有些设置信息是敏感需要保密的,单纯依赖文件系统的权限来保护这些信息是不够的,因此需要配置安全维度信息。
elasticSearch中提供了一个密钥库和相应的密钥库工具来管理密钥库中的设置。在对密钥库所做的所有修改,都必须重启es之后才会生效。
安全设置就像elasticsearch.yml
配置文件中的常规设置一样,需要在集群中的每个节点上指定。当前,所有的安全设置都是特定于节点的设置,每个节点都需要配置。
安全设置的常规操作有创建密钥库
,查看密钥库中的设置列表
,添加字符串设置
,添加文件设置
,删除密钥设置
和可重新加载的安全设置
等。
3.3.1 创建密钥库(elasticsearch.keystore)
想要创建elasticsearch.keystore,需要使用create
命令,如下所示:
elasticsearch-keystore create
将会创建elasticsearch.keystore
文件在config目录下
3.3.2 查看密钥库中的设置列表
elasticsearch-keystore list
3.3.3 添加字符串设置
如果需要设置敏感的字符串,比如云插件的身份凭证数据,可以使用add
命令添加,如下所示:
elasticsearch-keystore add the.setting.name.to.set
3.4 日志配置
elasticSearch使用log4j2来记录日志。
elasticSearch公开了三个属性,用户可以在配置文件中引用这些属性来确定日志文件的位置
- ${sys:es.logs.base_path}
- ${sys:es.logs.cluster_name}
- ${sys:es.logs.node_name}
比如配置文件(elasticsearch.yml)中的path.logs
设置为/var/log/elasticsearch
,cluster.name
设置为production
,那么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
3.4.1 介绍一下一些配置项含义
######## Server JSON ############################
appender.rolling.type = RollingFile # 配置RollingFile的appender属性
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json # 日志文件输出的位置和文件名字
appender.rolling.layout.type = ESJsonLayout # 使用json格式
appender.rolling.layout.type_name = server # type_name填充ESJsonLayout的类型字段的标志,该字段可以让我们在解析不同类型的日志时更加简单
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz # 将日志滚动输出到${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-yyyy-MM-dd-i.json文件。日志文件会被压缩处理,i递增。
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy # 使用基于时间戳的新增日志滚动策略
appender.rolling.policies.time.interval = 1 # 按天滚动新增日志
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy # 按照日志大小策略来滚动新增日志一次
appender.rolling.policies.size.size = 128MB # 每生成128m的日志文件,就滚动新增日志一次
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete # 每次新增时执行删除日志文件动作
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName # 仅当文件名字匹配时才删除文件
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize # 只有当日志文件目录下积累了较多文件时才删除
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB # 压缩日志文件的条件是日志文件大小达到2GB
################################################
3.4.2 修改日志级别的四种方式
- 命令行,启动时候通过
-e
指定
elasticsearch -e logger.org.elasticsearch.transport=trace
适用场景:
当单节点上临时调试一个问题的时候比较适合。
- elasticsearch.yml 配置
logger.org.elasticsearch.transport: trace
- 通过集群配置
PUT /_cluster/settings
{
"transient":{
"logger.org.elasticsearch.transport": "trace"
}
}
适用于调整整个集群的配置
- 通过
log4j2.properties
logger.transport.name=org.elasticsearch.transport
logger..transport.level=trace
3.4.3 deprecation 日志
除了常规日志记录外,es还允许用户启用不推荐操作的日志记录。如果用户需要迁移某些功能,则可以提前确定这部分属性的配置
默认情况下,启动警告级别日志后,所有禁用日志均可输出到控制台和日志文件中。具体配置如下:
logger..deprecation.level=warn
配置生效后,将在日志目录中创建每日滚动deprecation日志文件。用户需要定期检查此文件,尤其是准备升级到新的主要版本时。
默认日志记录配置已将取消deprecation日志滚动策略设置为1GB后滚动和压缩。并且最多保留5个日志文件(四个滚动日志和活动日志)
用户可以在log4j2.properties
中通过取消deprecation日志级别设置为error来禁用他