ElasticSearch集群搭建图文解析

ElasticSearch集群搭建图文解析/前言/      ElasticSearch作为一个分布式搜索引擎有着广泛的应用场景,而搜索服务在在一个项目中的权重还是比较高的,所以我们要想办法去提高搜索服务的可用性,这就是ElasticSearch集群的作用,为搜索服务提供高可用的特性       何为高可用呢,其实就是字面意思,假设我们的搜索服务可以一直不停的提供服务,那么高可用性就是100%,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

/ 前言 /

       ElasticSearch作为一个分布式搜索引擎有着广泛的应用场景, 而搜索服务在在一个项目中的权重还是比较高的, 所以我们要想办法去提高搜索服务的可用性, 这就是ElasticSearch集群的作用, 为搜索服务提供高可用的特性

        何为高可用呢, 其实就是字面意思, 假设我们的搜索服务可以一直不停的提供服务, 那么高可用性就是100%, 如果一周之内停机了30分钟, 那可用性就是99.7%

        本文主要包含以下内容

ElasticSearch的信息存储机制
ElasticSearch的节点类型
ElasticSearch启动常见异常及解决方案
如何搭建ElasticSearch集群
如何关闭ElasticSearch服务(附Shell脚本)

/ 1 / 了解ElasticSearch

1 . 1 ElasticSearch版本的事情

这里我们重点关注7.x版本, 这个版本有俩个事情需要知道

  • 内置JDK(根据ES版本内置不同版本的JDK), 如7.7内置的就是JDK13
  • Security功能免费使用, 但是高级安全功能任然需要付费
1 . 2 集群如何保证数据不会丢失(信息存储机制)

我们知道宕机是无法避免的, 我们只能减小因宕机而造成的损失, 那么ElasticSearch集群是如何避免的呢?

我们需要先了解俩个概念, 分片(Shard)和副本(Replica)

  • 分片(Shard) : 我们知道ElasticSearch中会存在多个数据库, 每个数据库会生成5(默认)个分片, 数据存储在分片中, ElasticSearch会将分片均匀的分布在进群中, 避免一台主机宕机后数据无法访问
  • 副本(Replica) : 每个分片同时会生成一个副本, 副本的内容同分片一致, 分片和副本几乎不会被分配在同一台主机, 这样做是为了防止分片所在的主机和数据库所在的主机同时宕机后导致这部分数据无法访问

       总结来说就是ElasticSearch会为当前的数据库默认生成5个分片和5个副本, 副本是分片中数据的备份, ElasticSearch会将其尽可能的均匀分布开来, 分片和对应的副本尽量不会分配到同一台主机, 这样就可以保证即使有一台主机突然宕机了我还可以用过分片或者副本将数据还原

1 . 3 集群中的节点
  • 主节点(Master): 这个概念大家应该不陌生了, 它就相当于管理者, 负责管理集群, 分片和副本的分配也是它负责的, 没了管理者的后果是什么啊, 那就是分裂山头, 各自为王, 你不搭理我我不搭理你, 所以主节点非常重要, 一般都会有替补, 因为我们上面已经说过了, 宕机是不可避免的, 我们能做的只有尽量避免因宕机而造成的损失
  • 数据节点(Data) : 存储数据的节点, 负责数据的增删改查, 对内存及磁盘要求较高, 一般数据节点在集群中的占比最高
  • 路由/负载节点(client) : 负责搜索请求的分发, 协调节点将请求转发到保存数据的数据节点, 并将结果返回给路由节点, 减缓数据节点的压力, 一般在大型集群中可以看到 . 如果当前节点既不是主节点也不是数据节点, 那么就会成为路由节点
  • 部落节点(tribe) : 在7.x中被删除, 负责协调多个ES集群, 充当联络官, 会将所有集群合并为全局集群, 可以对全局集群中单独的节点执行本地读写操作, 但是无法操作全局集群中重复的索引
  • 提取节点(Ingest) : 负责对文档进行预处理操作, 例如进行数据转换, 将String转换为日期或是将整数/浮点数转换为字符串 . 默认情况下, 所有节点都支持提取功能

如何进行节点的配置

  • 一个节点 : 当前节点既是主节点也是数据节点
  • 3 – 5个节点 : 通常为所有节点都是数据存储节点, 并全部设置为主节点, 让集群自动选举. 也可以根据数据量和请求流量来进行拆分为单独的主节点及数据节点. 并且为了防止发生脑裂, 主节点数量必须>=((节点数量/2) + 1)
  • 6 – n : 拆分独立的主节点、数据节点、路由节点, 并且要保证主节点的数量, 防止发生脑裂

