前言
上一章主要讲了ES的单机部署以及快速入门,这章重点对于ES集群的原理及部署做以讲解。
一、ES集群讲解
(一)基本词条介绍
这里对于ES的构成单元做以回顾,同时加入集群内相关单元概念。
索引(index):一类文档的集合,相当于mysql中database。
映射(mapping):索引的结构,一旦设定就不能更改,若要更改映射,只有重建索引,并将数据迁移过来。
文档(document):索引信息的最小单元,数据符合映射结构。
字段(field):文档的字段,相当于数据表中的列。
集群(cluster):一个或多个节点组织在一起,一起提供相关服务。
节点(node):集群中的一个点,也可简单理解为一个服务器。
主节点(master node):在集群启动的时候会选举出一个master节点,主要负责管理索引,分配分片,管理节点状态等工作,一般情况下不负责数据的写入和查询。
数据节点(data node):负责ES集群中数据写入和检索。
分片(shards):ES对于大量的数据提供分片功能,及将一个索引的内容分为几段,其中的一段就为一个分片,在设置映射时可以设定分片数量。可以理解为:每个分片本身也是一个功能完善且独立的“索引”,并可以放到集群中的任意节点,分片一旦设定,不可更改,一般设定规则:1.每个分片大小为10G-30G;2.数量为节点的1-3倍。
副本(replicas):分片的备份,在映射中设定,可以动态修改,同时可以提供搜索服务。
下面对如何设置集群中索引的分片和副本进行演示:
#创建指定分片数量、副本数量的索引
PUT /student
{
"mappings": {
"properties": {
"id": { "type": "long", "store": true },
"name": { "type": "keyword", "store": true },
"age": { "type": "integer", "store": true },
}
},
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
#查看分片、主分片、副本分片
GET /_cat/student?v
(二)集群架构原理
1.写入原理
1.当客服端对集群提出写入请求的时候,他会随机选择一个节点发动请求,例如找到了node2节点。
2.node2节点也成为协调节点,他会根据写入文档的id进行计算(文档id的hash值%分片总数),计算出该文档应该写入的主分片,并将请求转发给该分片所在主机,如node1。
3.当node1接收到了写入请求,他会调用该分片的进程进行写入操作,并将数据同步到他的副本中。
4.当node1中的分片和副本都保存完后,将确认信息返回客服端。
2.检索原理
1.客户端向集群发送检索请求,随机分配一个节点比如node2。
2.node2节点变为协调节点,他会将检索请求广播到集群中所有的节点。
3.每个节点中的每个分片根据检索请求进行检索,并向协调节点(node2)返回查到的文档ID、节点地址、分片信息,又协调节点对各分片返回的信息进行全局排序。
4.node2,根据查询结果列表的文档ID,分别向相应的分片发送获取文档请求,获取完后将结果返回给客户端。
二、集群部署及管理
(一)部署集群
1.装备3台虚拟机,将ES的压缩包放入各主机,并解压,这里同单机安装,不做过多演示,详情可参照上一章节。
2.在应用目录下新建data 、log两个目录,并给一个普通用户更改权限。
mkdir ${ES目录}/data
mkdir ${ES目录}/log
#这里直接暴力解锁所有权限
chmod -R 777 ${ES目录}/log
chmod -R 777 ${ES目录}/data
3.依次更改三台主机的${ES目录}/config/elasticsearch.yml文件添加集群配置信息。
#集群名称
cluster.name: es-test
##节点名称
node.name: node1
##是不是有资格主节点
node.master: true
##是否存储数据 如果是主节点,这里可设置为false
node.data: true
##最大集群节点数
node.max_local_storage_nodes: 3
##ip地址 这里为绑定地址,及外部只能通过该地址访问 若为0.0.0.0及所有地址都可以访问
network.host: 0.0.0.0
##端口
http.port: 9200
##内部节点之间沟通端口 如果全部部署在一台机子上需要该配置,其他不用
#transport.tcp.port: 9700
##es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["node1","node2","node3"]
##es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master 若不想哪个节点当选主节点,可以不将该节点写入
cluster.initial_master_nodes: ["node1", "node2","node3"]
##数据和存储路径
path.data: /usr/local/export/es/elasticsearch-7.6.1/data
path.logs: /usr/local/export/es/elasticsearch-7.6.1/log
4.修改JAVA虚拟机配置,由于有些虚拟机配置太小,可能会造成内存过小启动不了ES服务的问题,这里将JAVA虚拟机启动内存调小一点。访问 ¥{ES目录}/config/jvm.options
-xms:最小内存
-xmx:最大内存
5.更改用户启动集群
su dbh123
${项目目录}/bin/elasticsearch
6.更改Kibana配置,访问集群。
vim kibana-7.4.0-linux-x86_64-cluster/config/kibana.yml
#支持中文
i18n.locale: "zh-CN"
server.port: 5602
server.host: "0.0.0.0"
server.name: "kibana-itcast-cluster"
elasticsearch.hosts: ["http://node1:9200","http://node2:9200","http://node3:9203"]
elasticsearch.requestTimeout: 99999
(二)管理集群
访问kibana地址,可以对集群的信息进行管理查看
创建一个3个分片和1个副本的索引index1
PUT index1/
{
"mappings": {
"properties":{
"name": {
"type":"keyword"
},
"age":{
"type":"integer"
},
"address":{
"type":"text"
}
}
},
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
查看: