前言
当大家与mysql打过交道的应该都明白mysql自带的like检索方式完全不足以支撑我们在开发阶段的需求
例如 : 当我们用户需要搜索美的空调的相关商品时,那我们后台的处理sql是不是就是 LIKE %美的空调% 这样子吖 , 那么问题出来了, 关于'美的中央空调'的商品他会只字不提>︿<,这样子会不会很影响我们的业务需求啊!
其次就是mysql的负载并发问题,据我了解到的一般配置不是很突兀的服务器mysql并发也是只能发挥到400左右,所以我们要在实际开发中要使用多种方式去避免用户需求直接请求mysql查询!
初识elasticsearch
既然我们知道了mysql的短板,那我们就要做到扬长避短,那今天我们的主角就登场了elasticsearch搜索引擎,他有自己的数据存储可以减少mysql载荷,而且特别重要的是他有多种检索方式还有很厉害的检索数据打分排序机制,完完全全可以实现我们业务中大多数需求,接下来我们来看看es的具体安装方法吧
安装 : elasticsearch-7.2.0
装ES之前,需要先检查JDK版本,es使用java编写,强依赖java环境。每一个es版本对应的jdk版本都不一致,具体版本对应可以去官网查看:https://www.elastic.co/cn/support/matrix#matrix_jvm 这里7.2.0版本对应可以使用的jdk版本为1.8,11,12 ,如果项目jdk不对应其实也没关系你可以下载一个对应的jdk版本然后让es去引用你的新jdk就可,这样子就变成项目使用旧jdk而es使用你的新jdk了,具体方法在结尾处查看!
下载es
下载地址 : https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz 地址如果失效或者打不开,左侧站点概述云盘中有备份.
下载完成之后将压缩包使用ftp工具上传到服务器的/usr/local目录同时并解压elasticsearch-7.2.0-linux-x86_64.tar.gz到/usr/local/目录:
tar -zxvf elasticsearch-7.2.0-linux-x86_64.tar.gz -C /usr/local/
配置es
#进入解压后的elasticsearch目录
cd /usr/local/elasticsearch-7.2.0
#新建data目录:
mkdir data
#修改config/elasticsearch.yml
vim config/elasticsearch.yml
取消下列项注释并修改:
#集群名称
cluster.name: xxx
#节点名称
node.name: node-1
#数据和日志的存储目录
path.data: /usr/local/elasticsearch-7.2.0/data
path.logs: /usr/local/elasticsearch-7.2.0/logs
#设置绑定的ip,设置为0.0.0.0以后就可以让任何计算机节点访问到了
network.host: 0.0.0.0
#默认端口
http.port: 9200
#设置在集群中的所有节点名称
cluster.initial_master_nodes: ["node-1"]
#修改完毕后,:wq 保存退出
然后修改es占用jvm空间分配(默认2G,大家根据实际情况配置)
#进入config目录下
cd /usr/local/elasticsearch-7.2.0/config
#打开jvm.options
vim jvm.options
#设置占用空间(注意m、g小写 , 不用设置也可以)
-Xms200m
-Xmx200m
启动es
由于es可以输入且执行脚本,为了系统安全,es是不允许使用root启动,所以我们要添加一个es专用用户来启动es:
#添加用户和设置密码
adduser es
passwd es
#授权 /usr/local/elasticsearch-7.2.0目录下的文件拥有者为 es
chown es /usr/local/elasticsearch-7.2.0/ -R
#切换用户
su es
#启动es
cd /usr/local/elasticsearch-7.2.0/bin
./elasticsearch -d
#查看进程
ps -ef|grep elasticsearch
这样子es就启动成功了,但是因为系统差异这里也会出现很多问题,因为文章可读性,我把我遇到的问题以及解决方法放到的文章结尾,大家可以去看下!
如果要关闭es进程,也就简单了直接kill-9上面标识的进程号即可
kill -9 [pid]
校验是否安装成功
访问 : 127.0.0.1:9200,127.0.0.1改成你服务器的ip地址,如果出现如下信息,则代表安装成功。
{
"name" : "node-1",
"cluster_name" : "xxx",
"cluster_uuid" : "8SZOAD43Q4uiSaWFMrKSyQ",
"version" : {
"number" : "7.2.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "508c38a",
"build_date" : "2019-06-20T15:54:18.811730Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
启动es遇到的问题解决方案
解决 max virtual memory areas vm.max_map_count [65530] is too low 错误
原因:max_map_count这个参数就是允许一个进程在VMAs(虚拟内存区域)拥有最大数量,VMA是一个连续的虚拟地址空间,当进程创建一个内存映像文件时VMA的地址空间就会增加,当达到max_map_count了就是返回out of memory errors
解决方案
#修改下面的文件 里面是一些内核参数
vim /etc/sysctl.conf
#在末尾添加以下配置
vm.max_map_count=655360
#添加完 !wq 保存退出,然后执行
sysctl -p #-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
然后重新切换到es用户启动es即可,记得修改文件需要先切换成root用户,要不没有权限哦
解决 max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536] 错误
原因: 最大文件打开数量太小,出现此错误
#vim编辑此文件
vim /etc/security/limits.conf
#在末尾加上:
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096
解决项目使用的jdk与es版本不符
当项目jdk与我们想要使用的es版本不符时,我们只需要给es单独下载配置一个jdk即可,不需要变动项目jdk环境,我现在用的es7.2.0就单独配置的jdk11.我项目使用的是jdk1.8
先根据es版本去下载jdk,下面使用jdk11来做演示(jdk11压缩包云盘有哦)
#将下载下来的JDK压缩包放到任意目录,然后解压到es的目录,也可以自定义,我为了好打理就直接放到es目录了
tar -vzxf jdk-11.0.10_linux-x64_bin.tar.gz -C /usr/local/elasticsearch-7.2.0/
#修改es启动脚本(脚本一般在es文件夹下的bin目录下,elasticsearch)
vim /usr/local/elasticsearch-7.2.0/bin/elasticsearch
# 添加以下代码,具体存放位置下面有范例,大家根据我的配置来放置即可!
export JAVA_HOME=/usr/local/elasticsearch/jdk-11.0.10
export PATH=$JAVA_HOME/bin:$PATH
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/usr/local/elasticsearch/jdk-11.0.10/bin/java"
else
JAVA=`which java`
fi
我的es启动脚本
#!/bin/bash
# CONTROLLING STARTUP:
#
# This script relies on a few environment variables to determine startup
# behavior, those variables are:
#
# ES_PATH_CONF -- Path to config directory
# ES_JAVA_OPTS -- External Java Opts on top of the defaults set
#
# Optionally, exact memory values can be set using the `ES_JAVA_OPTS`. Note that
# the Xms and Xmx lines in the JVM options file must be commented out. Example
# values are "512m", and "10g".
#
# ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch
# 我添加的 start JAVA_HOME = [后面是你的新jdk文件夹路径]
export JAVA_HOME=/usr/local/elasticsearch/jdk-11.0.10
export PATH=$JAVA_HOME/bin:$PATH
# 我添加的 end
source "`dirname "$0"`"/elasticsearch-env
if [ -z "$ES_TMPDIR" ]; then
ES_TMPDIR=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.TempDirectory`
fi
ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options
JVM_OPTIONS=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.JvmOptionsParser "$ES_JVM_OPTIONS"`
ES_JAVA_OPTS="${JVM_OPTIONS//\$\{ES_TMPDIR\}/$ES_TMPDIR}"
# 我添加的 start JAVA= [后面是你的bin/java文件路径,记得改成自己的]
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/usr/local/elasticsearch/jdk-11.0.10/bin/java"
else
JAVA=`which java`
fi
# 我添加的 end
# manual parsing to find out, if process should be detached
if ! echo $* | grep -E '(^-d |-d$| -d |--daemonize$|--daemonize )' > /dev/null; then
exec \
"$JAVA" \
$ES_JAVA_OPTS \
-Des.path.home="$ES_HOME" \
-Des.path.conf="$ES_PATH_CONF" \
-Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \
-Des.distribution.type="$ES_DISTRIBUTION_TYPE" \
-Des.bundled_jdk="$ES_BUNDLED_JDK" \
-cp "$ES_CLASSPATH" \
org.elasticsearch.bootstrap.Elasticsearch \
"$@"
else
exec \
"$JAVA" \
$ES_JAVA_OPTS \
-Des.path.home="$ES_HOME" \
-Des.path.conf="$ES_PATH_CONF" \
-Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \
-Des.distribution.type="$ES_DISTRIBUTION_TYPE" \
-Des.bundled_jdk="$ES_BUNDLED_JDK" \
-cp "$ES_CLASSPATH" \
org.elasticsearch.bootstrap.Elasticsearch \
"$@" \
<&- &
retval=$?
pid=$!
[ $retval -eq 0 ] || exit $retval
if [ ! -z "$ES_STARTUP_SLEEP_TIME" ]; then
sleep $ES_STARTUP_SLEEP_TIME
fi
if ! ps -p $pid > /dev/null ; then
exit 1
fi
exit 0
fi
exit $?
解决修改es运行jdk出现的OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will l 问题
解决办法:
vim /usr/local/elasticsearch-7.2.0/config/jvm.options
把 -XX:+UseConcMarkSweepGC 改为 -XX:+UseG1GC
小结
es的安装也就到这里结束了,如果大家有什么问题或者发现文章中有错误欢迎大家评论区提出!接下来我会给大家带来es的分析和可视化平台kibana的安装和es实用插件ik分词器的安装,敬请期待把ヾ(≧▽≦*)o