elasticsearch2.3.1 集群安装

    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。【摘自百度百科】

    具体的介绍,这里就不赘述了,网上能搜到,另外建议看一遍《Elasticsearch 权威指南》能够加深理解。

    环境:

            节点A

                    IP:192.168.0.100

             节点B

                    IP:192.168.0.101

              JDK:1.8

              linux:centos7

              连接工具:CRT

    准备:

            两个节点各安装Elasticsearch 

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.1/elasticsearch-2.3.1.tar.gz
tar xvzf elasticsearch-2.3.1.tar.gz
cd elasticsearch-2.3.1

    配置:

            先贴一段配置说明:

elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml,第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来记录日志的,所以logging.yml里的设置按普通log4j配置文件来设置就行了。下面主要讲解下elasticsearch.yml这个文件中可配置的东西。

cluster.name:elasticsearch
配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。

node.name:"FranzKafka"
节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。

node.master:true
指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。

node.data:true
指定该节点是否存储索引数据,默认为true。

index.number_of_shards:5
设置默认索引分片个数,默认为5片。

index.number_of_replicas:1
设置默认索引副本个数,默认为1个副本。

path.conf:/path/to/conf
设置配置文件的存储路径,默认是es根目录下的config文件夹。

path.data:/path/to/data
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
path.data:/path/to/data1,/path/to/data2

path.work:/path/to/work
设置临时文件的存储路径,默认是es根目录下的work文件夹。

path.logs:/path/to/logs
设置日志文件的存储路径,默认是es根目录下的logs文件夹

path.plugins:/path/to/plugins
设置插件的存放路径,默认是es根目录下的plugins文件夹

bootstrap.mlockall:true
设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit-l unlimited`命令。

network.bind_host:192.168.0.1
设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。


network.publish_host:192.168.0.1
设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。

network.host:192.168.0.1
这个参数是用来同时设置bind_host和publish_host上面两个参数。

transport.tcp.port:9300
设置节点间交互的tcp端口,默认是9300。

transport.tcp.compress:true
设置是否压缩tcp传输时的数据,默认为false,不压缩。

http.port:9200
设置对外服务的http端口,默认为9200。

http.max_content_length:100mb
设置内容的最大容量,默认100mb

http.enabled:false
是否使用http协议对外提供服务,默认为true,开启。

gateway.type:local
gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。

gateway.recover_after_nodes:1
设置集群中N个节点启动时进行数据恢复,默认为1。

gateway.recover_after_time:5m
设置初始化数据恢复进程的超时时间,默认是5分钟。

gateway.expected_nodes:2
设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。

cluster.routing.allocation.node_initial_primaries_recoveries:4
初始化数据恢复时,并发恢复线程的个数,默认为4。

cluster.routing.allocation.node_concurrent_recoveries:2
添加删除节点或负载均衡时并发恢复线程的个数,默认为4。

indices.recovery.max_size_per_sec:0
设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。

indices.recovery.concurrent_streams:5
设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。

discovery.zen.minimum_master_nodes:1
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)

discovery.zen.ping.timeout:3s
设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。

discovery.zen.ping.multicast.enabled:false
设置是否打开多播发现节点,默认是true。

discovery.zen.ping.unicast.hosts:["host1", "host2:port","host3[portX-portY]"]
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点

    实际中并不需要那么多的配置,因为大多直接采用默认值即可,以下是实际配置(注意配置文件:后要有一个空格,否则报错)

    节点A:

cluster.name: sccES
node.name: "es02"
bootstrap.mlockall: true
network.host: 192.168.0.101
network.publish_host: 192.168.0.101
discovery.zen.ping.unicast.hosts: ["192.168.0.100"]

    节点B:

cluster.name: sccES
node.name: "es02"
bootstrap.mlockall: true
network.host: 192.168.0.100
network.publish_host: 192.168.0.100
discovery.zen.ping.unicast.hosts: ["192.168.0.101"]

    另外一般在学习的时候,总会强调elasticsearch只要在同一个网段无需特殊配置即可自动发现并添加节点,而这里的配置却指定了其他节点的IP,原因是es1.0 版本的集群的discovery默认采用的是组播(multicast)模式,但是在es2.2版本中已去除该模式,虽然提供了multicast的插件,但是官方说不建议采用multicast的模式,故我们只能采用单播(unicast)模式。同时我们还必须显示指明“network.publish_host”节点的内容,否则该节点会动态绑定ip,导致你设置的unicast地址不正确。(?可能此段话不准确,正在探索中)

    启动:

./elasticsearch -d    #(后台启动)

然后访问http://192.168.0.100:9200/_cluster/health查看集群状态

{"cluster_name":"sccES","status":"green","timed_out":false,"number_of_nodes":2,"number_of_data_nodes":2,"active_primary_shards":5,"active_shards":10,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0}

    扩展:

        扩展只需要修改discovery.zen.ping.unicast.hosts属性,其内的值不需要是全部运行节点的ip,只需要任意一台运行中的IP即可

cluster.name: sccES
node.name: "es03"
bootstrap.mlockall: true
network.host: 192.168.0.102
network.publish_host: 192.168.0.102
discovery.zen.ping.unicast.hosts: ["192.168.0.101"]

然后访问http://192.168.0.100:9200/_cluster/health查看集群状态

{"cluster_name":"sccES","status":"green","timed_out":false,"number_of_nodes":3,"number_of_data_nodes":3,"active_primary_shards":5,"active_shards":10,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0}

查看所有索引

http://
ip:9200/_cat/indices?v

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是极客人

ElasticSearch数据同步与无缝迁移

ElasticSearch作为一款开源的全文搜索引擎在如今的软件开发得到了越来越广泛的应用,在业务功能开发方面,可以选用ElasticSearch提供比数据库查...

8493
来自专栏运维咖啡吧

探秘varian:优雅的发布部署程序

varian是我们基于Python3编写的一套部署程序,处在整个部署系统的中心,与CMDB、Jenkins、SVN/Git、镜像仓库Harbor、Kuberne...

1097
来自专栏Youngxj

安卓四大组件之Broadcast Receiver-广播接收者

2032
来自专栏java思维导图

缓存的正确使用方式,你都会了吗?

首先,缓存由于其适应高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。

1392
来自专栏云计算

Kubernetes的服务网格(第4部分):通过流量切换持续部署

除了服务发现,重要指标和TLS之外,linkerd还具有强大的路由语言,称为dtabs,可以用来改变请求的方式 - 甚至是单个请求 - 流经应用程序拓扑。在本文...

4627
来自专栏微信公众号:Java团长

分布式之数据库和缓存双写一致性方案解析

首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。

1222
来自专栏王清培的专栏

ElasticSearch大数据分布式弹性搜索引擎使用

阅读目录: 背景 安装 查找、下载rpm包 、执行rpm包安装 配置elasticsearch专属账户和组 设置elasticsearch文件所有者 切换到el...

79210
来自专栏开发 & 运维分享

Zookeeper学习—— 简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为...

701
来自专栏大闲人柴毛毛

架构高性能网站秘笈(二)——动态内容缓存

什么是动态内容缓存? 浏览器向服务器发送请求后,服务器会根据浏览器的要求做相应的处理(如:数据库操作),然后将处理后的结果注入JSP页面生成HTML,最后将生...

3286
来自专栏前端杂货铺

提升node.js中使用redis的性能

某基于node.js开发的业务系统向外提供了一个dubbo服务,提供向第三方缓存查询、设置多项业务数据并聚合操作结果。在QPS达到800时(两台虚拟机,每台机器...

2702

扫码关注云+社区

领取腾讯云代金券