elasticsearch安装与配置介绍
基本概念
集群:一个或者多个elasticsearch节点组成的集合
索引:含有相同属性的文档集合,例如一个索引代表消费者数据,一个索引代表产品数据(相当于MySQL的database)
类型:索引可以定义一个或多个类型,通常定义有相同字段的文档作为一个类型,文档必须属于一个类型(相当于MySQL的table)
文档:文档是可以被索引的基本数据单位,例如一个用户的基本信息,一片文章的数据,他是整个es里最小的存储单位(相当于MySQL的每一行具体的记录)
单节点安装
elasticsearch是基于java开发的,所以安装之前需要先安装版本大于等于1.8的jdk
jdk安装: 下载---解压---配置环境变量
下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,自己去这个地址下载,因为他会带一个认证参数AuthParam
wget https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-i586.tar.gz?AuthParam=1551253769_ff54ba4acb29cacf09d358ec0798e55d
tar -zxvf jdk-8u201-linux-x64.tar.gz\?AuthParam\=1551253769_ff54ba4acb29cacf09d358ec0798e55d

配置环境变量
sudo vi ~/.bash_profile

source ~/.bash_profile

elasticsearch安装: 下载---解压---配置---启动
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
tar -zxvf elasticsearch-6.6.2.tar.gz

sudo vi config/elasticsearch.yml

elasticsearch默认安装后设置的内存是1GB,我这里只是自己的一个乞丐版本的服务器,内存比较小,我就只给他分配256M(根据自己情况使用配置,如果内存不够的话,启动过程中会提示已杀死这类提示)
vi config/jvm.options

ps: 更多具体配置可以在elasticsearch官网查看
启动: elasticsearch可以接收用户输入的脚本并且执行,处于安全考虑,他不能root账户来启动,不然会报下图错误

所以我需要为elasticsearch新建一个系统运行账号
groupadd elasticsearch //新建一个elasticsearch的用户组
useradd -g elasticsearch elasticsearch //在elasticsearch用户组下面建立一个elasticsearch的用户
将elasticsearch目录的所有者给刚刚建立的账号
chown -R elasticsearch:elasticsearch elasticsearch-6.6.2/

然后切换到刚刚的账号启动elasticsearch
su elasticsearch
./elasticsearch-6.6.2/bin/elasticsearch
启动过程中可能会出现下面这类的错误提示

错误1: elasticsearch这个用户的最大打开线程数(3894)太低,至少增加到4096
解决:
1. 查看用户最大打开线程数
ulimit -a

2. 切换到root用户,编辑文件
vi /etc/security/limits.conf
在文件末尾加上下面配置

* 表示匹配所有用户, nproc 表示配置最大打开线程数
3. 退出从新登录后,再次查看,修改成功

错误2: 最大虚拟内存区域vm.max_map_count(65530)太低,至少增加到262144
解决:
在root账号下修改配置文件
vi /etc/sysctl.conf
在末尾添加配置,值大于等于实体的262144就可以

添加完成后执行下面命令
sysctl -p
然后可以查看到成功修改成你设置的数字

上面问题解决后,切换成elasticsearch账号,继续启动es,看到下图的样子证明就启动成功了

验证
浏览器输入ip地址,加上自己在配置文件中配置的端口,比如我这里的9201访问

我前面配置的host是0.0.0.0,所以可以用外网访问,不需要外网访问的话,就配置127.0.0.1或者对应的内网ip就行
安装head插件
安装好ES后,你就可以通过官网提供的相关命令开进行索引的创建,但是更多人还是习惯用界面直接操作.这个时候就可以用elasticsearch-head这个插件了.elasticsearch-head 是用于监控 ES 状态的客户端插件,包括数据可视化、执行增删改查操作等(我就简单暴露的把它理解成了像Navicat这类的工具).
git地址: https://github.com/mobz/elasticsearch-head
安装前准备
在上面地址说明中可以看到,安装他需要npm包管理工具,所以先在系统下安装一下node.js吧
nodejs下载地址: https://nodejs.org/en/download/

长期维护的版本可能不包含最新版本最新特性,但是比较稳定,所以这里就用稳定的版本吧.可以选择源码安装,就是可能坑有点多(被坑过一次的经历),我这里就直接下载'编译好的二进制文件',因为简单嘛
wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz //下载
xz -d node-v10.15.3-linux-x64.tar.xz //解压xz格式
tar -xf node-v10.15.3-linux-x64.tar //最终解压

进入里面的bin目录就可以看到已经编译好的node和npm了,直接使用就好.

分别给他们设置个软连方便全局使用node和npm命令
ln -s /opt/soft/node-v10.15.3-linux-x64/bin/node /usr/local/bin/
ln -s /opt/soft/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/

开始安装head
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head

npm install //知道node的应该明白这一步其实就是在下载安装相关的依赖扩展

如果在安装图中的扩展的时候报错了,就直接忽略他,执行下面命令
npm install phantomjs-prebuilt@2.1.16 --ignore-scripts //执行这个命令前,先把node_modules/目录下已经有的扩展全部删除了
到这里先不要忙去执行 'npm run start' 运行,先修改一下配置文件吧
sudo vi Gruntfile.js
上面配置文件中可以修改head插件监听的端口.默认是9100,我改成9101

sudo vi _site/app.js
上面配置文件中可以修改head访问es的端口,这里改的端口需要和你es的一致

最开始我在配置es的时候,配置了两个允许跨域的选项就是为了这里head能够访问es

npm run start //启动

启动之前保证es是启动的状态, 如果不想占用终端,就在es启动命令中添加一个 '-d'参数, 然后浏览器输入http://localhost:9101访问就可以,如果是云服务器,就用对应的ip地址替换localhost

ps: 在这个插件中我们就能界面化es的操作,还是比较方便的,但是也正因为方便,而且这个拥有各种删除什么的权限,只能在开发阶段的时候用,生产环境一定要关闭他
elasticsearch集群搭建
集群中包含三台服务器,内网ip分别是
172.27.0.17(master)----主服务器,这也是上面步骤安装的服务器
172.27.0.11(slave1)-----从服务器1
172.27.0.6 (slave2)-----从服务器2
按照前面的步骤分配在两台从服务器中安装ES,注意下图中是和主节点配置不一样的地方

cluster.name: 集群名字必须一致
node.name: 从服务器节点名字(两个从节点分别为slave1个slave2)
node.master: 是否为主节点
discovery.zen.ping.unicast.hosts: 节点向指定的主机发送单播请求,可以理解成寻找他的主节点,数组的形式证明可以多个,这里只有一个
三台es服务器以及head插件都分别配置好并且启动后,直接访问head所在服务器以及监听的端口,就能看到es集群了

IK分词插件的安装
详细地址: https://github.com/medcl/elasticsearch-analysis-ik,上面有具体的安装步骤
版本选择

上图是版本的选择,我这里安装的es版本是6.6.2,多以直接选择ik的master版本
安装

他提供了两种安装方式,第一种是去 https://github.com/medcl/elasticsearch-analysis-ik/releases这个地址下载对应的版本,然后在你自己的es目录下的扩展插件目录下,解压出来就可以,第二种方式是直接用es安装插件的运行命令,下面分别试一试
ps: 两种安装方式都记得切换到为es服务创建的账号下进行操作,比如我这里切换到 elasticsearch 这个账号
1. 下载的方式安装
进入es的plugins目录,创建ik目录,下载ik分词插件,解压
wge https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip

停止掉es服务重新启动,在启动的日志中,就可以看到是否加载了ik插件

2. 命令的方式安装
这种安装方式需要需要es版本大于等于5.5.1,刚刚的安装方式我是在集群的master节点安装的,接下来我切换到slave1节点安装
查看es运行状态,如果运行中,直接停止

切换到es服务账号,在es的bin目录下执行安装命令
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip

测试分词器的分词计划
1. 默认的standard

2. 刚刚安装的ik分词器

可以看到,默认的standard是把每个字都单独分开了,而ik_smart是只能的分解成了一些词语,显然后者比较适用