橘子学es原理01之准备工作

es本身是具备很好的使用特性的,我指的是他的部署方面的,至于后期的使用和运维那还是很一眼难尽的。
我们从这一篇开始就着重于es的一些原理性的的一些探讨,当然我们也会有一些操作性的,业务性的会分为多个栏目来写。比如前面我写的操作实战的一篇,后面还会不断补充的,https://blog.csdn.net/liuwenqiang1314/article/details/135882607?spm=1001.2014.3001.5501

一、部署模式

我们一般有三种部署模式:
1、本地单节点部署:这种一般是我们在开始学习的时候,快速的部署搭建一个节点开始使用,如果你想验证一个什么功能,这种方式是不错的。
2、本地多节点部署集群:这种模式其实就是我们所称的伪集群了,这种集群并不具备分布式的真正特性,当这一个机器挂了,整个集群直接就无了。适合在我们学习分布式理论或者原理的学习,不具备实战特性。
3、多机器部署的集群:这种模式一般是在一个机器上部署一个es节点,然后多台机器的多个节点组成一个集群。这种模式是我们生产实践中常用的,也可以用在ece认证考试中。当然了,实际生产可能机器配置很高,这时候我们为了让资源利用最大化,可以在一个机器上部署一个或者一个以上的节点。这个后面我们说资源预估的时候再说。

二、关于配置

es的启动中,配置文件是一个非常重要的东西,当然了,尤其是我们在启动一个集群的时候,需要配置很多东西。但是他有这么几个概念需要明确一下先。

1、自动发现

我们说es集群的各个节点之间是通过9300端口(默认)来通信的,并且通过这个通信发现彼此的存在,而且他存在自动发现机制,不需要你修改任何配置,节点之间就可以自动发现彼此,从而形成集群。
这个我们就不演示了,因为实际没人这么用,因为你完全依赖自动发现结果就是每次启动端口都不固定,这次是9200下次就是9201我们实际开发中不会这么用的,都是在配置文件中显式的声明。

2、开发模式和生产模式

  • 开发模式:开发模式其实就是默认配置,没配置集群发现,如果你只是简单的学习,不需要es的引导检查,因为引导检查巨麻烦,所以es提供了一个设置项,discovery.type=single-node,此项配置为指定节点为单节点来绕过引导检查。
  • 生产模式:当用户修改了有关集群的相关配置,就会触发生产模式,生产模式下,服务启动就会触发es的引导检查或者叫做启动检查(bootstrap checks),这个机制就是在服务启动之前做一些重要的配置项进行检查,检查其配置值是否合理。引导检查包括对jvm大小,内存锁,虚拟内存,最大线程数,集群发现相关配置进行的检查,如果某一项或者几项配置不合理,es会拒绝启动服务,并且在开发模式下属于一些警告的信息在生产模式下会升级为错误信息输出,引导检查及其严格,之所以宁可拒绝启动服务也要阻止用户启动就是为了防止用户在对es基本使用不了解的前提下启动服务而导致的后期性能问题无法解决或者解决起来很棘手,因为一旦服务以某种不合理的配置启动,时间久了之后可能会产生问题,那时候可能已经难以维护,所以这种操作虽然有了门槛,但是避免了以后的问题,算是未雨绸缪了。

3、单节点模式

单节点启动节点会自己选举自己成为active master节点,每个节点都是自己形成一个集群,也会绕过引导检查。

discovery.type:single-node

4、核心配置项

