黑马学ElasticSearch(十二)

news2024/11/17 0:25:22

目录:

(1)ES集群-集群结构介绍

(2)es集群-搭建集群

(3)es集群-集群职责及脑裂

(4)es集群-分布式新增和查询流程

(5) es集群-故障转移


(1)ES集群-集群结构介绍

 

                                                                                                                                                            (2)es集群-搭建集群

                                                                                                                                                                                                                                                                                                                          只有一台电脑, 用docker容器用来模拟节点,docker之间相互隔离,用来,模拟机器是没有问题的                                                                                                                                                             

     

  docker-compose文件是在一个文本文件里去描述多个容器的部署方式,从而形成将来一键部署,在这个compose文件里描述了我们要部署的三个ES节点的容器部署方案es01、es02、es03

image:镜像

container_name:容器的名称

node.name:节点名称,在ES中每个节点都要有一个节点名称,不能重复 

cluster.name:是集群名称,ES是天生支持集群的,启动多台机器以后,怎样形成集群呢?只需要让他的集群名称一样就可以了,集群名称一样ES会自动把它们组装成一个集群 

discovery.seed_hosts:集群中另外两个节点的ip地址,我们用的是docker容器,容器内互联可以直接用容器名互联

cluster.initial_master_nodes:初始化主节点,可以通过选举产生,配置的是哪个节点都可以参与选主

ES_JAVA_OPTS:JVM的内存大小

volumes:数据卷

     

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

把准备好的文件上传到虚拟机里面:

 

 

 

 

 有这个显示证明配置成功,虚拟机内存的大小就放开了ES就能正常个运行了

 

 运行:

 查看启动状态:

 

分被查看节点日志,监控每个节点的运行状态 

 

 

怎么去知道集群有没有运行成功呢?

 

 

解压文件: 

 

双击运行:cerebro 

 通过浏览器访问: 输入一个节点地址:可以输入虚拟机上的任意一个节点的地址,这里访问es01节点,点击连接

 

 进入:有一个绿色的条,表示集群的状态健康的

 

 实心的星代表它是主节点

 空心的星:候选节点,将来可以参与主节点的选举

 

 

 

我们需要把索引库进行分片, 在创建索引库的时候指定分片信息:

 

 

 创建索引库:

 

 点击右下角创建:

主页:显示创建的索引库,并进行了分片,实线框:0 1 2主分片 虚线框:副本分片

并且每个分片在不同的机器上,这样就确保了如果有任意一台机器宕机备份依然在保存的,避免出现数据故障

 

 (3)es集群-集群职责及脑裂

nmaster eligible:备选主节点(候选主节点)可以参与选主 ,为了防止主节点挂了,候选主节点可以顶上去,做到高可用

ingest:预处理节点,可以度节点的预处理,比如插入一个文档到索引库里,插入之前呢ingest节点,可以对这个文档做预处理,加一个字段啊,删除一个字段啊,对某些字段的内容做修改,都可以由它来做  但是在准备文档是时候已经用java代码把文档处理好了,直接往索引库插入不需要预处理

corrindinating:协调节点 比如说有用户请求搜索数据,到达协调节点,它会把这个请求路由到真正处理的数据节点上去,数据节点处理完之后把结果返回,它在把结果合并,返回给用户,协调节点自己不需要去处理,只要路由一下,路由的时候还可以随机路由,还起到负载均衡的作用。这个节点就可以说是路由+负载均衡 然后合并结果

默认ES节点同时具备这四种角色,身兼数职,但是在实际开发过程中,不能让节点身兼数职,原因:不同的职责对硬件的需要是不一样的,主节点是管理集群的,不做数据处理,只需要对cpu有一定的要请就可以了。数据节点要求较高,需要磁盘大一点,对内存要求较高,对cpu也有要求。协调节点要求较低,对cpu要求一点,对磁盘没有要求

我们可以把角色分离,针对不同的角色,给它搭配不同的硬件,来减少成本,第二个因为他们之间的职责会产生影响,比如说数据节点跟主节点耦合在一起,数据子啊处理的时候会大量的占用CPU和内存,主节点的任务有可能就不能完成了,没办法去监管整个集群了出现主节点无法连接的情况

来降低他们之间的业务影响

因此一个典型的ES集群,它一定是把每个节点的职责,分离出去,不同的节点去干不同的事,怎样去控制节点的职责呢,在环境变量里去控制几个参数

默认情况下所有节点都是协调节点,可以控制一个节点只干协调,不干别的,把上面三个都调成false

 

 有三个协调节点,N个数据节点(海量数据存储),3个候选节点(保证高可用)

还可以有一个负载均衡器,最协调节点做负载均衡比如说用nginx,用户请求来了,可以由不同的协调节点去接受,这样就提升了并发能力,协调节点,再把请求路由到数据节点,n个数据节点可以做海量数据存储,可以避免单点故障

