Elasticsearch是一种分布式、高扩展性和实时性的搜索与数据分析引擎,可轻松实现大规模数据的搜索、分析和探索能力。通过充分利用Elasticsearch的水平扩展性,数据在生产环境中变得更具价值。Elasticsearch的实现原理主要包括以下几个步骤:首先,用户将数据提交到Elasticsearch数据库中;然后,通过分词控制器对语句进行分词,并将权重和分词结果存入数据中;当用户搜索数据时,根据权重对结果进行排名和打分,并将结果返回给用户。
Elasticsearch作为商城核心框架,主要应用在商城搜索、商品搜索、订单搜索、店铺搜索等搜索场景,起到支撑核心业务的重要作用。下面以为Elasticsearch 6.x为例搭建一套完整的搜索引擎。
1、系统参数配置
1.1 配置资源限制
打开/etc/security/limits.conf 在文件最后添加如下配置:
`如Elasticsearch使用appuser用户部署`
appuser -memlock unlimited
appuser -nofile 100000
appuser -nproc 32768
appuser -as unlimited
1.2 配置网络缓冲区和虚拟内存
打开/etc/sysctl.conf 在文件最后添加如下配置:
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_max_orphans=3276800
net.ipv4.tcp_fin_timeout=30
vm.max_map_count=1048575
vm.swappiness=5
让配置生效
: sysctl -p
2、ES中间件部署
将Elasticsearch 6.x解压到指定的目录,并进入config目录,修改elasticsearch.yml文件配置
-
cluster.name
: es-cluster #集群名称,同一集群保持名称一致 -
node.name
: node-1 #建议按照IP地址尾号命名,如node-123 -
node.master
: true #指定该节点是否有资格被选举成为node(注意这里只是设置成有资格, 不代表该node一定就是master),默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master -
node.data
: true #指定该节点是否存储索引数据,默认为true -
path.data
:/appuser/elasticsearch/data #文件路径 -
path.logs
:/nas/elasticsearch/logs #日志路径 -
bootstrap.memory_lock
: true #内存交换的选项,官网建议为true -
network.host
:0.0.0.0 -
network.publish_host
:192.168.0.1 #当前主机实际IP地址 -
http.port
:9200 #设置对外服务的http端口,默认为9200 -
transport.tcp.port
: 9300 #es节点之间通信的端口,默认为 9300 -
http.cors.enabled
: true #解决跨域问题 -
http.cors.allow-origin
: “*” -
descovery.zen.unicast.hosts
:[“192.168.0.1:9300”,“192.168.0.2:9300”,“192.168.0.3:9300”] #集群的ip集合,启动新节点时,通过这个ip列表进行节点发现,组建集群 -
discovery.zen.minimum_master_nodes
:2 #通过配置此参数来防止集群“脑裂现象”(集群节点总数/2+1),可根据集群规模适当调整到3
2.1 jvm.options调优
可根据宿主机内存大小进行调整,可参考官网说明,以下是以16G内存大小的主机为例配置:
-Xms8g
-Xmx8g
-XX:NewRatio=1
-XX:+AlwaysPreTouch
#GC垃圾回收期,默认是MARK清除垃圾回收期,此处使用G1
-XX:+UseG1GC
-XX:G1RSetUpdatingPauseTimePercent=5
-XX:MaxGCPauseMillis=500
-XX:InitiatingHeapOccupancyPercent=70
-XX:ParallelGCThreads=16
-XX:ConcGCThreads=16 #默认是并行ParallelGCThreads的1/4,设置相同减少STW
#其他Print参数使用默认即可;
#Heap Dumps配置
`-XX:HeapDumpPath`=/heapdump #具体地址
`-XX:ErrorFile`=/applog/logs/hs_err_pid%p.log
建议多关心这条限制:ElasticSearch推荐
的最大JVM堆空间为30~32G, 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算. 例如, 你认为你的数据能达到200GB, 我们推荐你最多分配7到8个分片。
2.2 更多调优,请查看另一篇文章
3、启动ES
进入bin目录,执行命令./elasticsearch -d 即可启动
3.1 查看集群状态
(1)进入path.logs查看日志文件
(2)浏览器输入http://ip:9200,其中ip为任意主机的ip地址,可以查看对应的节点信息
{
"nome":"node-1",
"cluster_name":"es-cluster",
"cluster_uuid":"wSNcWcAVT1ik8pffGMRgKg",
"version":{
"number":"6.x",
"build_flavor":"default",
"build_type":"tar"
....等等
},
"tagline":"You Know,for Search"
}
(3)浏览器输入http://ip:9200/_cat/nodes 可查看集群状态,有*的为集群的主节点
192.168.0.1 52 89 1 0.00 0.02 0.05 dilm - node-1
192.168.0.2 52 78 2 0.00 0.15 0.12 dilm * node-2
192.168.0.3 52 92 3 0.00 0.20 0.16 dilm - node-3
4、IK分词器安装
4.1 中文分词器
下载elasticsearch-analysis-ik-6.x.zip,注意ik分词器安装包的版本与ES的版本要一致,安装的时候,每台ES宿主机都需要安装
(1)安装ik分词器前,停止所有的es服务,可以kill掉所有ES进程;
(2)进入es目录
- cd elasticsearch-6.x
在该目录下执行如下命令:
- ./bin/elasticsearch-plugin install file:/appuser/…/elasticsearch-analysis-ik-6.x.zip
其中,file:后面的是ik分词器安装包安装的绝对路径,对每一个节点执行以上操作,即可完成整个集群ik分词器的安装部署。
4.2 中文拼音分词器
下载elasticsearch-analysis-pinyin-6.x.zip,安装时候,每台ES宿主机执行相同操作。
(1)安装ik分词器前,停止所有的es服务,可以kill掉所有ES进程;
(2)进入es目录
- cd elasticsearch-6.x
在该目录下执行如下命令: - ./bin/elasticsearch-plugin install file:/appuser/…/elasticsearch-analysis-pinyin-6.x.zip
其中,file:后面的是pingyin分词器安装包安装的绝对路径,对每一个节点执行以上操作,即可完成整个集群pingyin分词器的安装部署。
4.3 ik分词器验证
完成所有节点ik安装后,启动ES集群,查看ES每个节点的日志(路径path.logs:配置),可以看到类似下面的内容,说明ik分词器安装成功。
[2021-01-20T14:01:53,584][INFO][o.e.p.PluginsService][node-1]loaded plugin [analysis-ik]
注:为了确保插件成功安装,请一一排除ES集群每个节点。
5、Kibana 6.x安装
可选择性安装,只需要为ES集群中的某一个节点安装Kibana即可。解压后配置kibana.yml文件
#访问kibana的端口
server.port=5601
#安装kibana的机器IP
server.host:"192.168.0.1"
#kibana访问的ES地址
elasticsearch.url:192.168.0.1:9200
xpack.security.enabled:false
(1)启动Kibana
- ./bin/kibana
(2)访问kibana
- http://ip:5601