cluster.name:集群名称,节点根据集群名称来确定是否和其他节点属于同一个集群,从而加入对应的集群。
node.name:节点名称,集群内唯一即可。
node.role:节点的角色配置,不同的角色以字符串的数字方式进行配置。
network.host:节点对外提供服务的地址以及集群内通信的地址,就是你对外用api访问都是这个地址,他们内部节点通信也是这个ip,就是端口不同。如果你配置为本地地址(127.0.0.1),那么当前节点仅会在本地去发现其他节点,另外修改此配置会触发生产模式从而执行引导检查,但是生产环境一般是一个机器一个节点,每个节点都要和其他服务器形成发现,所以这个配置一般是本机内网地址。他们节点之间内网通信。
http.port:对外提供服务的端口号,默认是9200-9299,单节点默认9200,多个节点要是在一台机器,他们就在9200-9299中获得,一般一百个端口够了,没人会在一个机器部署超过一百个节点。
transport.port:节点之间的通讯端口,默认是9300-9399,节点之间tcp通信的,也是一百个,原理同上。
discovery.seed_hosts:集群初始化的种子节点,可配置部分或者全部节点,大型集群可以通过嗅探机制发现其余没配置的节点,如果你去参加认证考试,我建议配全部,因为保险。
cluster.initial_master_nodes:节点初始active master节点,必须是有master角色的节点,他们是用来初始化投票master用的,也就是必须是候选节点,但是不是必须配置所有候选节点,配置一两个差不多了,一个宕机了还有一个备用,他们也能发现,生产模式下启动新集群的时候,必须明确列出在第一次选举中计算其选票的候选节点,第一次成功启动形成集群之后,cluster.initial_master_nodes从每个节点中的配置中,删除配置,后续你重启集群或者向集群添加新节点的时候,就不用配了。他已经存在于集群元数据中了,除非你删了data文件夹,那你就需要重配置了。

5、我的配置

后面我所有的操作都是在一个集群下的操作,我列出我的三个节点的配置。
节点1配置

cluster.name: levi-cluster
node.name: node1
network.host: 127.0.0.1
http.port: 9201
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node1","node2","node3"]
xpack.security.http.ssl.enabled: false
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false

节点2配置

cluster.name: levi-cluster
node.name: node2
network.host: 127.0.0.1
http.port: 9202
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node1","node2","node3"]
xpack.security.http.ssl.enabled: false
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false

节点3配置

cluster.name: levi-cluster
node.name: node3
network.host: 127.0.0.1
http.port: 9203
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node1","node2","node3"]
xpack.security.http.ssl.enabled: false
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false

然后启动集群就可以了,你可以看到我其实啥也没咋改就是简单改了几个启动发现的配置和地址ip,端口。并且我们目前不涉及对于权限的认证,所以我把8.0默认开启的xpack的权限管理的都配置为false了。
而且我是在本地机器开了三个不同端口的节点,因为我机器资源比较大所以就这么整了,你也可以使用多台机器或者多个虚拟机都可以。
在这里插入图片描述

然后我们启动Kibana来链接上集群,我们使用GET _cat/nodes?v来看下启动是不是成功了。
在这里插入图片描述
我们可以看到他已经启动成功了。

三、关于主从模式(leader/follower)

首先es使用的就是主从模式架构,其实分布式集群还有一种叫做分布式哈希表模式(DHT),其区别在于:

  • 主从模式适合节点数量不多,并且节点的状态改变(节点加入和离开)不频繁的场景。
  • 分布式哈希表支持每小时数千个节点的加入和离开。响应大约在4-10跳。
    es使用的场景中一般不会一个集群有太多节点,一般不建议超过一千个,节点的数量远远小于主节点所能维护的连接数,并且也一般不经常有节点加入和离开,处于相对稳点的网络中,所以它选择了主从模式。

四、总结

我们这里对于一些简单的预备原理做了描述,对于你启动的一些建议做了解释。但是你也会看到很多概念没提,比如节点角色咋配,密码权限我也都注释了,其他的一些概念都没说,这个不急,我们先把环境搭建起来,后面关于操作,关于原理和源码都会慢慢展开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter开发进阶之Package

Flutter开发进阶之Package 通常我们在Flutter开发中需要将部分功能与整体项目隔离,一般有两种方案Plugin和Package,Application是作为主体项目,Module是作为原生项目接入Flutter模块。 当独立模块不需要与原生项目通讯只需要Plugin就可以&a…

【广度优先搜索】【网格】【割点】1263. 推箱子

作者推荐 视频算法专题 涉及知识点 广度优先搜索 网格 割点 并集查找 LeetCode:1263. 推箱子 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置。 游戏地图用大小为 m x n 的网格 grid 表示,其中每个元素可以是墙、地板或…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg、pdf转eps

1、eps转pdf 直接使用epstopdf命令(texlive、mitex自带)。 在cmd中进入到eps矢量图片的目录,使用下面的命令: for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码: import matplotlib.pyplot as…

计算机网络面经-TCP的拥塞控制

写在前边 前边我们分享了网络分层协议、TCP 三次握手、TCP 四次分手。今天我们继续深入分享一下 TCP 中的拥塞控制。 对于 TCP 的拥塞控制,里边设计到很多细节,平平无奇的羊希望通过这一节能够将这部分内容串通起来,能够让你更深刻的记忆这部分内容。 思维导图 1、什么…

