Elasticsearch常用接口和配置文件详解
查询集群健康状态
curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty
执行结果如下:
{ "cluster_name" : "BigData", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 1, "active_primary_shards" : 355, "active_shards" : 355, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0 }
在Elasticsearch集群中可以监控统计很多信息,但是只有一个是最重要的:
集群健康(cluster health)。
集群健康有三种状态:green、yellow或red。
status字段提供一个综合的指标来表示集群的的服务状况。
三种颜色各自的含义:
| 颜色 | 含义 |
| green | 所有主要分片和复制分片都可用 |
| yellow | 所有主要分片可用,但不是所有复制分片都可用 |
| red | 不是所有的主要分片都可用,此状态集群不可用 |
查询集群中存活的所有节点
curl -XGET 'http://localhost:9200/_cat/nodes'
执行结果如下:
host ip heap.percent ram.percent load node.role master name des1 10.0.2.69 37 34 0.46 d - des1 ces1 10.0.2.68 24 53 0.01 - - ces1 mes1 10.0.2.67 4 69 1.61 - * mes1
node.role = "-" master = "m" 代表它是主(master)节点,而node.role = "-" master = "*"代表的是正在使用的master节点。
node.role = "d" master = "-" 代表它是数据(data)节点。
node.role = "-" master = "-" 代表它是客户端(client)节点。
2. 当我们启动Elasticsearch的实例,就会启动至少一个节点。相同集群名的多个节点的连接就组成了一个集群,在默认情况下,集群中的每个节点都可以处理http请求,和集群节点的数据传输,集群中所有的节点都知道集群中其他所有的节点,可以将客户端请求转发到适当的节点。节点有以下类型:
- **主(master)节点**:在一个节点上当node.master设置为True(默认)的时候,它有资格被选作为主节点,控制整个集群。
- **数据(data)节点**:在一个节点上node.data设置为True(默认)的时候。该节点保存数据和执行数据相关的操作,如增删改查,搜索,和聚合。
- **客户端节点**:当一个节点的node.master和node.data都设置为false的时候,它既不能保持数据也不能成为主节点,该节点可以作为客户端节点,可以响应用户的情况,并把相关操作发送到其他节点。
查看集群中所有的索引
curl -XGET 'http://localhost:9200/_cat/indices?v'
这个请求会列举出集群中所有索引的信息,信息包括:
依次从左向右,索引健康状态、索引名称、主分片数、副本数、总文档数、删除文档数、总存储空间、主分片存储空间。
health status index pri rep docs.count docs.deleted store.size pri.store.size green open topic_20161117 8 1 698848 0 317.7mb 158.8mb green open sdk_20161117 8 1 165861 0 129.5mb 64.7mb
查看集群中所有分片信息
curl -XGET '127.0.0.1:9200/_cat/shards'
执行结果如下 :
依次从左向右,索引名称、分片、分片的身份(p代表主分片,r代表副本)、分片状态、文档数、存储空间
index shard prirep state docs store ip node topic_20161202 2 p STARTED 24674 3.2mb 10.0.2.69 des1 topic_20161202 0 p STARTED 26653 3.4mb 10.0.2.69 des1 topic_20161202 3 p STARTED 23553 3mb 10.0.2.69 des1 topic_20161202 1 p STARTED 25546 3.3mb 10.0.2.69 des1 topic_20161202 4 p STARTED 24698 3.1mb 10.0.2.69 des1 sdk_20161203 4 p STARTED 0 144b 10.0.2.69 des1 sdk_20161203 0 p STARTED 0 144b 10.0.2.69 des1 sdk_20161203 3 p STARTED 0 144b 10.0.2.69 des1 sdk_20161203 1 p STARTED 0 144b 10.0.2.69 des1 sdk_20161203 2 p STARTED 0 144b 10.0.2.69 des1
集群中打开或关闭索引
返回true表示打开或关闭索引成功,返回error表示打开或关闭索引失败
# 打开索引 curl -XPOST '127.0.0.1:9200/topic_20161202/_open' # 关闭索引 curl -XPOST '127.0.0.1:9200/topic_20161202/_close'
删除索引
返回true表示索引删除成功,返回error表示索引删除失败
curl -XDELETE '127.0.0.1:9200/topic_20161202'
手动创建索引
curl -XPUT "127.0.0.1:9200/topic_20161202" -d '{ "settings": { "number_of_shards":5, "number_of_replicas":0 } }';
返回true表示创建索引成功,返回error表示创建索引失败
**`"number\_of\_shards":5`** 表示创建索引时指定的分片数,“5”表示指定5个分片
**`"number\_of\_replicas":0`** 表示创建索引时的副本数,“0”表示不设置副本
手动修改集群索引副本数
curl -XPUT '127.0.0.1:9200/agenttopic_20161206/_settings' -d '{ "number_of_replicas": 0}'
**`number\_of\_replicas:`** 指定需要修改的索引副本数
Elasticsearch手动进行索引分片的分配
1. 想要完全手动,必须先把`cluster.routing.allocation.disable_allocation`参数设置为true,禁止es进行自动索引分片分配,否则你从一节点把分片移到另外一个节点,那么另外一个节点的一个分片又会移到那个节点.
2. 一共有三种操作,分别为:移动(move),取消(cancel)和分配(allocate)。下面分别介绍这三种情况:
- **移动(move)**
把分片从一节点移动到另一个节点。可以指定索引名和分片号。
- **取消(cancel)**
取消分配一个分片。可以指定索引名和分片号。node参数可以指定在那个节点取消正在分配的分片。allow_primary参数支持取消分配主分片。取消(cancel)不常用就不在此解释了。
- **分配(allocate)**
分配一个未分配的分片到指定节点。可以指定索引名和分片号。node参数指定分配到那个节点。allow_primary参数可以强制分配主分片,不过这样可能导致数据丢失,不建议加此参数。
移动(move)具体命令:
curl -XPOST '127.0.0.1:9200/_cluster/reroute' -d '{ "commands" : [ { "move" : { "index" : "topic_20161115", "shard" : 0, "from_node" : "node1", "to_node" : "node2" } ] }'
分配(allocate)具体命令:
curl -XPOST '127.0.0.1:9200/_cluster/reroute' -d '{ "commands" : [ { "allocate" : { "index" : "topic_20161115", "shard" : 2, "node" : "des1", "allow_primary" : true} } ] }'
"index" : "topic_20161115" 指定要分配分片的索引名
"shard" : 2 指定要分配的分片,“2”表示要手动分配topic_20161115的第三个分片
"node" : "des1" 指定分配索引分片的的目标节点
"from_node" : "node1" 索引分片当前所在节点
"to_node" : "node2" 移动分片的目标节点
Elasticsearch配置文件详解
elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml。第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来记录日志的,所以logging.yml里的设置按普通log4j配置文件来设置就行了。
下面主要讲解下elasticsearch.yml这个文件中可配置的东西。
* cluster.name:elasticsearch 配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。 * node.name:”FranzKafka” 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。 * node.master:true 指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。 * node.data:true 指定该节点是否存储索引数据,默认为true。 * index.number_of_shards:5 设置默认索引分片个数,默认为5片。 * index.number_of_replicas:1 设置默认索引副本个数,默认为1个副本。 * path.conf:/path/to/conf 设置配置文件的存储路径,默认是es根目录下的config文件夹。 * path.data:/path/to/data 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例: * path.data:/path/to/data1,/path/to/data2 path.work:/path/to/work 设置临时文件的存储路径,默认是es根目录下的work文件夹。 * path.logs:/path/to/logs 设置日志文件的存储路径,默认是es根目录下的logs文件夹 * path.plugins:/path/to/plugins 设置插件的存放路径,默认是es根目录下的plugins文件夹 * bootstrap.mlockall:true 设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit-lunlimited`命令。 * network.bind_host:192.168.0.1 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。 * network.publish_host:192.168.0.1 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。 * network.host:192.168.0.1 这个参数是用来同时设置bind_host和publish_host上面两个参数。 * transport.tcp.port:9300 设置节点间交互的tcp端口,默认是9300。 * transport.tcp.compress:true 设置是否压缩tcp传输时的数据,默认为false,不压缩。 * http.port:9200 设置对外服务的http端口,默认为9200。 * http.max_content_length:100mb 设置内容的最大容量,默认100mb * http.enabled:false 是否使用http协议对外提供服务,默认为true,开启。 * gateway.type:local gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。 * gateway.recover_after_nodes:1 设置集群中N个节点启动时进行数据恢复,默认为1。 * gateway.recover_after_time:5m 设置初始化数据恢复进程的超时时间,默认是5分钟。 * gateway.expected_nodes:2 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。 * cluster.routing.allocation.node_initial_primaries_recoveries:4 初始化数据恢复时,并发恢复线程的个数,默认为4。 * cluster.routing.allocation.node_concurrent_recoveries:2 添加删除节点或负载均衡时并发恢复线程的个数,默认为4。 * indices.recovery.max_size_per_sec:0 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。 * indices.recovery.concurrent_streams:5 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。 * discovery.zen.minimum_master_nodes:1 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4) * discovery.zen.ping.timeout:3s 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。 * discovery.zen.ping.multicast.enabled:false 设置是否打开多播发现节点,默认是true。 * discovery.zen.ping.unicast.hosts: [“host1″,”host2:port”,”host3[portX-portY]”] 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
浙公网安备 33010602011771号