ES集群原理与搭建

ES集群原理与搭建,第1张

查看集群健康状况:URL+ /GET _cat/health

Cluster

代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

Shards

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

replicas

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

Recovery

代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

(2)、ES为什么要实现集群

在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。

我们可以采用ES集群,将单个索引的分片到多个不同分布式物理机器上存储,从而可以实现高可用、容错性等。

ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。

(3)、ES是如何解决高并发

ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制、集群发现、分片负载均衡请求路由。

Shards 分片:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

Replicas分片:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储。每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards。

注意:索引的主分片primary shards定义好后,后面不能做修改。

2、为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡。

注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上。主分片primary shards可以和其他replics shards存放在同一个node节点上。

3、documnet routing(数据路由)

当客户端发起创建document的时候,es需要确定这个document放在该index哪个shard上。这个过程就是数据路由。

路由算法:shard = hash(routing) % number_of_primary_shards

如果number_of_primary_shards在查询的时候取余发生的变化,无法获取到该数据

注意:索引的主分片数量定义好后,不能被修改

高可用视图分析(下图所示:上面的图,如果节点1与节点2宕机了,es集群数据就不完整了。下面图,如果节点1与节点2宕机了,es集群数据还是完整的)

(1)、服务器环境

准备三台服务器集群

| 服务器名称 | IP地址 |
| node-1 | 192168212182 |
| node-2 | 192168212183 |
| node-3 | 192168212184 |

(2)、关闭防火墙

(3)、 >ES版本依赖: >Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
入门请参照: >

可以通过安装虚拟机实现,利用vmware公司的esxi这款产品实现。

配置方法:

esxi里面自带有集群这一项功能,可将多台服务器添加到集群中来,集群建好后还可以利用里面的ha(高可用性)、drs(分布式存储调试),evc(多硬件兼容)等多种特性将多台服务器的硬件资源加入到一个资源池里,可对硬件的资源做分配。

以百分比的方式做权重,可 *** 控这个资源池里的硬件资源分别分配多少到平台上建好的虚拟机上,可用于生产环境中。

esxi是vmware的虚拟机软件的企业版,底层系统直接安装在服务器上,无需像windows server 2008的hyper v那样依赖于windows *** 作系统,不用再多占用多余的硬件资源,性能非常好。

esxi简介:

ESXi专为运行虚拟机、最大限度降低配置要求和简化部署而设计。只需几分钟时间,客户便可完成从安装到运行虚拟机的全过程,特别是在下载并安装预配置虚拟设备的时候。

在VMware Virtual Appliance Marketplace 上有800多款为VMware hypervisor 创建的虚拟设备。

如今,ESXi已经实现了与Virtual Appliance Marketplace的直接整合,使用户能够即刻下载并运行虚拟设备。这为即插即用型软件的交付与安装提供了一种全新和极其简化的方式。

