ES的安装
单实例安装
# 安装ES
mkdir software
cd /software
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
tar zxvf elasticsearch-6.6.2.tar.gz
cd elasticsearch-6.6.2
ls
./bin/elasticsearch -d
localhost:9200
中文分词器插件ik安装
由于搜索引擎需要根据文本进行分词,对于分词后的每个词汇建立倒排索引,以便于后续通过keyword进行检索。原生的ES是老外开发的,对于英文分词支持较好,对于中文分词支持较差,国人开发了中文分词插件,以增强ES对于中文分词的支持能力。ik插件的详细介绍:es-ik项目地址。
这里是对用6.6.2版本es插件的快捷安装方式,如果需要安装其他版本ES对应的ik插件,请参考官网,否则安装出现问题或者无法使用本人不负责。
es@iZbp1bx0xi202s8uyn62h9Z:~/software/elasticsearch-6.6.2$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip
-> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
-> Installed analysis-ik
注意:版本需要与ES的版本一一对应,否则可能会出现问题。
如果要卸载该分词器,可以使用如下的指令:
$ ./bin/elasticsearch-plugin remove analysis-ik
然后,新建一个 Index,指定需要分词的字段。这一步根据数据结构而异,下面的命令只针对本文。基本上,凡是需要搜索的中文字段,都要单独设置一下。
curl -X PUT 'localhost:9200/accounts' -d '
{
"mappings": {
"person": {
"properties": {
"user": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"desc": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
}
}'
上面代码中,首先新建一个名称为accounts的 Index,里面有一个名称为person的 Type。person有三个字段。
- user
- title
- desc
这三个字段都是中文,而且类型都是文本(text),所以需要指定中文分词器,不能使用默认的英文分词器。 Elastic 的分词器称为 analyzer。我们对每个字段指定分词器。
"user": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
上面代码中,analyzer是字段文本的分词器,search_analyzer是搜索词的分词器。ik_max_word分词器是插件ik提供的,可以对文本进行最大数量的分词。
前端管理插件head安装
安装head插件以方便在通过前端对ES集群进行管理。
# 安装Nodejs
sudo apt-get remove nodejs ^node-* nodejs-*
sudo apt-get autoremove
sudo apt-get clean
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install nodejs
curl https://raw.githubusercontent.com/creationix/nvm/v0.13.1/install.sh | sh
# After this, open a new terminal and check the npm version:
npm --version
# 安装head插件
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
cd elasticsearch-head-master/
npm install
npm run start
观察到界面上集群状态异常,显示为“not connected”,需要修改ES的配置
cd ../elasticsearch-6.6.2
vim config/elasticsearch.yml
# 在末尾添加如下的内容,解决跨域访问的问题,注意冒号后面需要加空格,否则ES运行会报异常
http.cors.enabled: true
http.cors.allow-origin: "*"
# 重新启动ES和head插件,并且访问如下的地址:
npm run start
localhost:9100
错误处理
执行npm install
过程中产生如下的报错信息:
node npm install Error: CERT_UNTRUSTED
ssl验证问题,使用下面的命令取消ssl验证即可解决
npm config set strict-ssl false
分布式安装
首先,我们来了解一下ES配置文件elasticsearch.yml
中的几个关键属性:
- cluster.name :配置es的集群名称,不同的集群用名字来区分, 如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
- node.name:节点名称,一部服务器一个节点,分别为node-1,node-2,node-3 。
- http.port :服务端口,一般默认是9200,如果在同一部服务器上面配置多个elasticsearch服务,则端口需要不同
- discovery.zen.ping.unicast.hosts:自动检索可用节点,设置了这个参数才会自动检测可用的节点。 同一集群名下,elasticsearch会自动去发现其他的节点。
配置master节点
mv elasticsearch-6.6.2 es_master
cd es_master
vim config/elasticsearch.yml
完成上述文件复制之后,master节点的配置都在es_master文件夹下了。
编辑config/elasticsearch.yml
,在文件末尾添加如下信息:
cluster.name: cloud
node.name: master
node.master: true
# 配置外网访问时,需要将network.host对应的值修改为外放访问的IP地址
network.host: 127.0.0.1
修改保存完成之后,重启master节点。
配置slave节点
为了节省资源,下面的示例是在同一台机器上部署两个从节点。
mkdir es_slave
cp elasticsearch-6.6.2.tar.gz es_slave/
cd es_slave
tar zxvf elasticsearch-6.6.2.tar.gz
cp -r elasticsearch-6.6.2 slave1
cp -r elasticsearch-6.6.2 slave2
rm -rf elasticsearch-6.6.2.tar.gz elasticsearch-6.6.2
完成上述文件复制之后,salve1节点的文件都在salve1文件夹下,salve2节点的文件都在salve2文件夹下。
从节点1配置
cluster.name: cloud
node.name: slave1
network.host: 127.0.0.1
http.port: 9201
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
修改保存完成之后,启动slave1节点。
./bin/elasticsearch -d
louxj424@ubuntu:~/Downloads/es_slave/slave2$ netstat -tunpl|grep 8200
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 127.0.0.1:8200 :::* LISTEN 9903/java
localhost:9100
从节点2配置
cluster.name: cloud
node.name: slave2
network.host: 127.0.0.1
http.port: 8000
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
修改保存完成之后,启动slave2节点。
./bin/elasticsearch -d
louxj424@ubuntu:~/Downloads/es_slave/slave2$ netstat -tunpl|grep 8000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 127.0.0.1:8000 :::* LISTEN 11058/java
localhost:9100
至此,单机上面部署集群模式的ES完成。
问题解决
问题1:
运行报错:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
运行下面的命令加以解决:
sudo sysctl -w vm.max_map_count=262144
问题2:
运行报错:
louxj424@ubuntu:~/Downloads/elasticsearch-5.5.1$ ./bin/elasticsearch
Java HotSpot(TM) Server VM warning: INFO: os::commit_memory(0x2ae00000, 2080374784, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2080374784 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/louxj424/Downloads/elasticsearch-5.5.1/hs_err_pid10337.log
运行下面的命令加以解决:
# 修改jvm空间分配
vim config/jvm.options
修改如下内容
-Xms2g -》 -Xms512m
-Xmx2g -》 -Xmx512m
问题2:
运行报错:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方案可以参考:
解决方案
启动异常ERROR: bootstrap checks failed
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解决方案: 解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
接着报错:
ERROR: [1] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方案:
$ ulimit -n 65536