ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并做为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,可以达到实时搜索,稳定,可靠,快速,安装使用方便。基百科、Stack Overflow、Github 都采用它。html
本文从零开始,讲解如何使用 Elasticsearch 搭建本身的全文搜索引擎。每一步都有详细的说明,你们跟着作就能学会。html5
一、VMwarejava
二、Centos 6.6node
三、Elasticsearch 5.5.2linux
四、JDK 1.8git
VMware 安装以及在 VMware 中安装 Centos 这个就不说了,环境配置直接默认就好,不过度配给机器的内存最好设置大点(建议 2G),github
使用 dhclient 命令来自动获取 IP 地址,查看获取的 IP 地址则使用命令 ip addr 或者 ifconfig ,则会看到网卡信息和 lo 卡信息。web
给虚拟机额中的 linux 设置固定的 ip(由于后面发现每次机器重启后又要从新使用 dhclient 命令来自动获取 IP 地址)apache
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:npm
onboot=yes bootproto=static
增长:(下面可设置可不设置)
IPADDR=192.168.1.113 网卡IP地址 GATEWAY=192.168.1.1 NETMASK=255.255.255.0
设置好以后,把网络服务重启一下, service network restart
修改 ip 地址参考: http://jingyan.baidu.com/arti...
大环境都准备好了,下面开始安装步骤:
先卸载自带的 openjdk,查找 openjdk
rpm -qa | grep java
卸载 openjdk
yum -y remove java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el65.x8664 yum -y remove java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
解压 JDK 安装包:
附上jdk1.8的下载地址:
http://www.oracle.com/technet...
解压完成后配置一下环境变量就 ok
一、在/usr/local/下建立Java文件夹
cd /usr/local/ 进入目录 mkdir java 新建java目录
二、文件夹建立完毕,把安装包拷贝到 Java 目录中,而后解压 jdk 到当前目录
cp /usr/jdk-8u144-linux-x64.tar.gz /usr/local/java/ **注意匹配你本身的文件名** 拷贝到java目录 tar -zxvf jdk-8u144-linux-x64.tar.gz 解压到当前目录(Java目录)
三、解压完以后,Java目录中会出现一个jdk1.8.0_144的目录,这就解压完成了。以后配置一下环境变量。
编辑/etc/下的profile文件,配置环境变量
vi /etc/profile 进入profile文件的编辑模式 在最后边追加一下内容(**配置的时候必定要根据本身的目录状况而定哦!**) JAVA_HOME=/usr/local/java/jdk1.8.0_144 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH
以后保存并退出文件以后。
让文件生效: source /etc/profile
在控制台输入Java 和 Java -version 看有没有信息输出,以下: java -version
java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)
能显示以上信息,就说明 JDK 安装成功啦
由于后面可能会用到 maven ,先装上这个。
一、下载 maven
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz
二、解压至 /usr/local 目录
tar -zxvf apache-maven-3.2.5-bin.tar.gz
三、配置公司给的配置
替换成公司给的 setting.xml 文件,修改关于本地仓库的位置, 默认位置: ${user.home}/.m2/repository
四、配置环境变量etc/profile 最后添加如下两行
export MAVEN_HOME=/usr/local/apache-maven-3.2.5 export PATH=${PATH}:${MAVEN_HOME}/bin
五、测试
[root@localhost ~]# mvn -v Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T09:29:23-08:00) Maven home: /usr/local/apache-maven-3.2.5
VMware 虚拟机里面的三台机器 IP 分别是:
192.168.153.133 192.168.153.134 192.168.153.132
在 /etc/hosts下面编写:ip node 节点的名字(域名解析)
vim /etc/hosts
新增:
192.168.153.133 es1 192.168.153.134 es2 192.168.153.132 es3
安装expect命令 : yum -y install expect
将 ssh_p2p.jar 随便解压到任何目录下: (这个 jar 包能够去网上下载)
unzip ssh_p2p.zip
修改 resource 的 ip 值
vim /ssh_p2p/deploy_data/resource (各个节点和帐户名,密码,free表明相互均可以无密码登录)
#设置为你每台虚拟机的ip地址,用户名,密码 address=( "192.168.153.133,root,123456,free" "192.168.153,134,root,123456,free" "192.168.153.132,root,123456,free" )
修改 start.sh 的运行权限
chmod u+x start.sh
运行
./start.sh
测试:
ssh ip地址 (测试是否能够登陆)
下载地址: https://www.elastic.co/downlo...
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz cd /usr/local tar -zxvf elasticsearch-5.5.2.tar.gz
su tzs
切换到 tzs 用户下 ( 默认不支持 root 用户)
sh /usr/local/elasticsearch/bin/elasticsearch -d
其中 -d 表示后台启动
在 vmware 上测试是否成功:curl http://localhost:9200/
出现如上图这样的效果,就表明已经装好了。
elasticsearch 默认 restful-api 的端口是 9200 不支持 IP 地址,也就是说没法从主机访问虚拟机中的服务,只能在本机用 http://localhost:9200 来访问。若是须要改变,须要修改配置文件 /usr/local/elasticsearch/config/elasticsearch.yml 文件,加入如下两行:
network.bind_host: 0.0.0.0 network.publish_host: _nonloopback:ipv4
或去除 network.host 和 http.port 以前的注释,并将 network.host 的 IP 地址修改成本机外网 IP。而后重启,Elasticsearch
关闭方法(输入命令: ps -ef | grep elasticsearch
,找到进程,而后 kill 掉就好了。
若是外网仍是不能访问,则有多是防火墙设置致使的 ( 关闭防火墙:service iptables stop
)
修改配置文件:vim config/elasticsearch.yml
cluster.name : my-app (集群的名字,名字相同的就是一个集群)
node.name : es1 (节点的名字, 和前面配置的 hosts 中的 name 要一致)
path.data: /data/elasticsearch/data (数据的路径。没有要建立(mkdir -p /data/elasticsearch/{data,logs}
),而且给执行用户权限 chown tzs /data/elasticsearch/{data,logs} -R
)
path.logs: /data/elasticsearch/logs (数据 log 信息的路径,同上)
network.host: 0.0.0.0 //容许外网访问,也能够是本身的ip地址
http.port: 9200 //访问的端口
discovery.zen.ping.unicast.hosts: ["192.168.153.133", "192.168.153.134", "192.168.153.132"] //各个节点的ip地址
记得须要添加上:(这个是安装 head 插件要用的, 目前不须要)
http.cors.enabled: true
http.cors.allow-origin: "*"
最后在外部浏览器的效果以下图:
能够本身下载源码使用 maven 编译,固然若是怕麻烦能够直接下载编译好的
https://github.com/medcl/elas...
注意下载对应的版本放在 plugins 目录下
解压
unzip elasticsearch-analysis-ik-5.5.2.zip
在 es 的 plugins 下新建 ik 目录
mkdir ik
将刚才解压的复制到ik目录下
cp -r elasticsearch/* ik
删除刚才解压后的
rm -rf elasticsearch rm -rf elasticsearch-analysis-ik-5.5.2.zip
ik_max_word :会将文本作最细粒度的拆分;尽量多的拆分出词语
ik_smart:会作最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有
安装完 IK 中文分词器后(固然不止这种中文分词器,还有其余的,能够参考个人文章 Elasticsearch 默认分词器和中分分词器之间的比较及使用方法),测试区别以下:
curl -XGET 'http://192.168.153.134:9200/_analyze?pretty&analyzer=ik_max_word' -d '联想是全球最大的笔记本厂商'
{ "tokens" : [ { "token" : "联想", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "是", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 1 }, { "token" : "全球", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 2 }, { "token" : "最大", "start_offset" : 5, "end_offset" : 7, "type" : "CN_WORD", "position" : 3 }, { "token" : "的", "start_offset" : 7, "end_offset" : 8, "type" : "CN_CHAR", "position" : 4 }, { "token" : "笔记本", "start_offset" : 8, "end_offset" : 11, "type" : "CN_WORD", "position" : 5 }, { "token" : "笔记", "start_offset" : 8, "end_offset" : 10, "type" : "CN_WORD", "position" : 6 }, { "token" : "本厂", "start_offset" : 10, "end_offset" : 12, "type" : "CN_WORD", "position" : 7 }, { "token" : "厂商", "start_offset" : 11, "end_offset" : 13, "type" : "CN_WORD", "position" : 8 } ] }
curl -XGET 'http://localhost:9200/_analyze?pretty&analyzer=ik_smart' -d '联想是全球最大的笔记本厂商'
{ "tokens" : [ { "token" : "联想", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "是", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 1 }, { "token" : "全球", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 2 }, { "token" : "最大", "start_offset" : 5, "end_offset" : 7, "type" : "CN_WORD", "position" : 3 }, { "token" : "的", "start_offset" : 7, "end_offset" : 8, "type" : "CN_CHAR", "position" : 4 }, { "token" : "笔记本", "start_offset" : 8, "end_offset" : 11, "type" : "CN_WORD", "position" : 5 }, { "token" : "厂商", "start_offset" : 11, "end_offset" : 13, "type" : "CN_WORD", "position" : 6 } ] }
elasticsearch-head 是一个 elasticsearch 的集群管理工具,它是彻底由 html5 编写的独立网页程序,你能够经过插件把它集成到 es。
效果以下图:(图片来自网络)
yum remove git yum install git git clone git://github.com/mobz/elasticsearch-head.git 拉取 head 插件到本地,或者直接在 GitHub 下载 压缩包下来
先去官网下载 node-v8.4.0-linux-x64.tar.xz
tar -Jxv -f node-v8.4.0-linux-x64.tar.xz mv node-v8.4.0-linux-x64 node
环境变量设置:
vim /etc/profile
新增:
export NODE_HOME=/opt/node export PATH=$PATH:$NODE_HOME/bin export NODE_PATH=$NODE_HOME/lib/node_modules
使配置文件生效(这步很重要,本身要多注意这步)
source /etc/profile
测试是否全局可用了:
node -v
而后
mv elasticsearch-head head cd head/ npm install -g grunt-cli npm install grunt server
再 es 的配置文件中加:
http.cors.enabled: true http.cors.allow-origin: "*"
在浏览器打开 http://192.168.153.133:9100/
就能够看到效果了,
把坑都走了一遍,防止之后再次入坑,特此记录下来
一、ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
改变 elasticsearch 文件夹全部者到当前用户
sudo chown -R noroot:noroot elasticsearch
这是由于 elasticsearch 须要读写配置文件,咱们须要给予 config 文件夹权限,上面新建了 elsearch 用户,elsearch 用户不具有读写权限,所以仍是会报错,解决方法是切换到管理员帐户,赋予权限便可:
sudo -i
chmod -R 775 config
二、WARN [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
缘由是elasticsearch默认是不支持用root用户来启动的。
解决方案一:Des.insecure.allow.root=true
修改/usr/local/elasticsearch-2.4.0/bin/elasticsearch,
添加 ES_JAVA_OPTS="-Des.insecure.allow.root=true"
或执行时添加: sh /usr/local/elasticsearch-2.4.0/bin/elasticsearch -d -Des.insecure.allow.root=true
注意:正式环境用root运行可能会有安全风险,不建议用root来跑。
解决方案二:添加专门的用户
useradd elastic chown -R elastic:elastic elasticsearch-2.4.0 su elastic sh /usr/local/elasticsearch-2.4.0/bin/elasticsearch -d
三、UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
只是警告,使用新的linux版本,就不会出现此类问题了。
四、ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
缘由:没法建立本地文件问题,用户最大可建立文件数过小
解决方案:切换到 root 用户,编辑 limits.conf 配置文件, 添加相似以下内容:
vim /etc/security/limits.conf
添加以下内容:
* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
[2]: max number of threads [1024] for user [tzs] is too low, increase to at least [2048]
缘由:没法建立本地线程问题,用户最大可建立线程数过小
解决方案:切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置文件。
vim /etc/security/limits.d/90-nproc.conf
找到以下内容:
修改成
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
缘由:最大虚拟内存过小
root用户执行命令:
sysctl -w vm.max_map_count=262144
或者修改 /etc/sysctl.conf 文件,添加 “vm.max_map_count”设置
设置后,可使用
$ sysctl -p
[4]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
缘由:Centos6不支持SecComp,而ES5.4.1默认bootstrap.system_call_filter为true进行检测,因此致使检测失败,失败后直接致使ES不能启动。
详见 :https://github.com/elastic/el...
解决方法:在elasticsearch.yml中新增配置bootstrap.system_call_filter,设为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
五、 java.lang.IllegalArgumentException: property [elasticsearch.version] is missing for plugin [head]
再 es 的配置文件中加:
http.cors.enabled: true http.cors.allow-origin: "*"
整个搭建的过程全程本身手动安装,不易,若是安装不少台机器,是否能够写个脚本之类的自动搭建呢?能够去想一想的。首发于:http://www.54tianzhisheng.cn/... ,转载请注明出处,谢谢配合!