橘子学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.rhkb.cn/news/263230.html

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

相关文章

ES6内置对象 - Map

Map(Map对象保存键值对,键值均不限制类型) 特点: 有序(Set集合是无序的);键值对(键可以是任意类型);键名不能重复(如果重复,则覆盖&…

Git的基本操作和原理

目录 写在前面的话 为什么要有Git(git初识)? Git安装(Centos为例) Git基本操作 创建Git本地仓库 Git配置 认识工作区、暂存区、版本库 概念认识 添加文件 查看.git文件 修改文件 版本回退 撤销修改 情况一:…

UnityWebGL 设置全屏

这是Unity导出Web默认打开的页面尺寸 修改后效果 修改 index.html 文件 1.div元素的id属性值为"unity-container",宽度和高度都设置为100%,意味着该div元素将占据整个父容器的空间。canvas元素的id属性值为"unity-canvas"&#xff…

Code-Audit(代码审计)习题记录6-7

介绍: 自己懒得搭建靶场了,靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习,可以随地访问,本文所有的题目均来源于网站HSCSEC-Code Audit 6、习题6 题目内容如下: 源代…

Autoencoder深度学习中的无监督学习神经网络

在当今的深度学习领域中,自动编码器(Autoencoder)是一种常见的无监督学习神经网络模型,用于学习有效的数据表示。自动编码器在许多领域都有广泛的应用,包括特征提取、降维、图像去噪、生成模型等。 自动编码器的基本原…

Redis篇之缓存雪崩、击穿、穿透详解

学习材料:https://xiaolincoding.com/redis/cluster/cache_problem.html 缓存雪崩 什么是缓存雪崩 在面对业务量较大的查询场景时,会把数据库中的数据缓存至redis中,避免大量的读写请求同时访问mysql客户端导致系统崩溃。这种情况下&#x…

Linux运维-Web服务器的配置与管理(PHP)

Web服务器的配置与管理(PHP) 项目场景 某企业在CentOS上搭建Web服务系统,以PHP作为网页开发环境,以MySQL为后台数据库。 基础知识 PHP PHP原始为Personal Home Page的缩写,已经正式更名为 “PHP: Hypertext Preprocessor”(超…

持续集成,持续交付和持续部署的概念,以及GitLab CI / CD的介绍

引言:上一期我们部署好了gitlab极狐网页版,今天我们介绍一下GitLabCI / CD 目录 一、为什么要 CI / CD 方法 1、持续集成 2、持续交付 3、持续部署 二、GitLab CI / CD简介 三、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 …

Unity之PUN2插件实现多人联机射击游戏

目录 📖一、准备工作 📺二、UI界面处理 📱2.1 登录UI并连接PUN2服务器 📱2.2 游戏大厅界面UI 📱2.3 创建房间UI 📱2.4 进入房间UI 📱2.5 玩家准备状态 📱2.6 加载战斗场景…

AI时代显卡如何选择,B100、H200、L40S、A100、H100、V100 含架构技术和性能对比

AI时代显卡如何选择,B100、H200、L40S、A100、H100、V100 含架构技术和性能对比。 英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构技术和性能对比带你解决疑惑。 近期,AIGC领域呈现出一片繁荣景象&a…

ESP8266智能家居(4)——开发APP基础篇

1.前期准备 安装好Android studio 开发环境 准备一台完好的安卓手机 手机要处于开发者模式 设置 --->关于手机---> 一直点击版本号 (不同手机进入开发者模式的步骤可能不太一样) 进入开发者模式后,找到辅助功能,打开开…

字符函数和字符串函数(C语言进阶)(一)

前言 C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。 字符串常量适用于哪些对它不做修改的字符串函数。 1、函数介绍 1.1 strlen strlen:计算字符串长度 看一个代码&…

​LeetCode解法汇总2583. 二叉树中的第 K 大层和

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给你一棵二叉树的根节点 root 和一个正整…

编译GreatSQL with RocksDB引擎

GreatSQL里也能用上RocksDB引擎 1. 前言 RocksDB 是基于Facebook 开源的一种支持事务的、高度可压缩、高性能的MyRocks存储引擎,特别适用于高度压缩和大容量的数据。以下是一些关键特点: 高性能: LSM 树结构使得RocksDB在写入密集型负载下表现…

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 2. 事件和信号 事件与信号并不相同,比如我们使用鼠标点击了一下界面上的按钮,那么就会产生…

微服务三十五关

1.微服务有什么好处? 微服务优点很多,但是我们通常说一个东西好肯定会跟另一个东西比较, 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处: 首先,让我们讨论单体项目的一些主要缺点&a…

uniapp腾讯地图JavaScript Api,H5端和原生APP端可用

因项目需要,在uniapp中集成使用腾讯地图,为了方便维护,希望通过一套代码实现H5和APP同时可用。H5显示相对简单,APP端比较麻烦,记录下实现过程 一、集成步骤 1.使用 renderjs script标签使用renderjs,因为…

Java基础之lambda表达式(五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

C# If与Switch的区别

在 switch 语句中使用表达式比较时,编译器会生成一个查找表,其中包含所有表达式的值和对应的 case 标签。因此,与使用常量或字面量比较相比,使用表达式比较可能会略微降低性能。 只有当 switch 语句中的所有 case 标签都使用常量或…

Java编程实战:构建医疗信息管理新平台

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…