1、单机 & 集群
单台Elasticsearch服务器提供服务,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中。
除了负载能力,单点服务器也存在其它问题:
- 单台机器存储容量有限
- 单服务器容易出现单点故障,无法实现
- 高可用单服务的并发处理能力有限
配置服务器集群时,集群中节点数量没有限制,大于等于 2 个节点就可以看做是集群了。一般出于高性能及高可用方面来考虑集群中节点数量都是 3 个以上。
2、集群 Cluster
一个集群就是由一个或多个服务器节点组织在一起,共同持有整个的数据,并一起提供索引和搜索功能。一个 Elasticsearch 集群有一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。
3、节点 Node
集群中包含很多服务器, 一个节点就是其中的一个服务器。 作为集群的一部分,它存储数据,参与集群的索引和搜索功能。
一个节点也是有一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于 Elasticsearch 集群中的哪些节点。
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。
在一个集群里,只要你想,可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何 Elasticsearch 节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。
4、Linux单节点部署
第一步:根据下述地址进入到Elasticsearch的官网中
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-8-5-1
选择并下载适合Linux环境版本的安装包

这个下载的文件有点大,大概有553MB,需要稍微等一会。
![]()
第二步: 将文件上传到192.168.1.108服务器的/home目录下
第三步:使用下述命令对elasticsearch-8.5.1-linux-x86_64.tar.gz文件进行解压
tar -zxvf elasticsearch-8.5.1-linux-x86_64.tar.gz

解压完了以后再/home目录下就会产生一个名为 “elasticsearch-8.5.1” 的目录

第四步:为了安全Elasticsearch不允许root用户直接运行该服务,所以要创建新用户。
useradd es #新增 es 用户
passwd es #为 es 用户设置密码
此处创建了一个用户名为es,密码也为es的用户:

如果我们想创建其它的用户,不想要前面创建的这个用户,可以使用下述命令先删除再添加新的用户:
userdel -r es #如果错了,可以删除再加
接着使用下述命令将 /home/elasticsearch-8.5.1 目录的文件所有者设置为es用户:
chown -R es:es /home/elasticsearch-8.5.1

第五步:在/home/elasticsearch-8.5.1/config目录下找到elasticsearch.yml文件

在该文件的最后加入下述5行配置:
cluster.name: elasticsearch
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

第六步:修改 /etc/security/limits.conf 文件,在该文件的末尾加上下述三行配置
# 设置es用户的每个进程可以打开的文件数的限制
es soft nofile 65536 # 软连接
es hard nofile 65536 # 硬连接

需要注意一点:/etc/security/limits.d下有noproc最大进程参数的限制,在这个地方就不配置noproc的限制,即 /etc/security/limits.d/下的文件覆盖了/etc/security/limits.conf设置的值
第七步:找到 /etc/security/limits.d 目录下的 20-nproc.conf 文件

打开这个文件,可以看到里面已经有相关的配置,所有用户(包含了es用户,暂时不做任何处理)的软连接最大进程数设置为4093,root用户则不进行任何限制,

如果报错了,则可以采用先注释掉上面两行配置,将下述6行配置加入到 20-nproc.conf 文件中:
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
# 操作系统级别对每个用户创建的进程数的限制
* hard nproc 4096
# 注: * 表示Linux中的所有用户
第八步:找到/etc/sysctl.conf文件

在该文件的末尾加上下述两行配置:
# 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
vm.max_map_count=655360

第九步:使用下述命令重新加载上述修改的配置
sysctl -p

第十步:使用su es命令切换到es用户下, 使用下述命令启动服务
bin/elasticsearch

这时如果我们在浏览器中访问192.168.1.108:9200,该服务是访问不到的, 和之前遇到的情况一样,这个时候要将 elasticsearch.yml 配置文件中的 xpack.security.enabled 属性值修改为false:

我们在浏览器中再次访问192.168.1.108:9200, 其页面返回内容如下,出现了这个则说明Elasticsearch单节点部署成功

前面这个启动方式属于Elasticsearch服务前台启动,推荐使用下述这种后台启动:
bin/elasticsearch -d
5、Linux集群部署
Elasticsearch服务在Linux中的集群部署和上述单节点的部署基本上没有什么区别,唯一需要特别关注的就是elasticsearch.yml配置文件中的配置和上面的有些不一样。
Elasticsearch 8.5.1版本的相关配置参考官网文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html
为了实现Elasticsearch集群部署,当前准备了三台服务器: 192.168.1.108、192.168.1.109和192.168.1.110。
第一步:将下载好的Elasticsearch安装包上传到三台服务器的/home目录下,并且都进行解压
tar -zxvf elasticsearch-8.5.1-linux-x86_64.tar.gz
第二步:将三台服务器中/home路径下的 elasticsearch-8.5.1 目录重命名为 es-cluster
mv elasticsearch-8.5.1 es-cluster
![]()
第三步:在三台服务器中使用下述命令新增es用户,其密码也是es
useradd es #新增 es 用户
passwd es #为 es 用户设置密码

接着使用下述命令将三台服务器中 /home/es-cluster 目录的文件所有者设置为es用户:
chown -R es:es /home/es-cluster

第四步:在三台服务器的/home/es-cluster/config目录下找到elasticsearch.yml文件

