【ES三周年】03 您所在的位置:网站首页 babel最新版本 【ES三周年】03

【ES三周年】03

2023-04-13 18:20| 来源: 网络整理| 查看: 265

ElasticSearch环境3.1 相关概念3.1.1 单机&集群

单台ElasticSearch服务器提供服务,往往都有最大的承载能力,超过这个阈值,服务器性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中。

除了负载能力,单点服务器也存在其他问题:

单台机器存储容量有量。单服务器容易出现单点故障,无法实现高可用。单服务的并发处理能力有限。

配置服务器集群时,集群中节点的数量没有限制,大于等于2个节点就可以看做是一个集群了。一般出于高性能及高可用方面来考虑集群节点数量都是3个以上。

3.1.2 集群 Cluster

一个集群就是由一个或多个服务器节点组织在一起,共同持有整个的数据,并一起提供索引和搜索功能。

一个Elasticsearch 集群有一个唯一的名字标识,这个名字默认就是"elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。

3.1.3 Node 节点

集群中包括很多服务器,一个节点就是其中一个服务器。作为集群的一部分,它存储数据,参与集群的索引和搜索功能。

只要多个节点在同个网络中,节点就可以通过 指定集群的名称 加入其中,与集群中的其他节点相互感知。

和集群类似,一个节点也是由一个唯一名字来标识的。默认情况下,这个名字是一个随机的漫威漫画角色名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于 ES 集群中的哪些节点。

一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch"的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。

3.2 Windows集群部署3.2.1 部署集群创建elasticsearch-cluster文件夹,在内部复制3个ElasticSearch服务(将之前的单点解压缩的那个es文件夹复制过来)

点开之后会看到有data,logs两个文件夹,因为之前使用过,所以里面是有数据和日志的,因为我们需要用一个全新的集群环境,所以把data文件夹删除,logs文件夹清空。

然后就是进行配置,集群和单点是不一样的,单点直接双击elasticsearch.bat文件启动即可,但是集群的话是需要配置的。

打开elasticsearch.yml文件

修改的部分:

# ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # # 集群名称,必须要一致 cluster.name: my-application# ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # # 节点名称,集群内要唯一 node.name: node-8001 node.master: true node.data: true # # Add custom attributes to the node: # #node.attr.rack: r1# ---------------------------------- Network ----------------------------------- # # By default Elasticsearch is only accessible on localhost. Set a different # address here to expose this node on the network: # # ip地址 network.host: localhost # http端口 http.port: 8001 # tcp监听端口 transport.tcp.port: 9301 # # By default Elasticsearch listens for HTTP traffic on the first free port it # finds starting at 9200. Set a specific HTTP port here: # ## ---------------------------------- Various ----------------------------------- # # Require explicit names when deleting indices: # #action.destructive_requires_name: true # 跨域 http.cors.enabled: true http.cors.allow-origin: "*"

修改完之后:

进入bin目录,启动node-8001,可以看到:

然后打开postman,查询集群健康状态:

响应:

{ "cluster_name": "my-application", "status": "green", // 可以看到为健康状态为绿色 "timed_out": false, "number_of_nodes": 1, // 当前的节点为1个 "number_of_data_nodes": 1, // 当前的数据节点为1个 "active_primary_shards": 1, "active_shards": 1, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100.0 }

如此复制一份,并命名node-8002,删除data目录,清空logs目录,修改elasticsearch.yml文件(添加到对应模块即可):

# ---------------------------------- Cluster ----------------------------------- # 集群名称,必须要一致 cluster.name: my-application # ------------------------------------ Node ------------------------------------ # 节点名称,集群内要唯一 node.name: node-8002 node.master: true node.data: true # ---------------------------------- Network ----------------------------------- # ip地址 network.host: localhost # http端口 http.port: 8002 # tcp监听端口 transport.tcp.port: 9302 # --------------------------------- Discovery ---------------------------------- # discovery es中的一个特殊的查找模块,用来查找节点的。 # 你第一台机器启动就不用写了,因为他启动就他一个,但是第二台就需要,因为他要去找第一台去 # 9301为内部通讯端口,是第一台机器的tcp监听端口 discovery.seed_hosts: ["localhost:9301"] discovery.zen.fd.ping_timeout: 1m discovery.zne.fd.ping_retries: 5 # 跨域 http.cors.enabled: true http.cors.allow-origin: "*"

然后启动node-8002可以看到:

可以看到node-8001找到了node-8001服务。

使用postman,查询集群健康状态:

响应:

{ "cluster_name": "my-application", "status": "green", // 健康状态为绿色 "timed_out": false, "number_of_nodes": 2, // 当前集群中的节点为2个 "number_of_data_nodes": 2, // 当前集群中的数据节点为2个 "active_primary_shards": 1, "active_shards": 2, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100.0 }

如此同node-8002修改一份node-8003,删除data目录,清空logs目录,修改elasticsearch.yml:

# ---------------------------------- Cluster ----------------------------------- # 集群名称,必须要一致 cluster.name: my-application # ------------------------------------ Node ------------------------------------ # 节点名称,集群内要唯一 node.name: node-8003 node.master: true node.data: true # ---------------------------------- Network ----------------------------------- # ip地址 network.host: localhost # http端口 http.port: 8003 # tcp监听端口 transport.tcp.port: 9303 # --------------------------------- Discovery ---------------------------------- # discovery es中的一个特殊的查找模块,用来查找节点的。 # 你第一台机器启动就不用写了,因为他启动就他一个,但是第二台就需要,因为他要去找第一台去 # 9301为内部通讯端口,是第一台机器的tcp监听端口 discovery.seed_hosts: ["localhost:9301","localhost:9302"] discovery.zen.fd.ping_timeout: 1m discovery.zne.fd.ping_retries: 5 # 跨域 http.cors.enabled: true http.cors.allow-origin: "*"

然后启动node-8003服务,可以看到:

启动成功:

使用postman,查询集群健康状态:

响应:

{ "cluster_name": "my-application", "status": "green", // 健康状态为绿色 "timed_out": false, "number_of_nodes": 3, // 当前集群中的节点为3个 "number_of_data_nodes": 3, // 当前集群中的数据节点为2个 "active_primary_shards": 1, "active_shards": 2, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 2, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 43810, "active_shards_percent_as_number": 100.0 }

注意:

这种方式要按照顺序启动,如果修改了配置文件,需要删除data目录,重启elasticsearch

3.2.1.1 配置文件参考:# 集群名称,必须要一致 cluster.name: my-application # 节点名称,集群内要唯一 node.name: node-8001 node.master: true node.data: true # ip地址 network.host: localhost # http端口 http.port: 8001 # tcp监听端口 transport.tcp.port: 9301 # 查找节点(第一个节点的配置文件无需添加) discovery.seed_hosts: ["localhost:9301"] discovery.zen.fd.ping_timeout: 1m discovery.zne.fd.ping_retries: 5 # 集群内的可以被选为主节点的节点列表 #cluster.initial_master_nodes: ["node-1","node-2","node-3"] # 跨域配置 #action.destructive_requires_name: true http.cors.enabled: true http.cors.allow-origin: "*"3.2.1.2 部署时遇到的异常:[2022-03-22T20:49:21,573][WARN ][o.e.c.c.ClusterFormationFailureHelper] [node-8001] master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [node-8001, node-8002, node-8003] to bootstrap a cluster: have discovered # master not discovered yet,此节点之前没有加入一个bootstrapped (v7+)集群,并且该节点必须发现主合格的节点[node-8001, node-8002, node-8003]来引导一个已经发现的集群

原因:

很多问题都出现在第一次配置失败。假如你Es项目路径下有建立了data的目录,那就要在每次改配置的时候去清掉里面的东西,像是缓存垃圾,导致后面每次修改都不生效。

解决方法:

关闭es,删除data目录,重启es

3.3 Linux 单节点部署

没有Java环境的,先部署java环境

Linux 部署java环境:https://blog.csdn.net/weixin_43520670/article/details/106344655

下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0

/usr文件系统  

/usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution;

本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新distribution时无须重新安装全部程序.

/opt:用户级的程序目录

这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。

下载后,使用xftp将压缩包上传到/usr/loca/applicationscd /usr/local/applications # 解压 tar zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz # 删除压缩包 rm -f elasticsearch-7.8.0-linux-x86_64.tar.gz

这时候applications目录里会多个elasticsearch-7.8.0文件夹,如果嫌名字长,可以改了:

mv elasticsearch-7.8.0 es创建用户

因为安全问题,ElasticSearch 不允许root用户直接运行,

所以要创建新用户,在root用户中创建新用户:

useradd user_es # 新增user_es用户 passwd user_es # 为user_es设置密码 020826 # userdel -r user_es #如果创建错了,可以删除 # 文件夹所有者 chown -R user_es /usr/local/applications/es修改配置文件

修改/usr/local/applications/elasticsearch-7.8.0/config/elasticsearch.yml文件

# 这是我的es配置文件的地方 vi /usr/local/applications/es/config/elasticsearch.yml

进去之后可以看到都是被注释的,添加以下配置:

# 集群名称 cluster.name: elasticsearch # 节点名称 node.name: node-1 # 不管它 network.host: 0.0.0.0 # 端口号 http.port: 9200 # 设置主节点,把node-1节点设置为主节点 cluster.initial_master_nodes: ["node-1"]修改/etc/security/limits.confvi /etc/security/limits.conf # 在文件末尾加入以下内容 # 每个进程可以打开的文件数的限制 user_es soft nofile 65536 user_es hard nofile 65536修改/etc/security/limits.d/20-nproc.conf(这个文件我没有,新建的)vi /etc/security/limits.d/20-nproc.conf user_es soft nofile 65536 user_es hard nofile 65536 # 操作系统级别对每个用户的创建的进程数的限制: * hard nproc 4096 # * 代表Linux所有用户名修改/etc/sysctl.conf(我设置之后启动报错)vi /etc/sysctl.conf # 在文件中增加一下部分: # 一个进程可以拥有的VMA(虚拟内存区域)的数量,默认为65536 vm.max_map_count=655360

重新加载:

sysctl -p启动ElasticSearch# 切换用户,不允许root用户启动es su user_escd /usr/local/applications/es bin/elasticsearch如果报错了,就查看上面步骤有哪里配置出错了,或者哪个字母错了,然后删除data目录,重新启动es即可。服务器防火墙:

我这里使用的腾讯云的轻量级服务器,并且使用了宝塔,所以要在腾讯云和宝塔那里放行9200端口。

Postman发起GET请求:http://ip:9200/_cluster/health

响应:

{ "cluster_name": "elasticsearch", "status": "green", "timed_out": false, "number_of_nodes": 1, "number_of_data_nodes": 1, "active_primary_shards": 0, "active_shards": 0, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100.0 }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有