ElasticSearch

ElasticSearch介绍

ElasticSearch是开源的,它可以快速的存储、搜索和分析海量数据,是全文搜索引擎的首选。维基百科、Stack Overflow、Github都采用它。

Elastic的底层是开源的Lucene,但Lucene必须自己写代码去调用它的接口,Elastic是Lucene的封装,提供了REST API的操作接口,开箱即用。

 

ElasticSearch6.4.2安装

1.下载elastic

  https://www.elastic.co/downloads/elasticsearch

  解压:tar -xvf elasticsearch-6.4.2.tar.gz

2.创建用户(从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动,所以我们要添加一个用户)

创建组:groupadd es
创建用户:useradd es
设置密码:passwd es
将用户添加到组:usermod -G es es
设置sudo权限:visudo    在在root ALL=(ALL) ALL 下面加一行es ALL=(ALL) ALL

3.配置

 elasticsearch.yml

cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

path.data &path.logs

如果您正在使用.zip.tar.gz文件归档datalogs 目录在$ES_HOME下。如果这些重要文件夹保留在默认位置,则Elasticsearch升级到新版本时,很有可能被删除。在生产中使用,肯定要更改数据和日志文件夹的位置。

path:
  logs: /var/log/elasticsearch
  data: /var/data/elasticsearch

path.data可以同时指定多个路径,所有的路径都会被用来存储数据(但所有属于同一个分片的文件,都会全部保存到同一个数据路径)

path:
  data:
    - /mnt/elasticsearch_1
    - /mnt/elasticsearch_2
    - /mnt/elasticsearch_3

cluster.name

某个节点只有和集群下的其他节点共享它的cluster.name才能加入一个集群,用于描述集群的名称。一定要确保不要在不同的环境中使用相同的集群名称。否则,节点可能会加入错误的集群中。

cluster.name: rpms

node.name

默认情况下,Elasticsearch 将使用随机生成的uuid的前7个字符作为节点id,请注意,节点ID是持久化的,并且在节点重新启动时不会更改,因此默认节点名称也不会更改。推荐为节点配置更有意义的名称。

node.name: prod-data-2

也可以使用服务器的${HOSTNAME}作为节点的名称

node.name: ${HOSTNAME}

bootstrap.memory_lock

由于当jvm开始swapping时es的效率会降低,所以要保证它不swap,这对节点健康极其重要。实现这一目标的一种方法是将bootstrap.memory_lock设置为true,内存锁定。

network.host

默认情况下,Elasticsearch 仅仅绑定回环地址,比如127.0.0.1 和[::1] 。这足以在服务器上运行单个开发节点。事实上,一台机器上可以启动多个节点。这可对于测试Elasticsearch集群的能力很有用,但不推荐用于生产。为了与其他服务器上的节点进行通信并形成集群,你的节点将需要绑定到非环回地址。虽然这里有很多网络相关的配置,但通常只需要配置一下

network.host: 0.0.0.0

network.host设置一些特殊值也是可以的。比如_local_,_site_,_global_,ip4,ip6。

一旦设置了network.host,Elasticsearch 会假定你正在从开发模式转移到生产模式,并将许多系统启动检查从警告升级到异常。有关详细信息,请参阅Development mode vs production mode”。

discovery.zen.ping.unicast.hosts

开箱即用,没有任何网络配置情况下,Elasticsearch将绑定到可用的回环地址,并会扫描端口9300至9305以尝试连接到同一服务器上运行的其他节点。这提供了一个自动集群体验,而无需执行任何配置。

如果想和其他服务器的节点形成一个集群,你必须提供集群中其它节点的列表。可以通过以下方式指定:

discovery.zen.ping.unicast.hosts:
   - 192.168.1.10:9300
   - 192.168.1.11 
   - seeds.mydomain.com 

如果没有指定端口,将默认为transport.profiles.default.port,并回退transport.tcp.port

如果输入的是主机名,被解析成多个地址,将会尝试连接所有地址。

discovery.zen.minimum_master_nodes

为了防止数据丢失,discovery.zen.minimum_master_nodes配置至关重要, 以便每个候选主节点知道为了形成集群而必须可见的最少数量的候选主节点没有这种设置,遇到网络故障的群集有可能将群集分成两个独立的群集(脑裂), 这将导致数据丢失。更详细的解释在Avoiding split brain with minimum_master_nodes ” 中提供。

为了避免脑裂,候选主节点的数量应该设置为:

(master_eligible_nodes / 2) + 1

换句话说,如果现在有3个节点,最小候选主节点数应该是(3/2)+1=2:

discovery.zen.minimum_master_nodes: 2

4.异常处理

1)

原因:Centos6、7不支持SecComp,而ES默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。

解决方案: 
在elasticsearch.yml中新增配置:bootstrap.system_call_filter: false

2)

原因:因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户es。

3)

第一个原因:无法创建本地文件问题,用户最大可创建文件数太小 
解决方案:切换到root用户,编辑limits.conf配置文件, 添加类似如下内容:

vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072

第二个原因:无法创建本地线程问题,用户最大可创建线程数太小 
解决方案:切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置

vi /etc/security/limits.d/90-nproc.conf
* soft nproc 1024
#修改为
* soft nproc 4096

第三个原因:最大虚拟内存太小 
每次启动机器都手动执行下。 
root用户执行命令: 
执行命令:sysctl -w vm.max_map_count=262144 
查看修改结果命令:sysctl -a|grep vm.max_map_count 看是否已经修改 
永久性修改策略:

echo "vm.max_map_count=262144" >> /etc/sysctl.conf

5.安装ik中文分词器

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip

6.启停命令

启动:cd bin目录,执行./elasticsearch
后台启动:./elasticsearch -d
停止:ps -ef | grep elastic 然后kill -9 pid杀掉进程

 7.curl 'http://localhost:9200/'得到如下说明启动成功。

elasticsearch head安装

1.安装node.js、npm

yum -y install nodejs npm

 安装最新版本

npm install -g n
n latest
n stable
n lts

2.安装git

yum -y install git

3.下载head

git clone git://github.com/mobz/elasticsearch-head.git

4.安装head

cd elasticsearch-head/
npm install

5.异常处理

1.node npm install Error:CERT_UNTRUSTED
    ssl验证问题,使用npm config set strict-ssl false取消ssl验证即可
2.code ELIFECYCLE,phantomjs-prebuilt@2.1.16 install: `node install.js`
    npm install phantomjs-prebuilt@2.1.16 --ignore-scripts

 6.配置

1.修改Gruntfile.js
    cd elasticsearch-head/
    vim Gruntfile.js
    搜索 /keepalive,在下面增加 hostname: '*'
2.修改app.js
    cd elasticsearch-head/_site
    vim app.js
    搜索 /localhost,改为内网ip
3.配置elasticsearch.yml,增加跨域配置
    在最下面增加
    http.cors.enabled: true
    http.cors.allow-origin: "*"

7.启动

cd elasticsearch-head/node_modules/grunt/bin/
./grunt server &

8.访问

http://47.104.***.***:9100/
posted @ 2019-02-26 17:08  骚皮皮  阅读(160)  评论(0编辑  收藏  举报