1、环境准备
1.1、主机准备
Ubuntu操作系统 内存:4G CPU:1核
es 192.168.10.25
es-bak 192.168.10.21
1.2、同步时间
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 同步系统时间
apt install -y ntpdate cron
systemctl start cron
systemctl enable cron
cat << 'CAT_END' > /var/spool/cron/crontabs/root
#ntp Server update
*/5 * * * * /usr/sbin/ntpdate ntp5.aliyun.com 2>&1 > /dev/null
#ntp end
CAT_END
ntpdate ntp5.aliyun.com
1.3、设置主机名
hostnamectl set-hostname es
2、安装JDK
2.1、准备软件
# 这里使用此版本
# openjdk-11.0.0.1_linux-x64_bin.tar.gz
mkdir /data/{softs,server} -p && cd /data/softs
curl -O https://download.java.net/openjdk/jdk11.0.0.1/ri/openjdk-11.0.0.1_linux-x64_bin.tar.gz
# es自带jdk,位置:/usr/share/elasticsearch/jdk
2.2、安装JDK软件
mkdir /data/{softs,server} -p
cd /data/softs
tar xf openjdk-11.0.0.1_linux-x64_bin.tar.gz -C /data/server/
ln -s /data/server/jdk-11.0.0.1 /usr/local/java
cat << 'CAT_END' >> /etc/profile
export JAVA_HOME=/usr/local/java
export ES_JAVA_HOME=/usr/share/elasticsearch/jdk
export PATH=$JAVA_HOME/bin:$PATH
CAT_END
source /etc/profile
java -version
3、ElasticSearch安装
# 这里推荐 两台服务器来部署 elasticsearch
3.1、方式1:yum、apt配置仓库安装
3.1.1、yum安装参考官网
3.1.2、apt安装参考官网
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/deb.html#deb-repo
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
3.2、方式2:下载.deb包离线安装
cd /data/softs/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.10-amd64.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.10-amd64.deb.sha512
shasum -a 512 -c elasticsearch-7.17.10-amd64.deb.sha512
dpkg -i elasticsearch-7.17.10-amd64.deb
3.3、配置es环境变量
cat << 'CAT_END' > /etc/profile.d/elasticsearch.sh
export PATH=/usr/share/elasticsearch/bin/:$PATH
CAT_END
source /etc/profile.d/elasticsearch.sh
3.4、配置文件位置解析
# dpkg -L elasticsearch | grep -Ei 'etc|service'
/usr/share/elasticsearch/bin/elasticsearch-service-tokens
/etc
/etc/elasticsearch
/etc/elasticsearch/elasticsearch-plugins.example.yml
/etc/elasticsearch/elasticsearch.yml # 核心配置文件
/etc/elasticsearch/jvm.options # jvm相关的配置
/etc/elasticsearch/role_mapping.yml
/etc/elasticsearch/roles.yml
/etc/elasticsearch/users
/etc/elasticsearch/users_roles
/etc/elasticsearch/log4j2.properties # 日志相关的配置
/etc/default
/etc/default/elasticsearch # 环境变量配置文件
/usr/lib/systemd/system/elasticsearch.service # 服务启动文件
/etc/init.d
/etc/init.d/elasticsearch
/etc/elasticsearch/jvm.options.d
4、配置ElasticSearch
4.1、es配置
root@es:~# grep -i '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: first.es.com
node.name: 192.168.10.25
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.10.25", "192.168.10.21"]
cluster.initial_master_nodes: ["192.168.10.25"]
http.cors.enabled: true
http.cors.allow-origin: "*"
4.2、es-bak配置
root@es-bak:~# grep -i '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: first.es.com
node.name: 192.168.10.21
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.10.25", "192.168.10.21"]
cluster.initial_master_nodes: ["192.168.10.25"]
http.cors.enabled: true
http.cors.allow-origin: "*"
4.3、配置属性解析
# grep -i '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: frist.es.com # 设定elasticsearch集群的名称
node.name: 192.168.10.21 # 设定节点名字
path.data: /var/lib/elasticsearch # 设定elasticsearch的存储目录,包括数据目录和日志目录
path.logs: /var/log/elasticsearch # 设定elasticsearch的存储目录,包括数据目录和日志目录
network.host: 0.0.0.0 # 允许所有主机都能访问我们的elasticsearch
http.port: 9200 # 设置elasticsearch对外的访问端口
discovery.seed_hosts: ["192.168.10.25", "192.168.10.21"] # 设定主机发现
cluster.initial_master_nodes: ["192.168.10.25"] # 设置初始化主节点
http.cors.enabled: true # 开启跨域访问支持,默认为false
http.cors.allow-origin: "*" # 跨域访问允许的域名地址,(允许所有域名)以上使用正则
# 注意事项
对于 node 主机只需要更改一处 node.name 即可
如果是重新还原es集群,启动前将 path.data 和 path.logs 目录下的数据清空,避免数据不一致
5、启动服务并且检查
5.1、启动服务
systemctl start elasticsearch
5.2、检查端口
# ss -tunlp | grep java
tcp LISTEN 0 4096 *:9300 *:* users:(("java",pid=1595,fd=287))
tcp LISTEN 0 4096 *:9200 *:* users:(("java",pid=1595,fd=315))
5.3、浏览9200端口
root@es:~# curl 192.168.10.25:9200
{
"name" : "192.168.10.25",
"cluster_name" : "first.es.com",
"cluster_uuid" : "7s6Z15FxToCpkqVeSa73KQ",
"version" : {
"number" : "7.17.10",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "fecd68e3150eda0c307ab9a9d7557f5d5fd71349",
"build_date" : "2023-04-23T05:33:18.138275597Z",
"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"
}
6、请求命令管理
6.1、查看集群状态
curl -XGET 192.168.10.25:9200/_cat/health
curl -XGET 192.168.10.25:9200/_cat/health?v
# 注意:在所有的地址后面,增加 ? 和 ?v ,会逐渐显示更多的详细内容
6.2、查看集群节点
curl -XGET 192.168.10.25:9200/_cat/nodes
6.3、索引管理
6.3.1、创建索引
curl -XPUT 192.168.10.25:9200/index_test
6.3.2、查看索引
curl -XGET 192.168.10.25:9200/_cat/indices
6.3.3、格式化显示索引
curl -XGET 192.168.10.25:9200/index_test?pretty
6.3.4、删除索引
curl -XDELETE 192.168.10.25:9200/index_test
6.3.5、批量删除索引
for i_name in $(curl -XGET 192.168.10.25:9200/_cat/indices | awk -F' ' '{print $3}' | grep test);
do
curl -XDELETE 192.168.10.25:9200/${i_name};
done
6.3.6、创建索引并且设置切片属性
curl -H 'Content-Type: application/json' -d '{
"settings" : {
"number_of_shards" : "3",
"number_of_replicas" : "1"
}
}' -X PUT 192.168.10.25:9200/index_test
# 注意:在设置切片属性的时候,一定要注意在历史数据中,最好不要存在同名的索引,否则报错
7、功能插件
7.1、插件管理简介
elasticsearch最擅长的场景就是索引的操作,而索引的使用场景在不同的公司非常不同,所以
elasticsearch的索引场景可以基于不同的插件来实现对应的功能,而插件也是ELK非常重要的属性。
elasticsearch提供了两种插件的管理方式:
- 专用的插件管理可以使用命令 elasticsearch-plugin,它可以对默认的插件进行管理;
- 定制的插件管理可以基于离线方式安装插件。
常见插件:
分词插件:analysis-icu、analysis-ik等
管理插件:head、kopf、bigdest等
注意:
随着elasticsearch的版本更新,很多之前可以直接安装的插件,目前无法直接安装了,
需要采取自定义的方式来安装
旧的插件地址:https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/management.html
官方地址:https://www.elastic.co/guide/en/elasticsearch/plugins/current/index.html
7.2、基础命令
7.2.1、在线安装插件方式
elasticsearch-plugin install [plugin_name]/[version]
7.2.2、离线安装插件方式
方法1:elasticsearch-plugin install file:///path/to/plugin.zip
方法2:将下载的插件解压到elasticsearch的plugins目录即可
7.2.3、查看已安装插件
elasticsearch-plugin list
7.2.4、删除插件
elasticsearch-plugin remove [plugin_name]
# 注意:删除插件的时候,推荐先关闭结点,然后再关闭。
7.3、安装插件实战
7.3.1、安装中文语法分析后重启服务
elasticsearch-plugin install analysis-smartcn
elasticsearch-plugin install analysis-icu
systemctl restart elasticsearch.service
7.3.2、查看插件列表
elasticsearch-plugin list
7.3.3、查看插件安装目录
root@es:~# ll /usr/share/elasticsearch/plugins/
drwxr-xr-x 4 root root 4096 Jun 5 15:54 ./
drwxr-xr-x 7 root root 4096 Jun 5 12:41 ../
drwxr-xr-x 2 root root 4096 Jun 5 15:54 analysis-icu/
drwxr-xr-x 2 root root 4096 Jun 5 15:53 analysis-smartcn/
7.3.4、测试中文分词【icu_analyzer】
# curl -X POST 'http://192.168.10.25:9200/_analyze?pretty=true' -H 'content-type: application/json' -d '{"analyzer":"icu_analyzer","text":"中华人民共和国国歌"}'
-----输入结果
{
"tokens" : [
{
"token" : "中华",
"start_offset" : 0,
"end_offset" : 2,
"type" : "<IDEOGRAPHIC>",
"position" : 0
},
{
"token" : "人民",
"start_offset" : 2,
"end_offset" : 4,
"type" : "<IDEOGRAPHIC>",
"position" : 1
},
{
"token" : "共和国",
"start_offset" : 4,
"end_offset" : 7,
"type" : "<IDEOGRAPHIC>",
"position" : 2
},
{
"token" : "国歌",
"start_offset" : 7,
"end_offset" : 9,
"type" : "<IDEOGRAPHIC>",
"position" : 3
}
]
}
7.3.5、测试中文分词【smartcn】
root@es:~# curl -X POST 'http://192.168.10.25:9200/_analyze?pretty=true' -H 'content-type: application/json' -d '{"analyzer":"smartcn","text":"中华人民共和国国歌"}'
-----显示结果
{
"tokens" : [
{
"token" : "中华人民共和国",
"start_offset" : 0,
"end_offset" : 7,
"type" : "word",
"position" : 0
},
{
"token" : "国歌",
"start_offset" : 7,
"end_offset" : 9,
"type" : "word",
"position" : 1
}
]
}
7.4、head插件安装
7.4.1、简介
head插件,在elasticsearch中,应用的还算可以,但是自动2.x之后的版本,就不再支持了,需要我们自己来进行独立的部署。
代码资料:https://github.com/mobz/elasticsearch-head
7.4.2、安装npm和git
apt-get install -y aptitude
aptitude install libssl-dev
apt install npm git -y
7.4.3、安装head插件
mkdir /data/server/elasticsearch/plugins -p
cd /data/server/elasticsearch/plugins
git clone git@gitee.com:githubd/elasticsearch-head.git
cd elasticsearch-head
npm config set registry https://registry.npm.taobao.org
npm install --save core-js
npm install --force
# 配置软件的访问地址
# vim /data/server/elasticsearch/plugins/elasticsearch-head/Gruntfile.js
connect: {
server: {
options: {
hostname: '*', # 增加这行
port: 9100,
base: '.',
keepalive: true
}
}
}
});
启动服务
npm run start >>/dev/null 2>&1 &
7.4.4、检查端口
root@es:~# ss -tunlp | grep grunt
tcp LISTEN 0 511 *:9100 *:* users:(("grunt",pid=10082,fd=18))
7.4.5、访问9100页面