特别说明:由于当前版本是8.5.1属于比较靠前的版本了,所以集群的配置方式和之前7.X版本不一样,稍微简单一些,如果生产环境中遇到了Elasticsearch集群部署的话,一定要注意版本很重要!!!
在192.168.1.108这台服务器中该文件的最后需要加入下述这些配置:
#集群名称
cluster.name: cluster-es
#节点名称, 每个节点的名称不能重复
node.name: node-1
#设置数据,日志文件路径
path.data: /home/es-cluster/data
path.logs: /home/es-cluster/logs
#ip 地址, 每个节点的地址不能重复
network.host: 192.168.1.108
#设置网络访问端口
http.port: 9200
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["192.168.1.108:9300","192.168.1.109:9300","192.168.1.110:9300"]
#集群初始化主节点
cluster.initial_master_nodes: node-1

相应的192.168.1.109这台服务器中该文件需要添加的内容中大部分配置和前面的是一样,但有两处需要修改下:
#节点名称, 每个节点的名称不能重复
node.name: node-2
#ip 地址, 每个节点的地址不能重复
network.host: 192.168.1.109
相应的192.168.1.110这台服务器中该文件需要添加的内容中大部分配置和前面的是一样,但有两处需要修改下:
#节点名称, 每个节点的名称不能重复
node.name: node-3
#ip 地址, 每个节点的地址不能重复
network.host: 192.168.1.110
第五步:在三台服务器的/etc/security/路径下找到 limits.conf 文件,在该文件的末尾都加上下述三行配置
# 设置es用户的每个进程可以打开的文件数的限制
es soft nofile 65536 # 软连接
es hard nofile 65536 # 硬连接

第六步:在三台服务器中找到 /etc/security/limits.d 目录下的 20-nproc.conf 文件,暂时都不进行修改,原因和前面单节点部署时一样。
第七步:在三台服务器中找到/etc/sysctl.conf文件,该文件最后都追加下面这两行配置
# 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
vm.max_map_count=655360
第八步:在三台服务器分别执行下述命令重载刚刚修改的系统配置
sysctl -p
第九步:在192.168.1.108这台服务器中使用su es命令切换到es用户下, 然后在/home/es-cluster目录下执行下述命令启动Elasticsearch服务
bin/elasticsearch
如果Elasticsearch服务可以正常启动的话,则说明前面在elasticsearch.yml文件中的配置基本是没有什么问题。
接着在192.168.1.108这台服务器中访问该启动服务的测试地址,但是没有任何内容返回,提示:Empty reply from server

那么这个时候我们需要将elasticsearch.yml文件中自动添加(Elasticsearch服务首次启动以后就会产生)的安全配置区域中的 xpack.security.enabled 配置项设置为false。

再次启动服务后,浏览器中访问192.168.1.108:9200,可以看到服务启动成功:

特别说明:后面两个集群节点的服务器一定要关闭防火墙或者把相应的通讯端口9300开放出来
第十步:在192.168.1.109这台服务器中的elasticsearch.yml配置文件末尾加入下述配置
#集群名称
cluster.name: cluster-es
#节点名称, 每个节点的名称不能重复
node.name: node-2
#设置数据,日志文件路径
path.data: /home/es-cluster/data
path.logs: /home/es-cluster/logs
#ip 地址, 每个节点的地址不能重复
network.host: 192.168.1.109
#设置网络访问端口
http.port: 9200
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["192.168.1.108:9300","192.168.1.109:9300","192.168.1.110:9300"]
#集群初始化主节点
cluster.initial_master_nodes: node-1
xpack.security.enabled: false
在192.168.1.110这台服务器中的elasticsearch.yml配置文件末尾加入下述配置
#集群名称
cluster.name: cluster-es
#节点名称, 每个节点的名称不能重复
node.name: node-3
#设置数据,日志文件路径
path.data: /home/es-cluster/data
path.logs: /home/es-cluster/logs
#ip 地址, 每个节点的地址不能重复
network.host: 192.168.1.110
#设置网络访问端口
http.port: 9200
##es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["192.168.1.108:9300","192.168.1.109:9300","192.168.1.110:9300"]
##集群初始化主节点
cluster.initial_master_nodes: node-1
xpack.security.enabled: false
重点需要关注的是下面这行配置,两个集群节点中一定要加上这个,因为暂时还不知道xpack.security的作用,其它相关联的参数还不知道怎么配置,因此先屏蔽掉这部分配置:
xpack.security.enabled: false
PS:其它人可能看不懂,后面这句话是对我自己说的哈。为什么前面搭建第一个集群节点时,首次启动Elasticsearch服务后配置文件elasticsearch.yml中会自动添加了xpack.security配置区域?答:这是因为第一个集群节点刚开始配置的时候添加到elasticsearch.yml配置文件中的内容属于7.X版本的,后面两个集群节点中elasticsearch.yml配置文件一开始就是8.X版本的,所以在首次启动Elasticsearch服务没有自动产生xpack.security配置区域。
Elasticsearch搭建集群服务的时候选好适合的版本很重要!!!
当上述两个集群节点服务启动了以后,在Postman中GET请求访问下述接口查看当前集群信息:
http://192.168.1.108:9200/_cat/nodes

当返回接口出现了上述节点信息,则说明Elasticsearch集群环境搭建成功了!
本文详细介绍了Elasticsearch的集群概念,包括单机与集群的区别,集群和节点的定义。重点讲解了如何在Linux环境下进行单节点和集群的部署,涉及用户权限、配置文件修改、系统参数调整等多个步骤,强调了版本选择和配置的注意事项,以确保集群的正常运行和高可用性。
315

被折叠的 条评论
为什么被折叠?



