Elasticsearch集群搭建

ElasticSearch是java开发的一个基于Lucene的搜索服务器。你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速。

1. 基本概念

Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。

单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

  • index: es里的index相当于一个数据库。
  • type: 相当于数据库里的一个表。
  • id: 唯一,相当于主键。
  • node:节点是es实例,一台机器可以运行多个实例,但是同一台机器上的实例在配置文件中要确保http和tcp端口不同。
  • cluster:代表一个集群,集群中有多个节点,其中有一个会被选为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。
  • shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
  • replicas:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

2. 安装

2.1 环境
  • CentOS 7 系统

  • java version “1.8.0_152”

  • elasticsearch-5.6.4

elasticsearch-5.5.1运行需要java8。官网上说最好是1.8.0_73的版本(We recommend installing Java version 1.8.0_73 or later)

2.2 通过yum安装

生产上为了安全起见,大家可以新建一个账户,使用新账户来安装,这里为了方便,我直接使用当前登录的账号安装。

elasticsearch使用最简单的yum命令即可进行安装

$ yum install elasticsearch

配置和启动ES服务器进程

#添加在启动服务中
$ chkconfig --add elasticsearch #或者不加人服务,直接启动 /etc/init.d/elasticsearch start

$systemctl start elasticsearch #或者service elasticsearch start

yum安装的一些默认安装的文件路径如下:

TypeDescriptionDefault LocationSetting
binBinary scripts including elasticsearch to start a node and elasticsearch-plugin to install plugins/usr/share/elasticsearch/bin
dataThe location of the data files of each index / shard allocated on the node. Can hold multiple locations./var/lib/elasticsearchpath.data
logsLog files location./var/log/elasticsearchpath.logs
pulginsPlugin files location. Each plugin will be contained in a subdirectory./usr/share/elasticsearch/plugins

这些目录在安装过程中如果出现问题会派上用场,我这里使用的是yum方式,其实我更喜欢使用下面一种方式。

2.3 使用tar包安装

下载Elasticsearch

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.4.tar.gz

解压到当前目录

$ tar -zxvf elasticsearch-5.6.4.tar.gz

安装,将Elasticsearch移动到/usr/local/elasticsearch目录之中

$ mv elasticsearch-5.6.4 /usr/local/elasticsearch

启动elasticsearch服务

$ ./bin/elasticsearch –d –d表示后台运行

如果此时出现”max virtual memory areas vm.maxmapcount [65530] is too low”错误,要运行下面的命令。

$ sudo sysctl -w vm.max_map_count=262144
2.4 测试服务

如果一切正常,Elastic 就会在默认的9200端口运行。这时,请求该端口,会得到说明信息。

