CentOS7下安装ES
CentOS7下安装ES
前期准备
由于ES不能使用root用户来启动,必须使用普通用户来安装启动。这里我们创建一个普通用户以及定义一些常规目录用于存放我们的数据文件以及安装包等。
-
先创建一个管理elasticsearch的用户组,这里我用户组叫linkai:
[root@localhost ~]# groupadd linkai
-
创建一个普通用户并设置密码,这里我创建的用户叫linkai,然后把用户linkai添加到用户组linkai中:
[root@localhost ~]# useradd linkai [root@localhost ~]# passwd linkai Changing password for user linkai. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]# usermod ‐G linkai linkai
-
创建文件夹es并将owner更改为linkai用户:
[root@localhost ~]# mkdir ‐p /usr/local/es [root@localhost ~]# chown -R linkai /usr/local/es/
-
为linkai用户设置sudo权限,为了让普通用户有更大的操作权限,我们一般都会给普通用户设置sudo权限,方便普通用户的操作
[root@localhost ~]# visudo
-
添加成功保存后切换到linkai用户操作
[root@localhost ~]# su linkai [linkai@localhost root]$
下载ES并解压
将es的安装包下载到/user/local路径下,然后进行解压,使用linkai用户来执行以下操作:
[linkai@localhost root]$ cd /usr/local/
[linkai@localhost local]$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
--2021-02-28 18:31:14-- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
……
[linkai@localhost local]$ tar -zvxf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /usr/local/es/
修改配置文件
修改elasticsearch.yml
进入服务器使用linkai用户来修改配置文件:
[linkai@localhost local]$ cd /usr/local/es/elasticsearch-7.6.1/config/
[linkai@localhost config]$ mkdir -p /usr/local/es/elasticsearch-7.6.1/log
[linkai@localhost config]$ mkdir -p /usr/local/es/elasticsearch-7.6.1/data
[linkai@localhost config]$ rm -rf elasticsearch.yml
[linkai@localhost config]$ vim elasticsearch.yml
# 集群名字(自己规定,集群的名字都要保持一致)
cluster.name: linkai-es
# 节点名字
node.name: node1
path.data: /usr/local/es/elasticsearch-7.6.1/data
path.logs: /usr/local/es/elasticsearch-7.6.1/log
network.host: 0.0.0.0
http.port: 9200
# discovery.seed_hosts: ["当前的服务器IP"]
discovery.seed_hosts: XXX.XXX.XXX.XXX
# cluster.initial_master_nodes: ["节点名"]
cluster.initial_master_nodes: node1
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
http.cors.enabled: true
http.cors.allow-origin: "*"
修改jvm.option
修改jvm.option配置文件,调整jvm堆内存大小
使用linkai用户执行以下命令调整jvm堆内存大小,每个人根据自己服务器的内存大小来进行调整。
一般默认一个G的大小不是很够用,这里本人改为2G:
[linkai@localhost config]$ vim jvm.options
# 把原来的-Xms1g和-Xmx1g更改为2g
-Xms2g
-Xmx2g
但是后来我的阿里云在安装ES的时候报错,因为我的阿里云内存只有2G,所以:
# 把原来的-Xms1g和-Xmx1g更改为2g
-Xms251m
-Xmx251m
修改系统配置,解决启动时候的问题
由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等。所以我们需要给普通用户解开资源的束缚:
普通用户打开文件的最大数限制
如果遇到问题:
-
问题错误信息描述:
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
说明ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错。执行以下命令解除打开文件数据的限制:
[linkai@localhost config]$ sudo vi /etc/security/limits.conf
[sudo] password for linkai:
# End of file
# 一般就是在文件的最后添加最后那两行
# 注意*不要去掉
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
* soft nproc 2048
* hard nproc 4096
普通用户启动线程数限制
如果遇到:
-
问题错误信息描述
max number of threads [1024] for user [es] likely too low, increase to at least [4096]
原因:无法创建本地线程问题,用户最大可创建线程数太小
解决方案:修改20-nproc.conf 配置文件。
[linkai@localhost config]$ sudo vi /etc/security/limits.d/20-nproc.conf
# 把* soft nproc 1024修改为4096
* soft nproc 4096
普通用户调大虚拟内存
如果是:
-
错误信息描述:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
需要调大系统的虚拟内存。
报错的原因是最大的虚拟内存太小。
在每次启动机器都手动执行下。
[linkai@localhost config]$ sudo vim /etc/sysctl.conf
追加以下内容:
vm.max_map_count=262144
保存后执行:
[linkai@localhost config]$ sudo sysctl -p
启动ES服务
[linkai@localhost elasticsearch-7.6.1]$ cd /usr/local/es/elasticsearch-7.6.1
[linkai@localhost elasticsearch-7.6.1]$ ./bin/elasticsearch -d
如果还是启动失败则可能:
-
报错1:OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
解决:修改jvm.options文件配置,
vim /etc/elasticsearch/jvm.options
,将-XX:+UseConcMarkSweepGC 改为 -XX:+UseG1GC
,再重新启动es -
报错2:OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed;
原因是内存不足,可以使用free -h命令一看便知,然后自己再重新修改jvm.options文件配置,按照服务器的情况修改-Xms和-Xmx的内存大小。
如果启动成功了,本机可以访问:
[linkai@local config]$ curl -XGET 'localhost:9200/?pretty'
{
"name" : "node1",
"cluster_name" : "linkai-es",
"cluster_uuid" : "n1rdbkgeTBq-edA_t5T8CQ",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
但是别的机器访问不了,首先检查自己的配置文件elasticsearch.yml中network.host属性是不是0.0.0.0,不是就改,如果是,那就是防火墙的问题了,在防火墙添加9200端口:
firewall-cmd --zone=public(作用域) --add-port=9200/tcp(端口和访问类型) --permanent(永久生效)
如果不考虑安全问题的话就一不做二不休,把防火墙关了:
sudo service firewalld stop
然后浏览器输入:http://ip:9200/?pretty
,可以访问说明成功。
注意:启动ES的时候出现 Permission denied
原因:当前的用户没有对XX文件或目录的操作权限。
图形化界面客户端Kibana安装
-
把Kibana上传到服务器上
-
解压
[linkai@localhost local]$ tar -zvxf kibana-7.6.1-linux-x86_64.tar.gz -C /usr/local/es/
-
进入/usr/local/es/kibana-X.X.X-linux-x86_64/config目录
-
编辑kibana.yml
server.port: 5601 # 注意,这个需要写内网ip,如果是阿里云等服务器,也只好写0.0.0.0了 server.host: "ES服务器IP" # 这里是elasticsearch的访问地址 elasticsearch.hosts: ["http://IP:9200"]
-
启动Kibana
[linkai@localhost local]$ cd /usr/local/es/kibana-7.6.1-linux-x86_64/bin [linkai@localhost bin]$ ./kibana
或者可以后台启动
[linkai@localhost bin]$ nohup ./kibana & [1] 4045 [linkai@localhost bin]$ nohup: ignoring input and appending output to ‘nohup.out’ [linkai@localhost bin]$ tail -f nohup.out {"type":"log","@timestamp":"2021-03-29T08:28:24Z","tags":["status","plugin:markdown_vis@7.6.1","info"],"pid":4045,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"}
-
访问Kibana
http://ip:5601/app/kibana
如果可以访问说明启动成功:
至此,kibana安装成功。使用的话到控制台http://ip:5601/app/kibana#/dev_tools/console
就可以使用了
安装IK分词器
-
下载Elasticsearch IK分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases
-
切换到linkai用户,并在es的安装目录下/plugins创建ik
[linkai@localhost bin]$ mkdir -p /usr/local/es/elasticsearch-7.6.1/plugins/ik
-
将下载的ik分词器上传并解压到该目录
[linkai@localhost ik]$ unzip elasticsearch-analysis-ik-7.6.1.zip
然后我需要安装unzip……
yum install -y unzip zip
-
然后重启Elasticsearch就ok了。
指定IK分词器作为默认分词器
ES的默认分词设置是standard,这个在中文分词时就比较尴尬了,会单字拆分,比如我搜索关键词“清华大学”,这时候会按“清”,“华”,“大”,“学”去分词,然后搜出来的都是些“清清的河水”,“中华儿女”,“地大物博”,“学而不思则罔”之类的莫名其妙的结果,这里我们就想把这个分词方式修改一下,于是呢,就想到了ik分词器,有两种ik_smart和ik_max_word。
ik_smart会将“清华大学”整个分为一个词,而ik_max_word会将“清华大学”分为“清华大学”,“清华”和“大学”,按需选其中之一就可以了。
修改默认分词方法(这里修改school_index索引库的默认分词为:ik_max_word):
PUT /school_index
{
"settings" : {
"index" : {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}
我们先来使用看看:
可以看出,ik_smart会做最粗粒度的拆分,ik_max_word会将文本做最细粒度的拆分,我们使用ik_max_word效果会好一些。