ES集群特点:
高可用:
什么是高可用?CAP 定理是分布式系统的基础,也是分布式系统的 3 个指标:
Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容错性)
那高可用(High Availability)是什么?高可用,简称 HA,是系统一种特征或者指标,通常是指,提供一定性能上的服务运行时间,高于平均正常时间段。反之,消除系统服务不可用的时间。
衡量系统是否满足高可用,就是当一台或者多台服务器宕机的时候,系统整体和服务依然正常可用。举个例子,一些知名的网站保证 4 个 9 以上的可用性,也就是可用性超过 99.99%。那 0.01% 就是所谓故障时间的百分比。
Elasticsearch 在高可用性上,体现如下两点:
服务可用性:允许部分节点停止服务,整体服务没有影响
数据可用性:允许部分节点丢失,最终不会丢失数据
可扩展:
Elasticsearch 可以横向扩展至数百(甚至数千)的服务器节点,同时可以处理PB级数据。Elasticsearch 为了可扩展性而生,由小规模集群增长为大规模集群的过程几乎完全自动化。
Elasticsearch 分布式特性
上面通过可扩展性,可以看出 Elasticsearch 分布式的好处明显:
存储可以水平扩容,水平空间换时间
部分节点停止服务,整个集群服务不受影响,照样正常提供服务
Elasticsearch 在后台自动完成了分布式相关工作,如下:
自动分配文档到不同分片或者多节点上
均衡分配分片到集群节点上,index 和 search 操作时进行负载均衡
复制每个分片,支持数据冗余,防止硬件故障数据丢失
集群扩容时,无缝整合新节点,并且重新分配分片
Elasticsearch 集群知识点如下:
不同集群通过名字区分,默认集群名称为 “elasticsearch”
集群名 cluster.name ,可以通过配置文件修改或者命令行 -E cluster.name=user-es-cluster 进行设置
一个集群由多个节点组成
es集群:由若干节点组成,cluster.name相同
master节点:集群中的一个节点会被选为master节点,它将负责管理集群范畴的变更,例如创建或删除索引,添加节点到集群或从集群删除节点。master节点无需参与文档层面的变更和搜索,这意味着仅有一个master节点并不会因流量增长而成为瓶颈。任意一个节点都可以成为master节点。
data节点:持有数据和倒排索引。默认情况下,每个节点都可以通过设定配置文件elasticsearch.yml中的node.data属性为 true(默认)成为数据节点。如果需要一个专门的主节点,应将其node.data属性设置为false。
Client节点:如果将node.master属性和node.data属性都设置为false,那么该节点就是一个客户端节点,扮演一个负载均衡的角色,将到来的请求路由到集群中的各个节点。
分片:
(1)单个节点由于物理机硬件限制,存储的文档是有限的,如果一个索引包含海量文档,则不能在单个节点存储。ES提供分 片机制,同一个索引可以存储在不同分片(数据容器)中,这些分片又可以存储在集群中不同节点上
(2)分片分为 主分片(primary shard) 以及从分片(replica shard)
(3)主分片与从分片关系:从分片只是主分片的一个副本,它用于提供数据的冗余副本
(4)从分片应用:在硬件故障时提供数据保护,同时服务于搜索和检索这种只读请求
(5)是否可变:索引中的主分片的数量在索引创建后就固定下来了,但是从分片的数量可以随时改变
(6)索引默认创建的分片:默认设置5个主分片和一组从分片(即每个主分片有一个从分片对应),但是从分片没有被启用(主从分片在同一个节点上没有意义),因此集群健康值显示为黄色(yellow)。
节点1
vi elasticsearch.yml
cluster.name: elasticsearch
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
node.max_local_storage_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.ping.unicast.hosts: ["172.28.2.1:9300", "172.28.2.2:9300"]
node.master: true
node.data: true
节点2
vi elasticsearch.yml
cluster.name: elasticsearch # 集群的名字
node.name: node-2 # 节点名字
network.host: 0.0.0.0
http.port: 9200 #设置对外服务的http端口,默认为9200。kibana则通过该端口与es交互
node.max_local_storage_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.ping.unicast.hosts: ["172.28.2.1:9300", "172.28.2.2:9300"]
node.master: true #是否有资格作为master节点
node.data: true #是否作为数据接口
#是否作为预处理节点
curl -L 'http://172.28.2.1:9200/_cat/nodes?pretty'

curl -L 'http://172.28.2.1:9200/_cluster/health?level=indices'
curl -L 'http://172.28.2.1:9200/_cluster/health?level=indices&pretty'

curl -L '172.28.2.1:9200/_cluster/health?pretty'

由于想配置kibana支持集群,所以在配置文件中增加了elasticsearch.hosts节点。查阅资料后,貌似是不支持集群的。修改配置文件kibana.yml中的
elasticsearch.hosts: [“http://172.28.2.1:9200”] 改为
elasticsearch.url:“http://172.28.2.1:9200”
参考链接:
http://t.zoukankan.com/lgjava-p-12213048.html
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_cluster_health.html
https://blog.51cto.com/michaelkang/2061712