⾼可⽤
⾼可⽤(High Availability)是分布式系统架构设计中必须考虑的因素之⼀,它通常是指,通过设
计减少系统不能提供服务的时间。如果系统每运⾏ 100 个时间单位,会有 1 个时间单位⽆法提供服
务,我们说系统的可⽤性是 99%。
负载均衡
将流量均衡的分布在不同的节点上,每个节点都可以处理⼀部分负载,并且可以在节点之间动态分
配负载,以实现平衡。
⾼性能
将流量分发到不同机器,充分利⽤多机器多 CPU,从串⾏计算到并⾏计算提⾼系统性能。
Elasticsearch 天生就是分布式的,会在后台自动执行
ES 在设计时就尽可能地屏蔽了分布式系统的复杂性,无需了解内部机制就可以使用 ES。
Elasticsearch 的配置⽂件中可以通过 node.master、node.data 来
设置节点类型。
node.master:是否是主节点(是否有竞选资格)
node.data:是否存储数据,如果为 true 则为数据节点
每个索引有⼀个或多个分⽚,每个分⽚存储不同的数据。分⽚可分为
复制分⽚是主分⽚的拷⻉,可以分担系统压力、流量。默认每个主分⽚有⼀个复制分⽚,⼀个索引的复制分⽚的数量可以动态地调整,复制分⽚从不与它的主分⽚在同⼀个节点上。
1、拷⻉ elasticsearch-7.2.0 安装包 3 份,分别命名 es-a, es-b,es-c
2、分别修改配置⽂件 elasticsearch.yml
#集群名称
cluster.name: my-application
#节点名称
node.name: node-1
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 3
#⽹关地址,常配置为实际ip
network.host: 0.0.0.0
#端⼝
http.port: 9200
#内部节点之间沟通端⼝
transport.tcp.port: 9300
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点。此处在同一机器的不同端口模拟多个节点
discovery.seed_hosts: ["localhost:9200","localhost:9201","localhost:9202"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
#数据和存储路径
path.data: /Users/louis.chen/Documents/study/search/storage/a/data
path.logs: /Users/louis.chen/Documents/study/search/storage/a/logs
3、分别启动 a ,b ,c 三个节点
4、访问 localhost:9200/_cat/health?v , 如果返回的 node.total 是 3,代表集群搭建成功
但这种方式看到的集群信息很抽象,可以在 kibana 的可视化地查看集群信息,且信息更详细。带星号的是 master 节点。
先在 kibana.yml 中配置集群节点
elasticsearch.hosts: ["http://localhost:9200","http://localhost:
9201","http://localhost:9202"]
启动 kibana,访问 localhost:5601 在 monitor 中即可看到 es 集群的信息
分片是针对 index 而言的
分⽚ (shard): 因为 ES 是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, ⽽这些分布在不同节点的数据就是分⽚. ES ⾃动管理和组织分⽚, 并在必要的时候对分⽚数据进⾏再平衡分配, 所以⽤户基本上不⽤担⼼分⽚的处理细节。
副本 (replica):ES 默认为⼀个索引创建 1 个主分⽚, 并分别为其创建⼀个副本分⽚. 也就是说每个索引都由 1 个主分⽚成本, ⽽每个主分⽚都相应的有⼀个 copy.
Elastic search7.x 之后,如果不指定索引分⽚,默认会创建 1 个主分⽚和⼀个副分⽚,⽽ 7.x 版本之前的⽐如 6.x 版本,默认是 5 个主分⽚
创建索引 (指定分⽚数量)
PUT nba
#指定分片数量
{"settings":{"number_of_shards":3,"number_of_replicas":1},"mappings":
{"properties":{"birthDay":{"type":"date"},"birthDayStr":
{"type":"keyword"},"age":{"type":"integer"},"code":
{"type":"text"},"country":{"type":"text"},"countryEn":
{"type":"text"},"displayAffiliation":{"type":"text"},"displayName":
{"type":"text"},"displayNameEn":{"type":"text"},"draft":
{"type":"long"},"heightValue":{"type":"float"},"jerseyNo":
{"type":"text"},"playYear":{"type":"long"},"playerId":
{"type":"keyword"},"position":{"type":"text"},"schoolType":
{"type":"text"},"teamCity":{"type":"text"},"teamCityEn":
{"type":"text"},"teamConference":
{"type":"keyword"},"teamConferenceEn":{"type":"keyword"},"teamName":
{"type":"keyword"},"t
修改副分⽚数量
PUT /nba/_settings
{
"number_of_replicas": 2
}
1、查看集群的健康状态
http://127.0.0.1:9200/_cat/health?v
2、查看集群的索引数
http://127.0.0.1:9200/_cat/indices?v
返回了集群中的所有索引信息,我们可以看到所有索引的健康情况和具体信息
3、查看磁盘的分配情况
http://127.0.0.1:9200/_cat/allocation?v
返回每个节点的磁盘情况。
4、查看集群的节点信息
http://127.0.0.1:9200/_cat/nodes?v
URL 返回了集群中各节点的情况。
5、查看集群的其他信息
http://127.0.0.1:9200/_cat
下一篇: RabbitMQ集群搭建→