elasticsearch搭建遇到的问题整理合集2

es遇到的问题2

1、数据data

默认情况下es的data都是存在于path.data所指定的目录的,path.data默认为文件的data目录,

所以data存在着上一次或者上几次的运行配置

故有些时候需要清空data来重新运行

2、关于cluster.initial_master_nodes

使用的7.13的版本,有一些配置过时了

过时配置配置(新)
discovery.zen.ping.unicast.hostsdiscovery.seed_hosts
discovery.zen.hosts_providerdiscovery.seed_providers
discovery.zen.nomasterblockcluster.nomasterblock

discovery.seed_hosts
提供集群中符合主机要求的节点的列表. 每个值的格式为host:port或host ,其中port默认为设置transport.profiles.default.port。
discovery.seed_providers
以文件的方式提供主机列表,可以动态修改,而不用重启节点(容器化环境适用)
cluster.initial_master_nodes
设置全新群集中符合主机要求的节点的初始集合. 默认情况下,该列表为空,这意味着该节点希望加入已经被引导的集群
discovery.findpeersinterval
选定主节点发现时间间隔,默认1S

注意:自己测试中发现具有选举权的master节点一定要设置cluster.initial_master_nodes,值为当前所有可以参与选举的节点,否则会出现“master not discovered yet”的错误;

非master节点可以不设置,设置了反而会出现真正的master节点无法实时发现的问题,猜测原因可能是因为,单独的node节点因为设置了,所以与master节点不会主动发生通信

官网文档如下:

cluster.initial_master_nodes

(Static) Sets the initial set of master-eligible nodes in a brand-new cluster. By default this list is empty, meaning that this node expects to join a cluster that has already been bootstrapped. See cluster.initial_master_nodes.

在全新的集群中设置初始主节点集。 默认情况下,这个列表是空的,这意味着这个节点希望加入一个已经被引导的集群。

具备成为master节点的应该设置initial_master_nodes为一个master集群列表,而其他的node不用设置,可以自己引导(测试发现如果都设置,第一次启动集群时,master节点必须最后启动才可以完全发现所有的node)

更新,有毒吧,全设置了initial_master_nodes,删除了data数据又重新测试了一下,居然master可以不用最后启动了也可以全部发现了。那就是昨天本机网络有问题?

3、关于master节点

设置了node-master:true的节点,表示有资格成为Master的节点。

选举Master选举Master需要所有的Master候选节点共同工作,即使某些节点发生了故障,这个工作也必须能够正常进行,es需要通过仲裁的方式选取出还能正常工作的节点,再组成集群,避免形成“脑裂”,这里“脑裂”是指,可能出现不止一个Master节点,比如节点间的通信断开后,各个Master候选节点都有可能认为其他节点都宕机,提升自己为Master,造成集群状态不一致的情况。由此衍生出参与选主时,需要配置能通信的候选节点数量。discovery.zen.minimummasternodes,缺省配置是1.一个基本的原则是这里需要设置成 N/2 1, N是集群中节点的数量。

由上面的分析我们可以知道,是否发生选举,在于节点彼此间的通信感知,由此可知节点间的网络通信同样重要,就像是API接口调用,有调用就会有超时,所以在网络环境差的情况下,超时配置显得尤为重要。discovery.zen.ping.timeout用来指定两个节点间的通信超时时间,默认是3S。根据网络情况,调整这个参数,尽量避免由于网络延迟,带来的不必要的选举。

4、分片与副本

分片就是将数据分成几份,使用head-master可以很直观的看出,

例如设置分片:5

就会在主页出现0,1,2,3,4五个分片

副本就是数据的备份,

例如分片为5,副本为1:就会出现0,0,1,1,2,2,3,3,4,4一共十个分片,有一份是副本

官方:

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。

为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
分片之所以重要,主要有两方面的原因:

  • 允许你水平分割/扩展你的内容容量
  • 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量

至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。

在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了。这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。复制之所以重要,主要有两方面的原因:

  • 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
  • 扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行

总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制数量,但是不能改变分片的数量。

默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。一个索引的多个分片可以存放在集群中的一台主机上,也可以存放在多台主机上,这取决于你的集群机器数量。主分片和复制分片的具体位置是由ES内在的策略所决定的。

