Ubuntu系统使用apt命令工具安装Elasticsearch和ik分词器

Elasticsearch简介
Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎。它能够解决从简单到复杂的各种搜索问题,并且由于其分布式特性,可以扩展到数百台服务器,处理 PB 级结构化或非结构化数据。Elasticsearch 基于 Lucene 构建,但它的目标是使全文搜索及其后端功能(如自动完成)变得简单易用。

主要特点
  • 分布式:Elasticsearch 是一个分布式系统,这意味着它可以管理多个节点,每个节点都是运行 Elasticsearch 的服务器。这些节点一起形成一个集群,数据被分片存储在不同的节点上,从而实现水平扩展。
  • 实时分析:Elasticsearch 能够实时地对数据进行索引和搜索,非常适合需要快速响应的应用场景。
  • 高可用性:通过复制机制,Elasticsearch 可以保证即使某个节点失败,数据仍然是安全的并且可被检索。
  • 多租户:可以在同一集群中支持多个用户或应用程序,每个用户或应用程序可以拥有自己的索引。
  • 插件化:可以通过各种插件来增强功能,比如支持额外的数据类型、提供额外的聚合等。
  • RESTful 接口:所有的功能都可以通过 HTTP 请求JSON 数据格式来访问,这使得与其他系统集成变得非常容易。
使用场景

Elasticsearch 广泛应用于多种领域,包括但不限于:

  • 日志分析:收集、分析和可视化日志数据。
  • 搜索引擎:为网站或应用提供强大的搜索能力。
  • 监控系统:用于监控系统性能指标、错误日志等。
  • 推荐系统:基于用户的搜索历史或其他行为提供个性化推荐。
生态系统

Elasticsearch 是 Elastic Stack的一部分,这个栈还包括 Kibana(用于数据可视化)、Logstash(用于数据摄入管道)和 Beats(一组轻量级的发送器,用于发送数据到 Elasticsearch 或 Logstash)。这些工具共同工作,形成了一个完整的解决方案,用于搜索、分析和可视化大规模数据集。

安装准备

Easticsearch的运行环境依赖Java,而且要满足版本应该是Java 7或者更高版本,所以先检查系统是否有安装Java以及对应版本是否符合要求。


开始安装

第一步:安装Java (如已安装,请忽略此步骤)

安装openjdk-8-jdk命令如下:

root@prajna_sea:/# apt update
root@prajna_sea:/# apt install openjdk-8-jdk

查看Java版本:

#输出以下信息表示已成功安装Java运行环境
root@prajna_sea:/# java -version
openjdk version "1.8.0_422"
OpenJDK Runtime Environment (build 1.8.0_422-8u422-b05-1~22.04-b05)
OpenJDK 64-Bit Server VM (build 25.422-b05, mixed mode)
第二步:安装Elasticsearch

安装有多种方式:

  • 1.可以通过官网下载对应系统的tar压缩包进行安装【❌不推荐,官网国内访问比较慢】
  • 2.通过Docker镜像安装【✅推荐使用Docker镜像安装,安装和使用简单快捷】
  • 3.使用apt命令和yum命令安装【✅推荐,安装速度快、管理更便捷】

使用apt命令安装如下:

root@prajna_sea:/# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
root@prajna_sea:/# echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
root@prajna_sea:/# apt update
root@prajna_sea:/# apt install elasticsearch=7.17.14
  • 使用apt install 如果不指定版本将会下载7.x的最新版

等待安装成功后,显示如下:

### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch/elasticsearch.keystore

启动Elasticsearch:

  • sudo systemctl daemon-reload 重新加载 systemd 的配置文件。当对系统中的服务单元文件进行了任何修改或添加了新的服务单元文件时,这个命令用来确保 systemd 重新读取最新的配置信息。这一步是必要的,因为 systemd 在启动时会缓存服务配置信息,如果不重新加载,它将不会意识到新的或更新过的服务配置。
  • sudo systemctl enable elasticsearch 如果希望 Elasticsearch 服务在每次系统启动时自动运行,那么就需要执行这个命令。
  • sudo systemctl start elasticsearch 启动 Elasticsearch 服务
  • 服务启动时要占用很大的内存空间,所以如果服务器配置较低,可以修改/etc/elasticsearch/jvm.options文件里面的-Xms1g
    -Xmx1g
    • -Xms最小暂用内存,例如500Mb:-Xms500m
    • -Xmx最大暂用内存,例如1Gb:-Xmx1g

