# Elasticsearch

Elasticsearch 是一个功能强大,易于使用,高度可扩展的分布式全文检索引擎,适用于各种规模和类型的数据搜索和分析需求。

# 环境准备

在正式安装之前,查阅官方文档了解到,Elasticsearch 的安装与操作系统和JVM有关。https://www.elastic.co/cn/support/matrix/ (opens new window),根据操作系统和JVM的版本,我们选择安装合适版本的 Elasticsearch。

# 确认操作系统

# 打印系统信息
uname -a

# 查看 /etc/os-release 文件
cat /etc/os-release

# 确认 Java 版本

# 查看版本
java -version

# 或者查看 java 命令的位置
which java

# 查找命令的位置
command -v java

在大多数 Linux 系统中,/usr/bin/java 是一个指向实际 Java 可执行文件的符号链接。你可以使用 ls 命令的 -l 选项来查看这个链接指向哪里,可以帮助你确定 Java 的安装位置。

ls -l /usr/bin/java

又或者包管理器来查询已安装的 java 包

yum list installed | grep java

# 安装 Java

如果没有 java 的话,安装即可

# 搜索 java 包
yum -y list java*

# 安装 java 包
yum install -y java-1.8.0-openjdk.x86_64

# PHP 客户端

Elasticsearch 有很多客户端 https://www.elastic.co/guide/en/elasticsearch/client/index.html (opens new window),有 java,javascript,go,rust,python,php等等。由于我们的项目是 PHP 项目,另外项目的 PHP 版本是 7.3,因此确认使用 Elasticsearch 的 7.17 版本。

# 安装 Elasticsearch

经过上面环境准备,确认需要安装的是 7.17 版本,参考官方的文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/getting-started.html (opens new window)

# 源码安装

# 下载源码压缩包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.18-linux-x86_64.tar.gz

# 解压
tar -xzf elasticsearch-7.17.18-linux-x86_64.tar.gz

# 进入目录
cd elasticsearch-7.17.18/

# 做为守护进程启动
./bin/elasticsearch -d -p pid

启动的过程会报错:java.lang.RuntimeException: can not run elasticsearch as root,意思就是不能使用root权限启动。

# 添加新用户
useradd user-es

# 改变目录权限
chown user-es:user-es -R elasticsearch-7.17.18

# 此处为备注信息,用户密码:useres123456

再次启动服务即可,顺便检查下服务是否正常启动

curl -X GET "localhost:9200/?pretty"

出现以下结果:

{
  "name" : "iZ8vb1bgiwdylmgiy04tz8Z",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "YcorPi1rQ0iLrZILjLBDEQ",
  "version" : {
    "number" : "7.17.18",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "8682172c2130b9a411b1bd5ff37c9792367de6b0",
    "build_date" : "2024-02-02T12:04:59.691750271Z",
    "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"
}

# 服务的启动与关闭

后台启动服务

# 进入目录
cd /usr/local/src/elasticsearch-7.17.18/bin

# 启动后台服务
./bin/elasticsearch -d 

关闭服务:

# 查找进程
ps -ef|grep elasticsearch

# 杀死进程
kill -9 pid

至此 Elasticsearch 已经安装完毕,同时也引出了 PHP 客户端,通过 composer 引入项目使用即可。

# 相关配置项

# 内存问题

正常启动 Elasticsearch 服务后,在宝塔首页查看内容使用率,直接飙升至 90% 。这样的话就会影响到线上的其他业务。因此还需要修改一下配置项

修改配置文件 /usr/local/src/elasticsearch-7.17.18/config/jvm.options注意在修改之前,比较好的实践经验是先备份一下要修改的配置文件

# 默认配置
-Xms4g
-Xmx4g

# 我们调小一些
-Xms512m
-Xmx512m

# 修改配置项

修改配置文件 /usr/local/src/elasticsearch-7.17.18/config/elasticsearch.yml注意在修改之前,比较好的实践经验是先备份一下要修改的配置文件

# 配置集群名字
cluster.name: yzh-plate

# 配置节点名称
node.name: yzh-plate-snapshot

# 修改绑定的ip允许远程访问
network.host: 0.0.0.0

# 配置端口号
http.port: 9200

# 配置集群主机列表
discovery.seed_hosts: ["127.0.0.1"]

# 启动时初始化的参与选主的node,生产环境必填
cluster.initial_master_nodes: ["node-1"]

# 允许跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

# 数据可视化

需要安装 elasticsearch-head

# 拉取项目 或者下载 zip 压缩
git clone git@github.com:mobz/elasticsearch-head.git

# 启动项目
npm run start &

# 如果提示 9100 端口已被占用,查看端口并杀死该进程,然后再重新启动
lsof -i:9100
kill -9 pid

# 后台启动
nohup npm run start &

# 执行退出操作
exit

注意:如果提示elasticsearch用户拥有的内存权限太小,至少需要262144,解决办法:

# 切换到root用户
su root

# 执行命令
vim /etc/sysctl.conf

# 添加如下配置
vm.max_map_count = 262144

# 保存退出之后,应用新的更改
sysctl -p

访问如下链接: