ElasticSearch入坑记录(一)安装

一、为什么会选用ElasticSearch

mongodb一个collection里面存储了千万级数据,对字段内容(中文)进行模糊检索时,耗时大约200s,ElasticSearch则可以在1s内完成。

其实对于mongodb,新版本的(具体从哪个版本开始没注意)比如3.6.2,字段是可以建立一个text类型的索引的,也可以大大提高“全文检索”的查询性能,但只对英文内容有效果,对中文不起作用。

二、Elasticsearch安装

基于CentOS7系统

1.ElasticSearch 需要 Java 8 环境。一个十分清楚详细的安装链接:【Linux】CentOS7下安装JDK详细过程 - Angel挤一挤 - 博客园

CentOS7上安装JDK(Java Development Kit)的时候,都需要检查或卸载系统上原生的Open JDK,他们俩之间的区别还蛮大的。【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别

2.安装ElasticSearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.zip
unzip elasticsearch-5.6.3.zip 

wget是下载至当前目录;unzip是解压,在zip文件同级别的目录下生成一个文件夹,目录结构如下:

----elasticsearch-5.6.3.zip
----elasticsearch-5.6.3(文件夹)
    |----bin(文件夹)
    |----config(文件夹,配置文件夹)
    |----lib(文件夹)
    |----modules(文件夹)
    |----plugins(文件夹,常用的如ik中文分词等,都会安装在这个文件家里面)
    |----LISENSE.txt
    |----NOTICE.txt
    |----README.textile

这样下载安装部分就完了,一步一步走下去几乎不会有特殊情况出现。

三、ElasticSearch启动

elasticsearch是不允许在root用户下操作的,如果在root用户下启动

cd elasticsearch-5.6.3
./bin/elasticsearch

会提示如下错误

java.lang.RuntimeException: can not run elasticsearch as root

因此我们可以在root用户下,创建新用户组及用户,在elasticsearch-5.6.3同级目录下

groupadd esgroup
useradd esuser -g esgroup
chown -R esuser:esgroup elasticsearch-5.6.3 

用户组及用户创建完毕,权限也提升之后,切换到esuser,启动elasticsearch即可(此时ES的配置文件没有做任何更改

su - esuser(不能使用su esuser命令,否则刚才配置的java环境变量在esuser用户下不会生效)
cd elasticsearch-5.6.3
./bin/elasticsearch(可以在后面加 -d,即./bin/elasticsearch -d,可以后台运行)
*********************
此步可能会有一些小小的坑,在第四部分讲
*********************

新开一个shell窗口,输入

curl localhost:9200

会返回如下类似信息,elasticsearch已成功启动了

{
  "name" : "pFCHWe9",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "dnEESyPrTMK4583Rmywaog",
  "version" : {
    "number" : "5.6.3",
    "build_hash" : "1a2f265",
    "build_date" : "2017-10-06T20:33:39.012Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

四、一些小坑

  • 切换用户时。注意su esuser命令和su - esuser命令的区别

前者只是切换root身份,但shell环境仍然是普通用户的shell;

而后者连用户和shell环境一起切换成root身份了。只有切换了shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su - 命令切换以后,工作目录变成root工作目录了。

  • 在启动时会出现一些warning
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 

在不更改es配置文件(config文件夹下面的elasticsearch.yml文件)的时候,elasticsearch是能启动的,但如果想改一些配置比如改变network.host

network.host: 0.0.0.0(改变后的,这样可以通过外网访问)

此时,需要修改上述两个warning涉及的配置,否则会报错,无法启动。

第一个waring解决方案: 切到root 用户,进入到security目录下的limits.conf;执行命令

vi /etc/security/limits.conf 

在文件的末尾添加下面的参数值:

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

前面的*符号必须带上,然后重新启动就可以了。执行完成后可以使用命令 ulimit -n 查看进程数


第二个waring解决方案:切换到root用户,进入/etc目录下,修改sysctl.conf ,执行命令

vi /etc/sysctl.conf

增加配置值:

vm.max_map_count=655360

保存退出后执行命令

sysctl -p 

这样就可以了,然后再启动ES服务即可

请使用浏览器的分享功能分享到微信等