$ curl localhost:9200
{
  "name" : "hsDEW05",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "3LS0A1XxTY2JOZ1nC_A4-w",
  "version" : {
    "number" : "5.6.4",
    "build_hash" : "8bbedf5",
    "build_date" : "2017-10-31T18:55:38.105Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

注意,如果失败,请注意关闭防火墙。

默认情况下,Elastic 只允许本机访问,如果需要远程访问,可以修改 Elastic 安装目录的配置elasticsearch.yml,将network.host值改成0.0.0.0,然后重新启动 Elastic。

network.host: 0.0.0.0

上面代码中,设成0.0.0.0让任何人都可以访问。线上服务不要这样设置,要设成具体的 IP。

3. 集群搭建

多机集群中的节点可以分为master nodes和data nodes,在配置文件中使用Zen发现(Zen discovery)机制来管理不同节点。Zen发现是ES自带的默认发现机制,使用多播发现其它节点。只要启动一个新的ES节点并设置和集群相同的名称这个节点就会被加入到集群中。

在局域网中搭建elasticsearch集群,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群。非局域网下要设置discovery.zen.ping.unicast.hosts,一般这些都配上。

Elasticsearch集群中有的节点一般有三种角色:master node、data node和client node。

  • master node:master 节点主要用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等。
  • data node:data 节点上保存了数据分片。它负责数据相关操作,比如分片的 CRUD,以及搜索和整合操作。这些操作都比较消耗CPU、内存和 I/O 资源。
  • client node:client 节点起到路由请求的作用,实际上可以看做负载均衡器。( 对于没有很多请求的业务,client node可以不加,master和data足矣)

这里利用虚拟机(VMware)进行多机集群配置,在前面我们已经在一台虚拟机上安装了elasticsearch服务,接着我们可以利用虚拟机的克隆技术,可以克隆出一台完全一样的虚拟机。之前一台作为master节点,克隆出来的这一台作为data节点,接下来主要就是配置工作了。

yum安装的,配置文件在/etc/elasticsearch/elasticsearch.yml,以下是我的master节点配置:

# Use a descriptive name for your cluster:
#
cluster.name: my-es #配置集群,这里一定要保持一致。
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1 #节点名称

network.host: 192.168.124.128 #
#
# Set a custom port for HTTP:
#
http.port: 9200

# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
http.cors.enabled: true
#http.cors.allow-credentials: true
#http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
#http.cors.max-age: 0
http.cors.allow-origin: "*"
#http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type,Content-Lengt

node.master: true
node.data: true
http.enabled: true #是否开启http服务对外提供服务
#discovery.zen.ping.multicast.enabled: true #设置是否打开多播发现节点
discovery.zen.ping.unicast.hosts: ["192.168.124.128","192.169.124.130"]
#discovery.zen.minimum_master_nodes: 2

data节点配置:

# Use a descriptive name for your cluster:
#
cluster.name: my-es
#
# Use a descriptive name for the node:
#
node.name: node-2

network.host: 192.168.124.130
#
# Set a custom port for HTTP:
#
http.port: 9200

#action.destructive_requires_name: true
http.cors.enabled: true
#http.cors.allow-credentials: true
#http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
#http.cors.max-age: 0
http.cors.allow-origin: "*"
#http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type,Content-Lengt

node.master: false
node.data: true
http.enabled: true #是否开启http服务对外提供服务
#discovery.zen.ping.multicast.enabled: false #设置是否打开多播发现节点
discovery.zen.ping.unicast.hosts: ["192.168.124.128","192.168.124.130"]
#discovery.zen.minimum_master_nodes: 2

写好配置,启动节点,然后查看集群状态:
这里写图片描述
通过上图我们可以发现许多信息,例如节点总共有2个,成功的节点是2个,集群名是my-es,节点之间使用9300端口号传输数据,Zen的广播发现机制使用到了netty4等等。

下面通过head插件查看和管理我们的集群。

4. head插件安装

elasticsearch-head 是集群管理工具、数据可视化、增删改查工具,是基于nodejs的。

安装nodejs、nodejs-npm,后面需要使用grunt。

yum –y install nodejs nodejs-npm

安装grunt

npm install -g grunt-cli

如果安装过程比较慢,建议临时使用taobao镜像;

npm  install  -g grunt-cli --registry=https://registry.npm.taobao.org

安装git,通过git将远端head项目克隆下来。

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install

克隆下来之后,进入elasticsearch-head目录,修改其中的Gruntfile.js

  • 在connect–>server–>options下面添加:hostname:’*’,允许所有IP可以访问。
  • vim _site/app.js,修改 『http://localhost:9200』字段到本机ES端口与IP。

最后启动head

grunt server
#或者
grunt server & #为了命令窗口不被占用,让其在后台启动

浏览器中打开http://localhost:9100/

这里写图片描述
星号表示master节点。

5. 遇到的问题

集群搭建不起来,通过查询日志信息如下:
这里写图片描述

出现上面的问题是因为,在第一台机器上先创建了一个index,然后第二台虚拟机是通过克隆出来的,第二台机器的data目录中就嵌入了第一台机器上的数据,如此就出现了上面的问题,清空第二台机器上data目录即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值