ElasticSearch集群部署
一、集群节点介绍
ELasticsearch的集群是由多个节点组成的,通过cluster.name设置集群名称,并且用于区分其它的集群,每个节点通过node.name指定节点的名称。
在Elasticsearch中,节点的类型主要有4种:
- master节点
- 配置文件中node.master属性为true(默认为true),就有资格被选为master节点。master节点用于控制整个集群的操作。比如创建或删除索引,管理其它非master节点等。
- data节点
- 配置文件中node.data属性为true(默认为true),就有资格被设置成data节点。data节点主要用于执行数据相关的操作。比如文档的CRUD。
- 客户端节点
- 配置文件中node.master属性和node.data属性均为false。
- 该节点不能作为master节点,也不能作为data节点。
- 可以作为客户端节点,用于响应用户的请求,把请求转发到其他节点
- 部落节点
- 当一个节点配置tribe.*的时候,它是一个特殊的客户端,它可以连接多个集群,在所有连接的集群上执行搜索和其他操作
二、集群搭建步骤
三台机器的环境配置(root下操作)
[root@slave1 ~]# vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
[root@slave1 ~]# vim /etc/sysctl.conf
vm.max_map_count=655360
[root@slave1 ~]# sysctl -p
2.1、单节点安装(省略)
# 参考
https://www.cnblogs.com/hsyw/p/14090372.html
2.2、分发ElasticSearch
# 分发之前先删除数据
/app/elasticsearch/data
rm -rf nodes/
# 分发
[root@master ~]# cd /app/
[root@master app]# scp -rp elasticsearch 192.168.1.112:/app/
[root@master app]# scp -rp elasticsearch 192.168.1.113:/app/
# 在另外2台机器添加用户
[root@slave1 app]# useradd elsearch
[root@slave2 app]# useradd elsearch
#另外2台机器修改文件用户组
[root@slave1 ~]# chown elsearch.elsearch -R /app/elasticsearch/
[root@slave2 ~]# chown elsearch.elsearch -R /app/elasticsearch/
2.3、修改配置文件
2.3.1、master节点上
# 第一次做集群的朋友建议一个个改,后面熟悉了直接scp改node.name的名字就完事了
[root@master ~]# su - elsearch
[elsearch@master ~]$ vim /app/elasticsearch/config/elasticsearch.yml
# 以下内容修改为
cluster.name: es-cluster
node.name: node01
node.master: true
node.data: true
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.168.1.111","192.168.1.112","192.168.1.113"]
# 最小节点数
discovery.zen.minimum_master_nodes: 2
# 跨域专用
http.cors.enabled: true
http.cors.allow-origin: "*"
2.3.2、slave1节点上
[root@slave1 ~]# su - elsearch
[elsearch@slave1 ~]$ vim /app/elasticsearch/config/elasticsearch.yml
# 以下内容修改为
cluster.name: es-cluster
node.name: node02
node.master: true
node.data: true
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.168.1.111","192.168.1.112","192.168.1.113"]
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
2.3.3、slave2节点上
[root@master ~]# su - elsearch
[elsearch@slave1 ~]$ vim /app/elasticsearch/config/elasticsearch.yml
# 以下内容修改为
cluster.name: es-cluster
node.name: node02
node.master: true
node.data: true
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.168.1.111","192.168.1.112","192.168.1.113"]
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
2.4、启动集群(三节点操作)
# 前台运行
/app/elasticsearch/bin/elasticsearch
# 后台运行
/app/elasticsearch/bin/elasticsearch &
2.5、查看集群状态
三、分片和副本
为了将数据添加到Elasticsearch,我们需要索引(index)——一个存储关联数据的地方。实际上,索引只是一个用来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”.
- 一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。
- 我们需要知道是分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。应用程序不会和它直接通
信。 - 分片可以是主分片(primary shard)或者是复制分片(replica shard)。
- 索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
- 复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。
- 当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。