一、实战环境
系统版本:CentOS 58x86_64
JAVA版本:JDK-170_25
Hadoop版本:hadoop-220
192168149128namenode (充当namenode、secondary namenode和ResourceManager角色)
192168149129datanode1 (充当datanode、nodemanager角色)
192168149130datanode2 (充当datanode、nodemanager角色)
二、系统准备
1、Hadoop可以从Apache官方网站直接下载最新版本Hadoop22。官方目前是提供了linux32位系统可执行文件,所以如果需要在64位系统上部署则需要单独下载src 源码自行编译。(如果是真实线上环境,请下载64位hadoop版本,这样可以避免很多问题,这里我实验采用的是32位版本)
1234 Hadoop
Java
2、我们这里采用三台CnetOS服务器来搭建Hadoop集群,分别的角色如上已经注明。
第一步:我们需要在三台服务器的/etc/hosts里面设置对应的主机名如下(真实环境可以使用内网DNS解析)
[root@node1 hadoop]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail
127001localhostlocaldomain localhost
192168149128node1
192168149129node2
192168149130node3
(注 我们需要在namenode、datanode三台服务器上都配置hosts解析)
第二步:从namenode上无密码登陆各台datanode服务器,需要做如下配置:
在namenode 128上执行ssh-keygen,一路Enter回车即可。
然后把公钥/root/ssh/id_rsapub拷贝到datanode服务器即可,拷贝方法如下:
ssh-copy-id -i ssh/id_rsapub root@192168149129
ssh-copy-id -i ssh/id_rsapub root@192168149130
三、Java安装配置
tar -xvzf jdk-7u25-linux-x64targz &&mkdir -p /usr/java/ ; mv /jdk170_25 /usr/java/ 即可。
安装完毕并配置java环境变量,在/etc/profile末尾添加如下代码:
export JAVA_HOME=/usr/java/jdk170_25/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVE_HOME/lib/dtjar:$JAVE_HOME/lib/toolsjar:/
保存退出即可,然后执行source /etc/profile 生效。在命令行执行java -version 如下代表JAVA安装成功。
[root@node1 ~]# java -version
java version "170_25"
Java(TM) SE Runtime Environment (build 170_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 2325-b01, mixed mode)
(注 我们需要在namenode、datanode三台服务器上都安装Java JDK版本)
四、Hadoop版本安装
官方下载的hadoop220版本,不用编译直接解压安装就可以使用了,如下:
第一步解压:
tar -xzvf hadoop-220targz &&mv hadoop-220/data/hadoop/
(注 先在namenode服务器上都安装hadoop版本即可,datanode先不用安装,待会修改完配置后统一安装datanode)
第二步配置变量:
在/etc/profile末尾继续添加如下代码,并执行source /etc/profile生效。
export HADOOP_HOME=/data/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin/
export JAVA_LIBRARY_PATH=/data/hadoop/lib/native/
(注 我们需要在namenode、datanode三台服务器上都配置Hadoop相关变量)
五、配置Hadoop
在namenode上配置,我们需要修改如下几个地方:
1、修改vi /data/hadoop/etc/hadoop/core-sitexml 内容为如下:
<xml version="10">
<xml-stylesheet type="text/xsl"href=\'#\'" Put site-specific property overrides inthisfile -->
<configuration>
<property>
<name>fsdefaultname</name>
<value>hdfs://192168149128:9000</value>
</property>
<property>
<name>hadooptmpdir</name>
<value>/tmp/hadoop-${username}</value>
<description>A base forother temporary directories</description>
</property>
</configuration>
2、修改vi /data/hadoop/etc/hadoop/mapred-sitexml内容为如下:
<xml version="10">
<xml-stylesheet type="text/xsl"href=\'#\'" Put site-specific property overrides inthisfile -->
<configuration>
<property>
<name>mapredjobtracker</name>
<value>192168149128:9001</value>
</property>
</configuration>
3、修改vi /data/hadoop/etc/hadoop/hdfs-sitexml内容为如下:
<xml version="10"encoding="UTF-8">
<xml-stylesheet type="text/xsl"href=\'#\'" /name>
<value>/data/hadoop/data_name1,/data/hadoop/data_name2</value>
</property>
<property>
<name>dfsdatadir</name>
<value>/data/hadoop/data_1,/data/hadoop/data_2</value>
</property>
<property>
<name>dfsreplication</name>
<value>2</value>
</property>
</configuration>
4、在/data/hadoop/etc/hadoop/hadoop-envsh文件末尾追加JAV_HOME变量:
echo "export JAVA_HOME=/usr/java/jdk170_25/">> /data/hadoop/etc/hadoop/hadoop-envsh
5、修改 vi /data/hadoop/etc/hadoop/masters文件内容为如下:
192168149128
6、修改vi /data/hadoop/etc/hadoop/slaves文件内容为如下:
192168149129
192168149130
如上配置完毕,以上的配置具体含义在这里就不做过多的解释了,搭建的时候不明白,可以查看一下相关的官方文档。
如上namenode就基本搭建完毕,接下来我们需要部署datanode,部署datanode相对简单,执行如下 *** 作即可。
1 fori in`seq 129130` ; doscp -r /data/hadoop/ root@192168149$i:/data/ ; done
自此整个集群基本搭建完毕,接下来就是启动hadoop集群了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13468651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-13
下一篇 2023-08-13

发表评论

登录后才能评论

评论列表(0条)