这样的ES集群就是一个比较健壮的集群了,缺点是:搭建起来比较麻烦,往往会有一个脑裂的问题

 

  脑裂:当出现网路阻塞node1节点是好的,但是导致node1和node2 node3连接不上了

node1根其他的部分数据节点还是能联通的

node1 node2根一些数据节点也是能联通的

这时候相当于集群被分开了一部分连node1,一部分连node2 node3 ,当node2 node3连不上node1的时候,会认为node1挂了,他两会选举成新的主节点,这个时候相当于集群中出现了两个主节点

一部分节点跟node1结合,有数据做增删改查的时候由node1来控制,还有一部分由node3来结合,数据做增删改查的时候由node3来控制,这两部分各自处理各自的集群,一旦网络恢复,用户在来访问的时候会出现数据不一致的情况,这就是脑裂问题,一个集群出现了两个主节点

 

(4)es集群-分布式新增和查询流程

 

 

测试插入数据:在9200端口,相当于集群的es01节点

 

 

 查询:在9200查询

 

 在9201查询:也查到这三条

 

那么这些数据到底存储到那个分片上呢?

添加一个命令:explain:true可以查看存储到那个分片上

 

我们明明是在9200上插入的,为什么在3个片上都有呢,说明协调节点确实工作了,它是怎么工作的呢? 

 

存入的使用分片的数量运算存储,查询的时候使用分片的数量去运算那个分片查询 ,分片的数量一定不能更改了

 

 

 

(5) es集群-故障转移

当主节点挂掉之后,会重新选举,选出主节点,(此时的节点数据状态是不安全的,p-1没有副本分片,r-0没有主分片)0号片和0号片的数据是不安全的,因为只有一份一旦挂了就完了,此时寄集群的状态处于危险的边缘转态,主节点发现挂的节点 ,看一下上面有什么分片,然后把它迁移到健康的节点上面,确保任何一份分片都由两份,确保数据的安全

 

 测试把01节点停掉:

使用docker命令: 

 

颜色变了: 变黄了

 不健康了因为0 1号片每有地方放了

 

需要经过一会等待:会进行数据迁移,把故障节点的数据迁移到正常的节点上了es02和es03上都由了3个片了,集群中每一个片都由2分满足了最低要求,集群又变成绿色了,这就是故障转移

 那么数据有没有丢失呢?查询一下变没有丢失

 如果重启es01:

控制台等待一下:es01恢复,此时他不是主节点了,此时主分片es03把分片又迁回去了,确保每个分片上都有数据,重新做了rebanlace,确保数据是均衡的

 

 此时es01也能正常工作:

 

 

 

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

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

相关文章

传输层协议:TCP协议(下)——运作方式(如何三次握手、四次挥手等)

