Elasticsearch集群(cluster)由一个或多个拥有相同cluster.name配置的节点(实例)组成, 它们共同承担数据和负载的压力。当有新节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。节点有主节点和非主节点之分,主节点负责管理集群范围内所有的变更。
分片(_shards)是数据的容器,被分配到集群内的各个节点里。分片其实就是Lucene实例,所以一个分片就是一个完整的搜索引擎。分片有主分片和副本分片之分,索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。实际上最大数据量还跟硬件、文档的大小和复杂程度、索引和查询文档的方式以及期望的响应时长等有关。主分片的数量在创建时被确定并且不能改变,因为每个文档存储在哪个主分片上是根据公式:shard = hash(routing) % number_of_primary_shards确定的,如果number_of_primary_shards发生了变化,原本保存的文档在主分片的位置就错误了。副本分片只是主分片的拷贝, 作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
elasticsearch.yml配置说明如下:
配置项 | 说明 |
---|---|
cluster.name | 集群名称 |
node.name | 节点名称 |
node.master | 是否是主节点。es默认集群中的第一台机器为主节点,如果这台机挂了就会重新选主节点 |
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 | 是否锁住内存,因为当jvm开始swapping时es的效率 会降低,所以要保证它不swap |
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 | 数据恢复时限制的带宽,单位mb,默认为0,即无限制 |
indices.recovery.concurrent_streams | 限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5 |
discovery.zen.minimum_master_nodes | 有主节点资格的节点个数,默认为1 |
discovery.zen.ping.timeout | 自动发现其它节点时ping连接超时时间,默认为3秒 |
discovery.zen.ping.multicast.enabled | 是否打开多播发现节点,默认是true |
discovery.zen.ping.unicast.hosts | 设置主节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 |
action.auto_create_index | 是否自动创建索引 |
action.destructive_requires_name | 是否禁止使用_all和通配符删除索引 |
script.groovy.sandbox.enabled | 是否启用脚本 |
修改配置有两种方式:
1、持久性修改,使用关键字:persistent,集群重启后不失效;
2、临时性修改,使用关键字:transient,集群重启后就会失效;
PUT http://$user:$passwd@$host:$port/_cluster/settings
{
"persistent" : {
配置名 : 值
},
"transient" : {
配置名 : 值
}
}
常用API:
1、查看集群信息:
GET http://$user:$passwd@$host:$port/
2、查看集群健康信息:
GET http://$user:$passwd@$host:$port/_cluster/health
3、查看集群状态:
GET http://$user:$passwd@$host:$port/_cluster/state
4、查看集群下所有索引:
GET http://$user:$passwd@$host:$port/_cat/indices
5、查看集群下已安装的插件:
GET http://$user:$passwd@$host:$port/_cat/plugins
更多API请参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/cluster.html