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 监控和部署的更多相关文章

  1. Elasticsearch 监控

    导语 Elasticsearch(文中简称ES)是分布式全文搜索引擎,产品提供高可用.易扩展以及近实时的搜索能力,广泛应用于数据存储.搜索和实时分析.很多服务的可用性对ES重度依赖.因此,保障ES自身 ...

  2. Linux下smokeping网络监控环境部署记录

    smokeping是一款监控网络状态和稳定性的开源软件(它是rrdtool的作者开发的),通过它可以监控到公司IDC的网络状况,如延时,丢包率,是否BGP多线等:smokeping会向目标设备和系统发 ...

  3. Zabbix监控系统部署:基本功能测试

    1. 概述2. 登陆2.1 登陆账号密码2.1 设置中文语言环境3. 创建用户3.1 用户创建入口3.2 添加用户信息3.3 用户报警媒介3.4 用户权限4. 创建监控主机4.1 添加一台监控主机4. ...

  4. Zabbix监控系统部署:前端初始化

    1. 概述 在上一篇博客<Zabbix监控系统部署:源码安装.md>中,主要进行了zabbix最新版的源码编译安装. (博客园地址:https://www.cnblogs.com/liwa ...

  5. Zabbix监控系统部署:源码安装

    1. 概述1.1 基础环境2. 部署过程2.1 创建用户组2.2 下载源码解压编译安装2.2.1 下载源码解压2.2.2 YUM安装依赖环境2.2.3 编译安装最新版curl2.2.4 更新GNU构建 ...

  6. Nagios监控系统部署(源码)

    1. 概述2. 部署Nagios2.1 创建Nagios用户组2.2 下载Nagios和Nagios-plugin源码2.3 编译安装3. 部署Nagios-plugin3.1 编译安装nagios- ...

  7. Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)

    一.  ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...

  8. 网站监控系统安装部署(zabbix,nagios)

    zabbix分布式监控系统安装部署 官方网站链接 https://www.zabbix.com/documentation/2.0/manual/installation 安装环境说明 参考地址 ht ...

  9. Centos 7.2天兔(Lepus 3.8)数据库监控系统部署

    天兔(Lepus 3.8)数据库监控系统部署 转载自:https://blog.csdn.net/m0_38039437/article/details/79613260 一.安装LAMP基础环境 首 ...

随机推荐

  1. npm ERR! code ENOENT (未找到文件 error no entry)

    问题: ENOENT一般是没找到文件或路径,包括因为权限问题没找到的情况 解决: 我这个是 目录选择错了 其他:

  2. Linux常用文档操作命令--1

    1.查看目录下的文档 a) ls(list):查看目录下的所有文档或者文档的信息. 命令行:ls [-a][-A] [-f][-F][-h][-l][-r][-R][-S][-t] 目录名称  //注 ...

  3. 汇编:采用址表的方法编写程序实现C程序的switch功能

    //待实现的C程序 1 void main() { ; -) { : printf("excellence"); break; : printf("good") ...

  4. webBrowser 应用编程函数总结

    /*============================说明部分================================= 实现一下函数需包含头文件 #include <Winine ...

  5. PHP+AJAX开发幸运大转盘抽奖

    PHP+AJAX开发幸运大转盘抽奖,通过奖品库存.中奖次数来计算中奖概率 奖品设置 $prizes = array( 0 => array( "id" => 0, // ...

  6. Hadoop(14)-MapReduce框架原理-切片机制

    1.FileInputFormat切片机制 切片机制 比如一个文件夹下有5个小文件,切片时会切5个片,而不是一个片 案例分析 2.FileInputFormat切片大小的参数配置 源码中计算切片大小的 ...

  7. C语言常用关键语法精华总结

    1.关于typedef的用法总结 2.typedef struct的用法 3.typedef函数指针用法 4.数组指针(数组类型的指针)与指针数组 5.真正明白c语言二级指针 6.C语言for循环(及 ...

  8. PAT (Basic Level) Practice (中文)1002

    1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1 ...

  9. (译)JavaScript 中的正则表达式(RegEx)实操——快速掌握正则表达式,伴有随手可练的例子————(翻译未完待续)

    (原文:https://blog.bitsrc.io/a-beginners-guide-to-regular-expressions-regex-in-javascript-9c58feb27eb4 ...

  10. [Cracking the Coding Interview] 4.5 Validate BST

    Implement a function to check if a binary tree is a binary search tree. 这道题很经典,让我们判断一棵树是不是二叉查找树.但是首先 ...