/ 2 / 搭建ElasticSearch集群

2 . 1 搭建前准备
  • 准备主机

    192.168.0.1
    192.168.0.2
    192.168.0.3
    192.168.0.4
    192.168.0.5
    
  • 主机之间相互可以ping通

  • 建议关闭所有主机的防火墙, 或者打开9200及9300的端口

  • ElasticSearch7.x以下版本需要准备JDK, 并且版本必须跟ElasticSearch对应

2 . 2 安装ElasticSearch

ElasticSearch官方下载地址

  • 下载安装包

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-linux-x86_64.tar.gz
    
  • 解压安装包

    # /opt是你指定的安装目录
    tar -xf elasticsearch-7.7.0-linux-x86_64.tar.gz -C /opt
    
  • 建立软链接

    # /elasticsearch是指定的软连接目录,可以为空,在建立软连接是自动创建
    ln -s /opt/elasticsearch-7.7.0   /opt/elasticsearch
    

    软连接建立失败的话elasticsearch文件夹是红色, 建立成功是蓝色的
    ElasticSearch集群搭建图文解析

2 . 3 修改配置文件

elasticsearch.yml

# 集群名称
cluster.name: es-cluster
  
# 节点名称,注意:同一集群内节点名称不能相同
node.name: "node-1"
  
# 当前节点是否是主节点
node.master: true
  
# 当前节点是否是数据节点
node.data: true
  
# 是否禁用提取节点
node.ingest: false
  
# 一台主机能运行的节点最大数量
node.max_local_storage_nodes: 1
  
# 集群中符合主节点条件的节点数量, 数量为(节点数量 / 2 + 1)
discovery.zen.minimum_master_nodes: 2
  
# 集群自举配置, 只在首次启动集群时游泳, 集群初始化时会读取该参数去寻找符合主节点条件的节点的主机名或 IP 地址
cluster.initial_master_nodes: ["node-1","node-2"]
#cluster.initial_master_nodes: ["192.168.0.1","192.168.232.137"]

# 绑定的ip地址,当前主机的ip地址
network.bind_host: 192.168.0.1
  
# 节点交互的端口,注意该端口仅负责节点之间交互,无法直接访问
transport.tcp.port: 9300
  
# 对外服务的端口,可以根据该端口查看当前节点状态和集群状态
http.port: 9200
  
# 是否允许跨域
http.cors.enabled: true
  
# 允许跨域的地址
http.cors.allow-origin: "http://192.168.0.1:8080"
  
# 集群中其它节点与当前节点通信的ip地址,可以设置为当前主机ip,也可根据实际情况设置
network.publish_host: 192.168.0.1
  
# 设置为当前主机ip不允许外网访问,想要允许外网访问可以设置为0.0.0.0
network.host: 192.168.0.1
  
# 所有的主节点列表, 用于被集群发现
discovery.zen.ping.unicast.hosts: ["192.168.0.1:9300","192.168.0.2:9300"]

不同的主机修改node.namenetwork.hostnetwork.bind_host即可

2 . 4 启动ElasticSearch

ElasticSearch从5.0版本开始就不允许再使用root用户启动服务了, 所以我们需要为单独创建一个用户用来启动ES

# 创建用户,除了root用户外,其余用户都可以存放在/home下
useradd -d /home/es es

# 赋予用户权限
chmod -R es /opt/elasticsearch

启动ElasticSearch

cd elasticsearch
# 切换为ES启动用户
su es
# 日志打印在终端中
./bin/elasticsearch

# 后台启动
./bin/elasticsearch -d

# 后台启动并将日志打印到文件中
nohup ./bin/elasticsearch -d &

启动时会输出一条日志, 无需理会

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

验证是否启动

