Elasticsearch 监控和部署
Elasticsearch:
! [ https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/_cluster_health.html ]
【监控】
server command:
1.集群健康 :
a.health check --- command:GET _cluster/health
example:
{
"cluster_name": "elasticsearch_zach",
"status": "green",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 10,
"active_shards": 10,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
}
b.issue example:
command:GET _cluster/health?level=indices
{
"cluster_name": "elasticsearch_zach",
"status": "red",
"timed_out": false,
"number_of_nodes": 8,
"number_of_data_nodes": 8,
"active_primary_shards": 90,
"active_shards": 180,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 20
"indices": {
"v1": {
"status": "green",
"number_of_shards": 10,
"number_of_replicas": 1,
"active_primary_shards": 10,
"active_shards": 20,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
},
"v2": {
"status": "red", -----------issue
"number_of_shards": 10,
"number_of_replicas": 1,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 20 ----------issue
},
"v3": {
"status": "green",
"number_of_shards": 10,
"number_of_replicas": 1,
"active_primary_shards": 10,
"active_shards": 20,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
},
....
}
}
c.当构建单元和集成测试时,或者实现和 Elasticsearch 相关的自动化脚本时,
cluster-health API 还有另一个小技巧非常有用。你可以指定一个 wait_for_status 参数,
它只有在状态达标之后才会返回。比如:
command:GET _cluster/health?wait_for_status=green
2.单个节点统计:
a.GET _nodes/stats
在输出内容的开头,我们可以看到集群名称和我们的第一个节点:
{
"cluster_name": "elasticsearch_zach",
"nodes": {
"UNr6ZMf5Qk-YCPA_L18BOQ": {
"timestamp": 1408474151742,
"name": "Zach",
"transport_address": "inet[zacharys-air/192.168.1.131:9300]",
"host": "zacharys-air",
"ip": [
"inet[zacharys-air/192.168.1.131:9300]",
"NONE"
],
b.索引
c.操作系统和进程部分
CPU/负载/内存使用率/Swap 使用率/打开的文件描述符
d.线程池
e.文件系统和网络部分
f.断路器
3.集群统计
GET _cluster/stats
4.索引统计:
GET my_index/_stats
GET my_index,another_index/_stats
GET _all/_stats
统计 my_index 索引。
使用逗号分隔索引名可以请求多个索引统计值。
使用特定的 _all 可以请求全部索引的统计值
5.等待中任务:
GET _cluster/pending_tasks
6.cat API
a.GET /_cat
eg:GET /_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
b.要启用表头,添加 ?v 参数即可:
GET /_cat/health?v
epoch time cluster status node.total node.data shards pri relo init
1408[..] 12[..] el[..] 1 1 114 114 0 0 114
unassign
【部署】
1.硬件/内存/CPU/硬盘/网络
2.Java虚拟机
3.Transport Client (传输客户端) 与 Node Client (节点客户端)
4.配置管理
elasticsearch.yml:
a.集群/节点
cluster.name: elasticsearch_production
node.name: elasticsearch_005_data
b.插件、日志以及你最重要的数据路径:
path.data: /path/to/data1,/path/to/data2
# Path to log files:
path.logs: /path/to/logs
# Path to where plugins are installed:
path.plugins: /path/to/plugins
c.最小主节点数:
minimum_master_nodes
eg:discovery.zen.minimum_master_nodes: 2
d.集群恢复方面设置:
keywords example:
gateway.recover_after_nodes: 8
gateway.expected_nodes: 10
gateway.recover_after_time: 5m
eg:
这意味着 Elasticsearch 会采取如下操作:
等待集群至少存在 8 个节点
等待 5 分钟,或者10 个节点上线后,才进行数据恢复,这取决于哪个条件先达到。
e.单播代替组播:
#discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
5.[red]不要触碰的配置:
a.垃圾回收器
b.线程池
6.堆内存:大小(小于32GB)和交换
a.设置:
(1)指定 ES_HEAP_SIZE 环境变量或者用下面的命令设置它:export ES_HEAP_SIZE=10g
(2)此外,你也可以通过命令行参数的形式,在程序启动的时候把内存大小传递给它,
如果你觉得这样更简单的话:./bin/elasticsearch -Xmx10g -Xms10g
确保堆内存最小值( Xms )与最大值( Xmx )的大小是相同的,
防止程序在运行时改变堆内存大小, 这是一个很耗系统资源的过程。
b.内存的(少于)一半给 Lucene
Lucene 被设计为可以利用操作系统底层机制来缓存内存数据结构。
标准的建议是把 50% 的可用内存作为 Elasticsearch 的堆内存.
c.性能优化:
禁用swapping:
1.临时:sudo swapoff -a
2.需要永久禁用,你可能需要修改 /etc/fstab 文件,这要参考你的操作系统相关文档。
3.降低 swappiness 的值:
对于大部分Linux操作系统,可以在 sysctl 中这样配置:
vm.swappiness = 1
4.需要打开配置文件中的 mlockall 开关。 它的作用就是允许 JVM 锁住内存,
禁止操作系统交换出去。在你的 elasticsearch.yml 文件中,设置如下:
bootstrap.mlockall: true
7.文件描述符和 MMap
a.GET /_nodes/process
{
"cluster_name": "elasticsearch__zach",
"nodes": {
"TGn9iO2_QQKb0kavcLbnDw": {
"name": "Zach",
"transport_address": "inet[/192.168.1.131:9300]",
"host": "zacharys-air",
"ip": "192.168.1.131",
"version": "2.0.0-SNAPSHOT",
"build": "612f461",
"http_address": "inet[/192.168.1.131:9200]",
"process": {
"refresh_interval_in_millis": 1000,
"id": 19808,
"max_file_descriptors": 64000, --------【显示 Elasticsearch 进程可以访问的可用文件描述符数量】
"mlockall": true
}
}
}
}
b.Elasticsearch 对各种文件混合使用了 NioFs( 注:非阻塞文件系统)和
MMapFs ( 注:内存映射文件系统)。请确保你配置的最大映射数量,
以便有足够的虚拟内存可用于 mmapped 文件。这可以暂时设置:
sysctl -w vm.max_map_count=262144
或者你可以在 /etc/sysctl.conf 通过修改 vm.max_map_count 永久设置它。
【部署后】
1.动态变更设置
eg:
PUT /_cluster/settings
{
"persistent" : {
"discovery.zen.minimum_master_nodes" : --这个永久设置会在全集群重启时存活下来
},
"transient" : {
"indices.store.throttle.max_bytes_per_sec" : "50mb" --这个临时设置会在第一次全集群重启后被移除。
}
}
2.日志记录:
a.Elasticsearch 会输出很多日志,都放在 ES_HOME/logs 目录下
b.我们调高节点发现的日志记录级别:
PUT /_cluster/settings
{
"transient" : {
"logger.discovery" : "DEBUG"
}
}
c.慢日志:
PUT /my_index/_settings
{
"index.search.slowlog.threshold.query.warn" : "10s", 查询慢于 10 秒输出一个 WARN 日志。
"index.search.slowlog.threshold.fetch.debug": "500ms", 获取慢于 500 毫秒输出一个 DEBUG 日志
"index.indexing.slowlog.threshold.index.info": "5s" 索引慢于 5 秒输出一个 INFO 日志。
}
PUT /_cluster/settings
{
"transient" : {
"logger.index.search.slowlog" : "DEBUG", 设置搜索慢日志为 DEBUG 级别。
"logger.index.indexing.slowlog" : "WARN" 设置索引慢日志为 WARN 级别。
}
}
d.索引性能技巧:
(1)科学的测试性能
(2)使用批量请求并调整其大小
(3)存储
(4)段和合并
PUT /_cluster/settings
{
"persistent" : {
"indices.store.throttle.max_bytes_per_sec" : "100mb"
}
}
PUT /_cluster/settings
{
"transient" : {
"indices.store.throttle.type" : "none" 设置限流类型为 none 彻底关闭合并限流。等你完成了导入,记得改回 merge 重新打开限流。
}
}
如果你使用的是机械磁盘而非 SSD,你需要添加下面这个配置到你的 elasticsearch.yml 里:
index.merge.scheduler.max_thread_count: 1
(5)
其他
最后,还有一些其他值得考虑的东西需要记住:
如果你的搜索结果不需要近实时的准确度,考虑把每个索引的 index.refresh_interval 改到 30s 。如果你是在做大批量导入,导入期间你可以通过设置这个值为 -1 关掉刷新。别忘记在完工的时候重新开启它。
如果你在做大批量导入,考虑通过设置 index.number_of_replicas: 0关闭副本。文档在复制的时候,整个文档内容都被发往副本节点,然后逐字的把索引过程重复一遍。这意味着每个副本也会执行分析、索引以及可能的合并过程。
相反,如果你的索引是零副本,然后在写入完成后再开启副本,恢复过程本质上只是一个字节到字节的网络传输。相比重复索引过程,这个算是相当高效的了。
如果你没有给每个文档自带 ID,使用 Elasticsearch 的自动 ID 功能。 这个为避免版本查找做了优化,因为自动生成的 ID 是唯一的。
如果你在使用自己的 ID,尝试使用一种 Lucene 友好的 ID。包括零填充序列 ID、UUID-1 和纳秒;这些 ID 都是有一致的,压缩良好的序列模式。相反的,像 UUID-4 这样的 ID,本质上是随机的,压缩比很低,会明显拖慢 Lucene。
f.推迟分片分配
修改参数 delayed_timeout ,默认等待时间可以全局设置也可以在索引级别进行修改:
eg:PUT /_all/_settings 通过使用 _all 索引名,我们可以为集群里面的所有的索引使用这个参数
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m" 默认时间被修改成了 5 分钟
}
}
g.滚动重启
可能的话,停止索引新的数据。虽然不是每次都能真的做到,但是这一步可以帮助提高恢复速度。
禁止分片分配。这一步阻止 Elasticsearch 再平衡缺失的分片,直到你告诉它可以进行了。如果你知道维护窗口会很短,这个主意棒极了。你可以像下面这样禁止分配:
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.enable" : "none"
}
}
关闭单个节点。
执行维护/升级。
重启节点,然后确认它加入到集群了。
用如下命令重启分片分配:
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.enable" : "all"
}
}
分片再平衡会花一些时间。一直等到集群变成 绿色 状态后再继续。 to status green before continuing.
重复第 2 到 6 步操作剩余节点。
到这步你可以安全的恢复索引了(如果你之前停止了的话),不过等待集群完全均衡后再恢复索引,也会有助于提高处理速度。
h.备份集群: (https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/backing-up-your-cluster.html)
使用 snapshot API
创建仓库:
PUT _snapshot/my_backup 给我们的仓库取一个名字,在本例它叫 my_backup 。
{
"type": "fs", 我们指定仓库的类型应该是一个共享文件系统。
"settings": {
"location": "/mount/backups/my_backup" 最后,我们提供一个已挂载的设备作为目的地址。
}
}
快照所有打开的索引
快照指定索引
列出快照相关的信息
删除快照
监控快照进度
取消一个快照
i.从快照恢复 (https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/_restoring_from_a_snapshot.html#_restoring_from_a_snapshot)
Elasticsearch 监控和部署的更多相关文章
- Elasticsearch 监控
导语 Elasticsearch(文中简称ES)是分布式全文搜索引擎,产品提供高可用.易扩展以及近实时的搜索能力,广泛应用于数据存储.搜索和实时分析.很多服务的可用性对ES重度依赖.因此,保障ES自身 ...
- Linux下smokeping网络监控环境部署记录
smokeping是一款监控网络状态和稳定性的开源软件(它是rrdtool的作者开发的),通过它可以监控到公司IDC的网络状况,如延时,丢包率,是否BGP多线等:smokeping会向目标设备和系统发 ...
- Zabbix监控系统部署:基本功能测试
1. 概述2. 登陆2.1 登陆账号密码2.1 设置中文语言环境3. 创建用户3.1 用户创建入口3.2 添加用户信息3.3 用户报警媒介3.4 用户权限4. 创建监控主机4.1 添加一台监控主机4. ...
- Zabbix监控系统部署:前端初始化
1. 概述 在上一篇博客<Zabbix监控系统部署:源码安装.md>中,主要进行了zabbix最新版的源码编译安装. (博客园地址:https://www.cnblogs.com/liwa ...
- Zabbix监控系统部署:源码安装
1. 概述1.1 基础环境2. 部署过程2.1 创建用户组2.2 下载源码解压编译安装2.2.1 下载源码解压2.2.2 YUM安装依赖环境2.2.3 编译安装最新版curl2.2.4 更新GNU构建 ...
- Nagios监控系统部署(源码)
1. 概述2. 部署Nagios2.1 创建Nagios用户组2.2 下载Nagios和Nagios-plugin源码2.3 编译安装3. 部署Nagios-plugin3.1 编译安装nagios- ...
- Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)
一. ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...
- 网站监控系统安装部署(zabbix,nagios)
zabbix分布式监控系统安装部署 官方网站链接 https://www.zabbix.com/documentation/2.0/manual/installation 安装环境说明 参考地址 ht ...
- Centos 7.2天兔(Lepus 3.8)数据库监控系统部署
天兔(Lepus 3.8)数据库监控系统部署 转载自:https://blog.csdn.net/m0_38039437/article/details/79613260 一.安装LAMP基础环境 首 ...
随机推荐
- Do not mutate vuex store state outside mutation handlers.
组件代码: selectItem(item,index) { this.selectPlay({ list: this.songs, index }) }, ...mapActions([ 'sele ...
- 搭建Hadoop2.6.0+Eclipse开发调试环境
上一篇在win7虚拟机下搭建了hadoop2.6.0伪分布式环境.为了开发调试方便,本文介绍在eclipse下搭建开发环境,连接和提交任务到hadoop集群. 1. 环境 Eclipse版本Luna ...
- IOS 浅谈闭包block的使用
前言:对于ios初学者,block通常用于逆向传值,遍历等,会使用,但是可能心虚,会感觉block很神秘,那么下面就一起来揭开它的面纱吧. ps: 下面重点讲叙了闭包的概念,常用的语法,以及访问变量, ...
- UICollectionViewCell的设置间距
UICollectionViewCell的设置间距 #pragma mark - UICollectionView 大小(宽高,平均一行三个) - (CGSize)collectionView:(UI ...
- iOS 通用缓存:HanekeSwift
iOS 通用缓存:HanekeSwift Haneke 是个采用 Swift 编写的轻量级 iOS 通用缓存.示例: 初始化一个数据缓存: let cache = Cache<NSData> ...
- jwplayer 参数记录
jwplayer().getPosition()://播放了多少秒 jwplayer('playerdiv').play(); || jwplayer(0).play(true/false); // ...
- Plupload+easyui+springmvc实现批量上传
demo下载(java项目):http://pan.baidu.com/s/1ntmoGEd 可兼容所有常用浏览器,当前版本为V1.5.4,如果不兼容,肯定是你没有调试好啊 1.jsp代码 <% ...
- 一次Redis 的性能测试和问题 [问题已经自己解决,见文章最后]
[我的问题]:请教个问题,我在本机搭建linux虚拟机+redis 3.2.6,然后在本机物理机上面测试虚拟机的redis性能,如下VM配置参数做测试,redis 的性能好像不算太好,问题待排查的两点 ...
- Java中事务总结详解(精华)
1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...
- Hue联合(hdfs yarn hive) 后续......................
1.启动hdfs,yarn start-all.sh 2.启动hive $ bin/hive $ bin/hive --service metastore & $ bin/hive --ser ...