7.4.6、属性解析
一定要先保证连接按钮左侧的es地址是正确的,然后再来点击"连接"* 代表索引es的主节点,黑色加粗的方框0表示,索引的主副本。
黄色代表有从分片丢失,但是没有主分片数据丢失,即当前没有数据丢失。
红色代表主分配丢失,即有数据丢失;绿色代表所有主分片和从分片的数据正常
7.4.7、测试插入数据
{
"username": "ygbh",
"age": 18
}
# 返回结果
{
"_index": "username",
"_type": "ygbh",
"_id": "D3ABi4gBr53uPqiLy0Eh",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
# 属性解析:
_index:创建了一个索引
index _type:创建了一个类型text1
total:分片2个
Successful:成功2个
Failed:失败0个
Created:状态成功
# 注意: 我们可以在这里进行各种各样的编辑,"POST"的下拉框可以选择多种http操作属性,

7.4.8、创建systemd服务脚本
cat << 'CAT_END' > /lib/systemd/system/es-head.service
[Unit]
Description= elasticsearch head server project
[Service]
User=root
Type=simple
ExecStart=/bin/bash -c "cd /data/server/elasticsearch/plugins/elasticsearch-head && /usr/bin/npm run start >>/dev/null 2>&1"
ExecStop=/bin/kill -s SIGINT $MAINPID
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
CAT_END
# 启动服务
systemctl daemon-reload
systemctl start es-head.service
systemctl status es-head.service