5、哭了,NS用的是python2.7,es导的es7.13的模块,而模块es7.13调用了urllib3的方法,最后urllib3只支持python3

是为什么发现这个问题的呢?

因为外网机下载好es的python的模块之后安装到内网机,windows安装时报错缺少两个模块

certifi,urllib

然后去下载安装,成功,

接着自己写了个测试使用,成功

然后接入数据库数据,

debian安装es7,比win上多安装一个模块,因为装urllib3的时候提示报错,查询后是setuptools版本过低,遂去找了适合python2的最新模块包,

报错找不到RecursionError,然后在http_urllib3.py里也确实没有发现RecursionError是在哪里定义的,然后去搜了urllib3这个模块,发现只支持python3

所以如果现在要改的话

要么把服务器python2.7升级,但是这样要改很多包

要么就把es7的模块给换了,本地集群的服务的得重新来,合着白装了这几个。。。

现在尝试,就未定义RecursionError这个错来修复,尝试注释之类的

嗯,注释了这个except,没报这个错了,

新的错误:虚拟机连接不上宿主机

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cluster.initial_master_nodesElasticsearch集群中的一个配置参数,用于指定初始的主节点。在集群中,主节点是负责管理集群状态和协调节点之间通信的节点。当一个新的集群被创建时,需要指定初始的主节点,以便集群能够正常运行。这个参数可以设置为一个或多个节点的名称,多个节点之间用逗号分隔。在集群启动时,Elasticsearch会自动选择其中一个节点作为主节点,并将其他节点加入到集群中。 ### 回答2: cluster.initial_master_nodesElasticsearch 集群配置中的一个参数,指定了在 Elasticsearch 启动时作为初始主节点的节点名称。当 Elasticsearch 集群启动时,还没有选举出主节点,而是通过在一组节点中选取一个节点作为候选主节点,并在此基础上选举出主节点。这个过程需要一定的时间,因此 Elasticsearch 提供了 cluster.initial_master_nodes 参数让我们手动设置初始主节点,来加速选主的过程。 正常情况下,我们可以将此参数配置为集群中所有已知的主节点的名称。当 Elasticsearch 启动时,它将仅从已知的主节点中选择一个作为初始主节点,并立即与其他节点通信,以加快主节点的选举速度。在选出主节点后,集群将正常运行,并处理来自客户端的请求,同时它还会持续监听,以监测任何主节点失败的情况。 当集群中只有一个节点时,不需要设置 cluster.initial_master_nodes 参数,因为它将自动成为主节点。 需要注意的是,cluster.initial_master_nodes 参数只在设置新的集群或者在主节点失效时才需要设置。否则,当您重新启动 Elasticsearch 时,它将从先前保存的状态中恢复,而不需要手动设置初始节点。此外,您应该只在初始集群设置中使用此参数,并确保不要在生产环境中更改其值。在生产环境中,如果您要更改主节点,应该使用选举算法,而不是重新设置 cluster.initial_master_nodes。 ### 回答3: cluster.initial_master_nodes 是一个 Elasticsearch 集群配置选项,旨在确定新的 Elasticsearch 集群中的初始主节点。初始主节点是集群中的一个节点,它会负责维护集群状态和协调节点之间的通信。 当启动一个新的 Elasticsearch 集群时,必须使用初始主节点来启动集群。该选项允许管理员手动指定集群中的初始主节点。这通常是在一组 Elasticsearch 节点(例如,一组新的物理机器或虚拟机)上第一次启动集群时设置的。 如果不定义 cluster.initial_master_nodesElasticsearch默认使用第一个启动的节点作为初始主节点。这可能会导致意外的结果和集群不稳定。 在 Elasticsearch 集群中,必须有一个主节点。主节点具有特定的角色,例如分配或变更分片、管理索引等。如果主节点故障或离线,集群将开始重新选举主节点。在这种情况下,初始主节点选项将被忽略,并使用重新选举的主节点。 总之,cluster.initial_master_nodes 是一个重要的 Elasticsearch 集群选项,它允许管理员手动确定集群中的初始主节点。这对于确保集群的正确运行非常重要,并减少可能出现意外行为的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值