启动成功后可以查看状态:

root@prajna_sea:/# systemctl start elasticsearch
root@prajna_sea:/# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2024-09-04 17:12:00 CST; 2s ago
 Main PID: 1234 (java)
   CGroup: /system.slice/elasticsearch.service
           └─1234 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Xms512m -Xmx512m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:MaxHeapFreeRatio=70 -XX:MinHeapFreeR...

启动成功后访问9200端口,将会输出以下信息:

root@prajna_sea:/# curl http://127.0.0.1:9200
{
  "name" : "prajna_sea",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "bnfSshxnQbGUQZOP6q4kaQ",
  "version" : {
    "number" : "7.17.14",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "774e3bfa4d52e2834e4d9d8d669d77e4e5c1017f",
    "build_date" : "2023-10-05T22:17:33.780167078Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

设置允许跨域访问,这样才能接入可视化工具,例如:kibanaelasticsearch-head

  • 修改/etc/elasticsearch/elasticsearch.yml配置文件,增加以下内容:
http.cors.enabled: true
http.cors.allow-origin: "*"

设置允许外网或指定ip访问,防火墙和安全组还需要放行9200端口

  • 修改/etc/elasticsearch/elasticsearch.yml配置文件,network.host 配置修改为以下内容:
network.host: 0.0.0.0 #0.0.0.0 就是配置允许所有ip地址访问,也可以指定其它ip访问


其他平台安装

在Windows10系统里面安装

Windows10系统里面安装我用到了wsl(适用于 Linux 的 Windows 子系统 (WSL) 可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。),有了wsl可以在Windows中使用linux环境,不需要安装其它虚拟机软件!而且Vscode里面也有对应wsl插件,所以使用起来比较方便。如果有需要在linux开发的项目,并且没有对应的环境,推荐使用此项功能。

wslUbuntu虚拟机里面进行安装步骤和前面相同,但是在启动Elasticsearch时会存在一些坑,首先是不支持systemctl这个命令,如果直接运行sudo systemctl start elasticsearch,会提示错误信息:

root@prajna_sea:~# systemctl start elasticsearch
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

可以使用/etc/init.d/elasticsearch这个脚本来启动、停止、重启、查看服务

root@prajna_sea:~# /etc/init.d/elasticsearch
 * Usage: /etc/init.d/elasticsearch {start|stop|restart|force-reload|status}
  • /etc/init.d/elasticsearch start 启动服务,在启动时会提示如下错误:
root@prajna_sea:~# /etc/init.d/elasticsearch start
 * Starting Elasticsearch Server                                                                            
 * start-stop-daemon: matching on world-writable pidfile /var/run/elasticsearch/elasticsearch.pid is insecure
                                                                                                     [fail]

这个错误是因为/var/run/elasticsearch/elasticsearch.pid 这个文件的权限是不安全的,可以将这个文件权限设置为700,然后就能启动成功:

root@prajna_sea:~# chmod 700 /var/run/elasticsearch/elasticsearch.pid
root@prajna_sea:~# /etc/init.d/elasticsearch start
 * Starting Elasticsearch Server                                                                            
 * Sep 05, 2024 4:46:15 PM sun.util.locale.provider.LocaleProviderAdapter <clinit>
WARNING: COMPAT locale provider will be removed in a future release
                                                                                                     [ OK ]

还有坑的地方是,如果运行/etc/init.d/elasticsearch stop 或者/etc/init.d/elasticsearch restart 命令后再次start都要重新修改/var/run/elasticsearch/elasticsearch.pid 文件的权限,否则启动会报错。
我的解决方法先删除/var/run/elasticsearch/elasticsearch.pid这个文件,然后编辑vi /etc/init.d/elasticsearch脚本,修改其中start逻辑,这样后面启动就不会提示权限错误了。改动部分如下:

if [ -n "$PID_FILE" ] && [ ! -e "$PID_FILE" ]; then
        touch "$PID_FILE" && chown elasticsearch:elasticsearch "$PID_FILE"
        #这里加上修改文件权限的命令
        chmod 700 "$PID_FILE"
fi


wsl环境下的其他小技巧

~/.bashrc文件里面增加启动Elasticsearch的命令别名,这样就不用每次输入/etc/init.d/elasticsearch start 命令来启动:

root@prajna_sea:~# vi ~/.bashrc
#在.bashrc文件里加入以下配置
alias startelastic='sudo /etc/init.d/elasticsearch start'
alias stopelastic='sudo /etc/init.d/elasticsearch stop'

配置好后关掉命令窗口,再打开一个新的命令窗口,输入命令:startelasticstopelastic,就能启动、停止服务了:

root@prajna_sea:~# startelastic
 * Starting Elasticsearch Server                                                                             
 * * Already running.                                                                                  [ OK ]


安装ik中文分词器
安装分词器步骤比较简单,但是由于国内访问速度太慢,要下载很久,所有这里使用下载的地址是:https://get.infini.cloud/elasticsearch/analysis-ik/7.17.14,后面的 7.17.14 这个版本要和安装的Elasticsearch版本对应:

root@prajna_sea:~# cd /usr/share/elasticsearch
root@prajna_sea:/usr/share/elasticsearch# bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.14
-> Installing https://get.infini.cloud/elasticsearch/analysis-ik/7.17.14
-> Downloading https://get.infini.cloud/elasticsearch/analysis-ik/7.17.14
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed analysis-ik
-> Please restart Elasticsearch to activate any plugins installe
root@prajna_sea:~# /etc/init.d/elasticsearch restart

安装后重启Elasticsearch服务,如果是wsl环境下用任务管理器kill掉服务再重新启动,安装成功测试分词将输出如下信息:

root@prajna_sea:~# curl -X GET http://127.0.0.1:9200/_analyze -H "Content-Type: application/json"  -d '{ "analyzer": "ik_smart","text": ["Ubuntu系统使用apt命令工具安装Elasticsearch和ik分词器"]}'
{
	"tokens": [{
		"token": "ubuntu",
		"start_offset": 0,
		"end_offset": 6,
		"type": "ENGLISH",
		"position": 0
	}, {
		"token": "系统",
		"start_offset": 6,
		"end_offset": 8,
		"type": "CN_WORD",
		"position": 1
	}, {
		"token": "使用",
		"start_offset": 8,
		"end_offset": 10,
		"type": "CN_WORD",
		"position": 2
	}, {
		"token": "apt",
		"start_offset": 10,
		"end_offset": 13,
		"type": "ENGLISH",
		"position": 3
	}, {
		"token": "命令",
		"start_offset": 13,
		"end_offset": 15,
		"type": "CN_WORD",
		"position": 4
	}, {
		"token": "工具",
		"start_offset": 15,
		"end_offset": 17,
		"type": "CN_WORD",
		"position": 5
	}, {
		"token": "安装",
		"start_offset": 17,
		"end_offset": 19,
		"type": "CN_WORD",
		"position": 6
	}, {
		"token": "elasticsearch",
		"start_offset": 19,
		"end_offset": 32,
		"type": "ENGLISH",
		"position": 7
	}, {
		"token": "和",
		"start_offset": 32,
		"end_offset": 33,
		"type": "CN_CHAR",
		"position": 8
	}, {
		"token": "ik",
		"start_offset": 33,
		"end_offset": 35,
		"type": "ENGLISH",
		"position": 9
	}, {
		"token": "分词器",
		"start_offset": 35,
		"end_offset": 38,
		"type": "CN_WORD",
		"position": 10
	}]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值