封装(encapsulation)

封装[encapsulation] 封装介绍封装好处封装的实现步骤(三步)入门案例封装与构造器 封装介绍 封装就是把抽象的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],…

vue项目的前端工程化思路webpack(持续更新中)

写在前面:现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScript的复杂度增加和需要一大堆依赖包,还需要解决Scss,Less……新增样式的扩展写法的编译工…

DC与DCT DCG的区别

先进工艺不再wire load model进行静态时序分析,否则综合结果与后端物理电路差距很大,因此DC综合工具也进行了多次迭代,DC工具有两种模式,包括wire load mode和Topographical Mode,也就是对应的DC Expert和DC Ultra。 …

unity hub (第一部)初学配置

1、安装Unity Hub 2、设置中文 3、安装编辑器 4、新建项目 5、新建完成后进入编辑器 6、 编辑器设置中文 editPreferencesLanguages选择中文

机器学习基础(五)监督与非监督学习的结合

导语:上一节我们详细探索非监督学习的进阶应用,详情可见: 机器学习基础(四)非监督学习的进阶探索-CSDN博客文章浏览阅读613次,点赞15次,收藏13次。非监督学习像一位探险家,挖掘未标…

电路设计(25)——4位数字频率计的multisim仿真及PCB设计

1.设计要求 使用4位数码管,显示输入信号的频率。完成功能仿真后,用AD软件,画出原理图以及PCB。 2.电路设计 输入信号的参数为: 可见,输入为168HZ,测量值为170HZ,误差在可接受的范围内。 3.PCB设…

Bluesky数据采集框架-2

访问保存的数据 到此,自然想到了"我如何访问我保存的数据?"。从bluesky的视角,那真的不是bluesky的关注,但它是一个合理的问题,因此我们将强调一个特定的场景。 注意:本章假设你正在使用databr…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

C语言——实用调试技巧——第2篇——(第23篇)

坚持就是胜利 文章目录 一、实例二、如何写出好(易于调试)的代码1、优秀的代码2、示范(1)模拟 strcpy 函数方法一:方法二:方法三:有弊端方法四:对方法三进行优化assert 的使用 方法五…

Spring之AOP源码解析(下)

前言 在上一遍文章中,我们主要讲解了ProxyFactory在Spring完成AOP动态代理的过程中发挥的作用。这一篇我们主要讲解这些注解都是如何注入Advisors,然后分析这些Advisors生效的条件 注解都是如何注入Advisor并匹配的 EnableTransactionManagement注解 我们在之前提到EnableT…

STM32 TCP实现OTA

芯片:stm32f407 开发平台:stm32cubeide 上位机开发平台:visual studio 2017 1. FLASH分配 将flash划分为四个部分: bootloader: 0x8000000-0x800ffff app1: 0x8010000-0x805ffff app2: …

一流的财务:搞数据!!!(干货)

“三流财务给数据,二流财务给分析报告,一流财务给....(解决方案)“这些文章应该很多人都看到过,这个口号粗看好像很有道理,但笔者并不认同,因为大家都忽略了一个重要的概念:数据&…

什么是rouge metric

采用分类任务的指标评估生成任务的问题 举个例子,在一个seq2seq模型中,黄金标签是“police killed the gunman”,模型输出是"the gunman police killed",两句话的意思是有差别的,但是从unigram的角度&#…

虚 拟 化原理

1 概念: ①通俗理解: 虚拟化是在硬件和操作系统之间的实践 ②通过对计算机的服务层级的理解,理解虚拟化概念 抽离层级之间的依赖关系(服务器虚拟化) 2 虚拟化分类 ①按架构分类 ◆寄居架构:装在操作系统上…

OSCP靶场--Nickel

OSCP靶场–Nickel 考点(1.POST方法请求信息 2.ftp,ssh密码复用 3.pdf文件密码爆破) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.237.99 -sV -sC -p- --min-rate 5000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-22 04:06 EST Nm…

5.1 Ajax数据爬取之初介绍

目录 1. Ajax 数据介绍 2. Ajax 分析 2.1 Ajax 例子 2.2 Ajax 分析方法 (1)在网页页面右键,检查 (2)找到network,ctrl R刷新 (3)找 Ajax 数据包 (4)…