curl 192.168.0.1:9200
{ 
   
  "name" : "node-1",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "ijsTRA5iSPiS84B91-skwQ",
  "version" : { 
   
    "number" : "7.4.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
    "build_date" : "2019-10-28T20:40:44.881551Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

当返回数据中cluster_uuid有值就代表着集群已经启动了

ElasticSearch常见启动异常及解决方案请看我的另一篇博文

ElasticSearch常见启动异常及解决方案

查看集群状态,数据太多了我们就只展示一部分

curl 192.168.0.1:9200/_cluster/state?pretty

{ 
   
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "ijsTRA5iSPiS84B91-skwQ",
  "version" : 23,
  "state_uuid" : "BBECx15qS5iEV8TQ36Lb4Q",
  # 主节点的uuid,我们可以看到当前主节点是node-2
  "master_node" : "jj2lwwPTT_-RC6Hj6Hv5Ww",
  "blocks" : { 
    },
  # 集群的全部节点
  "nodes" : { 
   
    "jj2lwwPTT_-RC6Hj6Hv5Ww" : { 
   
      "name" : "node-2",
      "ephemeral_id" : "F_pgnQRYS_2W7CR3f-L0BQ",
      "transport_address" : "192.168.232.137:9310",
      "attributes" : { 
   
        "ml.machine_memory" : "1019826176",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true"
      }
    },
    "KfUN9MUtTGCM8qMpsWX-Zw" : { 
   
      "name" : "node-1",
      "ephemeral_id" : "mjcI-PyqRnukT15-KfxVLg",
      "transport_address" : "192.168.232.136:9310",
      "attributes" : { 
   
        "ml.machine_memory" : "1019826176",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true"
      }
    }
  },
  "metadata" : { 
   
    "cluster_uuid" : "ijsTRA5iSPiS84B91-skwQ",
    "cluster_coordination" : { 
   
      "term" : 2,
      "last_committed_config" : [
        "jj2lwwPTT_-RC6Hj6Hv5Ww"
      ],
      "last_accepted_config" : [
        "jj2lwwPTT_-RC6Hj6Hv5Ww"
      ],
      "voting_config_exclusions" : [ ]
    },
    ...
  }
  ...
}

/ 3 / 关闭ElasticSearch

ElasticSearch的关闭只能通过kill命令来杀掉ES的进程

ps -ef|grep elasticsearch
kill -9 12311

为大家提供一个Shell脚本来实现关闭ES

PID=$(ps -ef|grep elasticsearch|grep -v grep|awk '{print $2}')
if [ -z $PID ]; then
        echo "process elasticsearch not exist"
        exit
else
        echo "process id: $PID"
        kill -9 ${PID}
        echo "process elasticsearch killed"
fi

[es@node-1 opt]$ sh kill.sh
process id: 9292
process elasticsearch killed

参考文章 :

ElasticSearch官方文档

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182460.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Ubuntu下VLC播放器的字幕乱码问题

    Ubuntu下VLC播放器的字幕乱码问题为了为可能进入的实验室实习做准备,今天重新装上了Ubuntu,今天的安装总的来说还是顺利多了。在播放软件上,这次我选择了VLC,因为感觉mplayer虽然强大,但是始终界面不是十分友好。而VLC也是灰常强大的。但是,在Linux下播放电影时,经常会遇到乱码的问题,下面就谈谈我的经验。造成字幕乱码的原因可能有两个:1.GB字符的解码:因为Linux下中文默认采取utf-

  • labview车牌识别教学视频(车牌识别)

    OCR从本质上可看作是目标分类和识别的一种实际应用,因此它也包括训练和分类过程。

  • java 生成中文字符乱码,java汉字乱码的原因与解决方法

    java 生成中文字符乱码,java汉字乱码的原因与解决方法在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。1、在网页中输出中文。JAVA在网络传输中使用的编码是”ISO-8859-1″,故在输出时需要进行转化,如:Stringstr=”中文”;str=newString(str.get…

  • Python 获取时间戳_python精确到毫秒时间戳

    Python 获取时间戳_python精确到毫秒时间戳python获取当前时间戳的方法:1、使用time模块,语法为“time.time()”;2、使用datetime模块,语法为“datetime.datetime.now().timestamp()”。使用模块timeimporttimenow=time.time()print(now)1593580247.232345使用模块datetime模块datetime提供了以更面向对象的方式操作…

  • cad制图常用命令_cad制图注意事项及细节

    cad制图常用命令_cad制图注意事项及细节AutoCAD常见命令总结1.选项:OP2.缩放:z3.鼠标操作:滚动中键缩放,按住中键移动4.选择:实线,虚线。5.直线:线性(标记),对象捕捉。6.尺寸线:几何尺寸,定位尺寸。从左,上标记。7.标注:规范标注(尺寸界限与几何线之间不能重合),快速标注(按空格),连续标注(需提前标好一个)。8.直线定位法。9.画斜线公式:@长度……

  • Zuul网关集群_zuul网关

    Zuul网关集群_zuul网关1,Zuul网关集群原理![在这里插入图片描述](https://img-blog.csdnimg.cn/20201019212045203.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4ODQ1Mjcx,size_16,color_FFFFFF,t_70#pic_center)…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号