运作方式 TCP协议的运行可划分为三个阶段:连接创建(connection establishment)、数据传送(data transfer)和连接终止(connection termination)。操作系统将TCP连接抽象为套接字表示的本地端点(local end-p…

【PyTorch】教程:学习基础知识-(6) Autograd

AUTOMATIC DIFFERENTIATION WITH torch.autograd 在训练神经网络时,最常用的算法是反向传播算法,在该算法中,参数根据损失函数相对于给定参数的梯度进行调整。 为了计算这些梯度, PyTorch 有一个内置的微分引擎 torch.autograd …

2022秋招算法岗面经题:训练模型时loss除以10和学习率除以10真的等价吗(SGD等价,Adam不等价)

问题描述:训练深度学习模型时loss除以10和学习率除以10等价吗? 先说结论 这个问题的答案与优化器有关 使用Adam、Adagrad、RMSprop等带有二阶动量vtv_tvt​的优化器训练时,当我们将loss除以10,对训练几乎没有影响。使用SGD、Mo…

Streamlit自定义组件开发教程

在这篇文章中,我们将学习如何构建Streamlit组件以及如何发布streamlit组件供其他人使用。 使用 3D场景编辑器快速搭建三维数字孪生场景 1、什么是Streamlit组件? Streamlit 组件是一个可共享的 Streamlit 插件,可让你为应用程序添加新的视觉…

Java——子集

题目链接 leetcode在线oj题——子集 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 题目示例 输入:nums [1,2,3] …

MySQL管理

1:MySQL管理1.1:系统数据库Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下: 数据库 含义 mysql 存储MySQL服务器正常运行所需要的各种信息 (时区、主从、用 户、权限等) information…

性能测试/实战演示 H5 性能分析

W3C标准是浏览器标准,一般浏览器都支持W3C标准,它规定使用者可以通过api查询性能信息,可借用W3C协议完成自动化H5性能测试。 W3C官网:Navigation Timing 使用chrome浏览器对webview进行手工查看,伴随着业务增多&#x…

mysql:索引的数据结构,B树,B+树浅聊

mysql:索引的数据结构 什么是索引? 索引(Index)是帮助MySQL高效获取数据的数据结构 为什么学索引? 之前应该有概念说,把索引理解为目录,比如通过s就可以查询到s开头的汉子从哪也开始&#xff…

[网鼎杯 2020 青龙组]AreUSerialz

目录 信息收集 代码审计 前提知识 思路分析 绕过检测 方法一 poc payload 方法二 poc payload 信息收集 进入页面给出了源代码如下&#xff0c;是一道PHP的反序列化题目 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {pro…

Linux多线程 线程概念 | 线程VS进程 | 线程控制【万字精讲】

线程 一、线程概念 1. 知识支持及回顾 在我们一开始学习进程的时候。我们总说进程在内部执行时&#xff0c;是OS操作系统调度的基本单位。其实并不严谨&#xff0c;今天&#xff0c;我们要重新完善这个说法——线程在进程内部运行&#xff0c;线程是OS操作系统调度的基本单位…

WorkPlus移动办公平台,助力企业随时随地“指尖办公”

近年来&#xff0c;随着移动互联网的发展&#xff0c;越来越多的人习惯于随时随地通过移动设备完成工作、购物、游戏等。移动办公应用就是基于移动终端的信息化办公应用&#xff0c;利用企微、钉钉、WorkPlus等移动办公平台&#xff0c;实现企业与员工间的随时随地工作、沟通&a…

技术分享 | ClickHouse StarRocks 使用经验分享

作者&#xff1a;许天云 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 一. 大纲 本篇分享下个人在实时数仓方向的一些使用经验&#xff0c;主要包含了ClickHouse 和 StarRocks 这两款目…

ASP.NET MVC解决方案的搭建(.NET Framework)——C#系列(一)

一、新建项目 1、控制器新建 2、Service层新建 3、Business数据层新建 4、Commons公共层新建 5、Models实体层新建 二、调用接口 1、接口建立 Web API 2 控制器新建 2、调用 三、Swagger接口调试配置 1、添加NuGet包 在启动项中添加Swashbuckle NuGet包 2、访问 htt…

Vivado2018.3安装及注册指南-安装包获取

一、vivado 介绍 vivado设计套件 是FPGA 厂商赛灵思&#xff08;Xilinx&#xff09;公司最新的为其产品定制的集成开发环境&#xff0c;支持Block Design、Verilog、VHDL等多种设计输入方式&#xff0c;内嵌综合器以及仿真器&#xff0c;可以完成从设计输入、综合适配、仿真到…

mysql存储过程的基础知识

本文来简单说下存储过程的基础知识 文章目录概述什么是存储过程存储过程的优缺点概述 mysql官网提供的储存过程&#xff1a;https://www.mysqlzh.com/doc/225/499.html 什么是存储过程 简单的说&#xff0c;存储过程是一条或者多条SQL语句的集合&#xff0c;可视为批文件&…

SAP采购中不基于收货的发票校验的价差计算过程实例

年前最后一天上班了&#xff0c;我还在帮财务分析一个价差问题。源于财务用户头天的一个请求&#xff0c;在不基于收货的发票校验中&#xff0c;计算倒不难&#xff0c;难的是梳理数量的逻辑关系。不过总算时间也没白花&#xff0c;记录下来。下次就不算了&#xff0c;能解释清…

理解使用并查集

目录 一.并查集原理 1.概念&#xff1a; 2.性质 3.形式 4. 合并方式 二.并查集实现 1.成员变量 2.构造函数 3.查找根 4.合并集合 5.判断是否在一个集合 6.查看集合数量 三.并查集总代码 前言&#xff1a;理解并查集是为了接下来学习图要用&#xff0c;而会使用并查…

Linux:系统性能监控工具-tsar安装和使用

在上家公司做性能压力测试时就用过tsar&#xff0c;但总结文档留在了内部&#xff0c;正好借着最近工作内容又用上了tsar&#xff0c;总结起来 目录前言tsar介绍总体架构安装tasrtsar配置介绍配置文件定时任务配置日志文件tsar使用tsar实际使用参考查看可用的监控模块列表查看C…

本松新材创业板IPO终止:业绩下滑,客户较集中,周永松为实控人

撰稿|汤汤 来源|贝多财经 近日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;杭州本松新材料技术股份有限公司&#xff08;下称“本松新材”&#xff09;提交了撤回上市申请文件的申请&#xff0c;保荐人财通证券也撤回对该公司的保荐。因此&#xff0c;深交所终止了…

目标检测:YOLOV3技术详解

目标检测&#xff1a;YOLOV3技术详解前言主要改进DarkNet53新的分类器正负样本的匹配损失函数前言 YOLOV3是V2的升级版&#xff0c;也是原作者的绝笔&#xff0c;V3主要还是把当时一些有用的思想融入了进来&#xff0c;没有什么创新型的突破&#xff0c;具体细节我们下面介绍。…