一、单点部署¶
1、下载ES软件包
地址链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-linux-x86_64.tar.gz

2、在elk121节点上创建运行ES服务的用户
| [root@elk121 ~]# useradd -u 2023 es |
|---|
3、在elk121节点上创建ElasticSearch的工作目录
[root@elk121 ~]# install -d /es/{data,logs,softwares}/es7 -o es -g es
[root@elk121 ~]# chown -R es:es /es/
4、在elk121节点上解压软件包
| [root@elk121 ~]# tar xf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /es/softwares/es7/ |
|---|
5、在elk121节点上修改配置文件
复制第34行内容修改数据路径
[root@elk121 ~]# vim +34 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
path.data: /es/data/es7
复制第38行内容修改日志路径
[root@elk121 ~]# vim +38 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
path.logs: /es/logs/es7
复制第56行内容修改ES服务监听对外暴露服务的地址为192.168.1.121,具体内容如下
[root@elk121 ~]# vim +56 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
network.host: 192.168.1.121
复制第71行内容指定ES集群的节点IP,具体内容如下
[root@elk121 ~]# vim +71 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
discovery.seed_hosts: ["192.168.1.121"]
复制第76行内容指定参与master选举的节点
[root@elk121 ~]# vim +76 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
cluster.initial_master_nodes: ["192.168.1.121"]
最后修改后的配置文件如下:
[root@elk121 ~]# egrep -v "^#|^$" /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
path.data: /es/data/es7
path.logs: /es/logs/es7
network.host: 192.168.1.121
discovery.seed_hosts: ["192.168.1.121"]
cluster.initial_master_nodes: ["192.168.1.121"]
6、在elk121节点上针对ES基础调优
修改文件打开数量上线,修改后需要断开会话
[root@elk121 ~]# vim /etc/security/limits.d/es7.conf
* soft nofile 65535
* hard nofile 131070
* hard nproc 8192
调大内核虚拟内存映射值
[root@elk121 ~]# vim /etc/sysctl.d/es.conf
vm.max_map_count=524288
#生效
[root@elk121 ~]# sysctl -f /etc/sysctl.d/es.conf
vm.max_map_count = 524288
#查看
[root@elk121 ~]# sysctl -q vm.max_map_count
vm.max_map_count = 524288
7、在elk121节点上后台启动es服务
| [root@elk121 ~]# su es -c '/es/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch -d' |
|---|
8、在elk121节点上验证服务是否正常
[root@elk121 ~]# curl 192.168.1.121:9200
{
"name" : "elk121",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "LMGHvSRHSFGbmG9oKdIkAA",
"version" : {
"number" : "7.17.5",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "8d61b4f7ddf931f219e3745f295ed2bbc50c8e84",
"build_date" : "2022-06-23T21:57:28.736740635Z",
"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"
}
二、集群部署¶
1、在elk121节点上配置集群免密登录及同步脚本
在elk121节点上修改主机列表
[root@elk121 ~]# cat >> /etc/hosts <<'EOF'
192.168.1.121 elk121
192.168.1.122 elk122
192.168.1.123 elk123
EOF
在elk121节点上生成密钥对
| [root@elk121 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q |
|---|
在elk121节点上配置所有集群节点的免密登录
| [root@elk121 ~]# for ((host_id=121;host_id\<=123;host_id++));do ssh-copy-id elk\${host_id} ;done |
|---|
在elk121节点上链接测试
[root@elk121 ~]# ssh elk122
[root@elk121 ~]# ssh elk123
所有节点安装rsync数据同步工具
[root@elk121 ~]# yum -y install rsync
[root@elk122 ~]# yum -y install rsync
[root@elk123 ~]# yum -y install rsync
在elk121节点上编写同步脚本
[root@elk121 ~]# cat > /usr/local/sbin/data_rsync.sh <<'EOF'
#!/bin/bash
# Auther: zq
if [ $# -ne 1 ];then
echo "Usage: $0 /path/to/file(绝对路径)"
exit
fi
# 判断文件是否存在
if [ ! -e $1 ];then
echo "[ $1 ] dir or file not find!"
exit
fi
# 获取父路径
fullpath=`dirname $1`
# 获取子路径
basename=`basename $1`
# 进入到父路径
cd $fullpath
for ((host_id=122;host_id<=123;host_id++))
do
# 使得终端输出变为绿色
tput setaf 2
echo ===== rsyncing elk${host_id}: $basename =====
# 使得终端恢复原来的颜色
tput setaf 7
# 将数据同步到其他两个节点
rsync -apz $basename `whoami`@elk${host_id}:$fullpath
if [ $? -eq 0 ];then
echo "命令执行成功!"
fi
done
EOF
在elk121节点上给脚本授权
| [root@elk121 ~]# chmod +x /usr/local/sbin/data_rsync.sh |
|---|
2、下载ES软件包
地址链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-linux-x86_64.tar.gz

3、所有节点上创建运行ES服务的用户
[root@elk121 ~]# useradd -u 2023 es
[root@elk122 ~]# useradd -u 2023 es
[root@elk123 ~]# useradd -u 2023 es
4、在elk121节点上创建ElasticSearch的工作目录
[root@elk121 ~]# install -d /es/{data,logs,softwares}/es7 -o es -g es
[root@elk121 ~]# chown -R es:es /es/
5、在elk121节点上解压软件包
| [root@elk121 ~]# tar xf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /es/softwares/es7/ |
|---|
6、在elk121节点上修改配置文件
复制第17行内容修改集群名字
[root@elk121 ~]# vim +17 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
cluster.name: es
复制第34行内容修改数据路径
[root@elk121 ~]# vim +34 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
path.data: /es/data/es7
复制第38行内容修改日志路径
[root@elk121 ~]# vim +38 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
path.logs: /es/logs/es7
复制第56行内容修改ES服务监听对外暴露服务的地址为192.168.1.121,具体内容如下
[root@elk121 ~]# vim +56 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
network.host: 192.168.1.121
复制第71行内容指定ES集群的节点IP,具体内容如下
[root@elk121 ~]# vim +71 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
discovery.seed_hosts: ["elk121","elk122","elk123"]
复制第76行内容指定参与master选举的节点
[root@elk121 ~]# vim +76 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
cluster.initial_master_nodes: ["elk121","elk122","elk123"]
最后修改后的配置文件如下:
[root@elk121 ~]# egrep -v "^#|^$" /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
cluster.name: es
path.data: /es/data/es7
path.logs: /es/logs/es7
network.host: 192.168.1.121
discovery.seed_hosts: ["elk121","elk122","elk123"]
cluster.initial_master_nodes: ["elk121","elk122","elk123"]
7、在elk121节点上同步程序目录
[root@elk121 ~]# data_rsync.sh /es
===== rsyncing elk122: es =====
命令执行成功!
===== rsyncing elk123: es =====
命令执行成功!
8、在elk122节点和elk123节点上ES服务监听对外暴露服务的地址为各自IP
复制第56行内容修改ES服务监听对外暴露服务的地址为192.168.1.122,具体内容如下
[root@elk122 ~]# vim +56 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
network.host: 192.168.1.122
[root@elk123 ~]# vim +56 /es/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml
network.host: 192.168.1.123
9、在elk121节点上针对ES基础调优
修改文件打开数量上线,修改后需要断开会话
[root@elk121 ~]# vim /etc/security/limits.d/es7.conf
* soft nofile 65535
* hard nofile 131070
* hard nproc 8192
#断开重连,显示当前 shell 会话中的文件描述符的硬限制
[root@elk121 ~]# ulimit -Hn
131070
#断开重连,显示当前 shell 会话中的文件描述符的软限制
[root@elk121 ~]# ulimit -Sn
65535
调大内核虚拟内存映射值
[root@elk121 ~]# vim /etc/sysctl.d/es.conf
vm.max_map_count=524288
#生效
[root@elk121 ~]# sysctl -f /etc/sysctl.d/es.conf
vm.max_map_count = 524288
#查看
[root@elk121 ~]# sysctl -q vm.max_map_count
vm.max_map_count = 524288
11、在elk121节点上同步调优文件
[root@elk121 ~]# data_rsync.sh /etc/sysctl.d/es.conf
===== rsyncing elk122: es.conf =====
命令执行成功!
===== rsyncing elk123: es.conf =====
命令执行成功!
[root@elk121 ~]# data_rsync.sh /etc/security/limits.d/es7.conf
===== rsyncing elk122: es7.conf =====
命令执行成功!
===== rsyncing elk123: es7.conf =====
命令执行成功!
[root@elk121 ~]# data_rsync.sh /etc/hosts
===== rsyncing elk122: hosts =====
命令执行成功!
===== rsyncing elk123: hosts =====
命令执行成功!
12、所有节点启动es服务
(1) 所有节点先断开连接让文件打开数量上限生效。
(2) 内核参数生效
[root@elk121 ~]# sysctl -f /etc/sysctl.d/es.conf
vm.max_map_count = 524288
[root@elk122 ~]# sysctl -f /etc/sysctl.d/es.conf
vm.max_map_count = 524288
[root@elk123 ~]# sysctl -f /etc/sysctl.d/es.conf
vm.max_map_count = 524288
(3) 所有节点配置文件所属者为es
[root@elk121 ~]# chown -R es:es /es/
[root@elk122 ~]# chown -R es:es /es/
[root@elk123 ~]# chown -R es:es /es/
(4) 所有节点后台启动es服务
[root@elk121 ~]# su es -c '/es/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch -d'
[root@elk122 ~]# su es -c '/es/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch -d'
[root@elk123 ~]# su es -c '/es/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch -d'
13、在elk121节点上验证服务是否正常
[root@elk121 ~]# curl 192.168.1.121:9200/_cat/nodes
192.168.1.122 14 68 0 1.96 1.09 0.43 cdfhilmrstw * elk122
192.168.1.121 5 71 0 2.10 1.18 0.49 cdfhilmrstw - elk121
192.168.1.123 6 67 0 2.49 1.23 0.47 cdfhilmrstw - elk123
说明:*代表该节点为主节点。主节点挂掉后会飘到其他节点上面。之前的主节点恢复后不存在抢占机制。另外,也存在”半数存活”规则(防止脑裂),这意味着最多只能挂一台。
补充:
若集群UUID出现"_na_"状态时,做如下动作,所有节点操作:
pkill java
rm -rf /oldboyedu/data/es7/* /oldboyedu/logs/es7/* /tmp/*
三、systemctl管理es服务¶
1、在elk121节点上停止ES服务
| [root@elk121 ~]# pkill java |
|---|
2、在elk121节点上编写ES启动脚本
[root@elk121 ~]# cat > /usr/lib/systemd/system/es7.service <<EOF
[Unit]
Description=es7
After=network.target
[Service]
Type=simple
ExecStart=/es/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch
User=es
LimitNOFILE=131070
[Install]
WantedBy=multi-user.target
EOF
3、在elk121节点上加载脚本
| [root@elk121 ~]# systemctl daemon-reload |
|---|
4、在elk121节点上设置开机自启动
| [root@elk121 ~]# systemctl enable --now es7 |
|---|
5、在elk121节点上查看服务是否正常运行
在elk121节点上查看服务状态
| [root@elk121 ~]# systemctl status es7 |
|---|
在elk121节点上查看端口
| [root@elk121 ~]# ss -ntl | grep -E '9200|9300' |
|---|
在elk121节点上查看es节点状态
[root@elk121 ~]# curl 192.168.1.121:9200
{
"name" : "elk121",
"cluster_name" : "es",
"cluster_uuid" : "e__HUSjQSd6i5YcxTRYplg",
"version" : {
"number" : "7.17.5",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "8d61b4f7ddf931f219e3745f295ed2bbc50c8e84",
"build_date" : "2022-06-23T21:57:28.736740635Z",
"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"
}
说明:当只完成elk121节点配置后,cluster_uuid仍会显示na状态。等三台机器全部配置完成后,cluster_uuid才会正常显示
6、在elk121节点上同步/usr/lib/systemd/system/es7.service文件
[root@elk121 ~]# data_rsync.sh /usr/lib/systemd/system/es7.service
===== rsyncing elk122: es7.service =====
命令执行成功!
===== rsyncing elk123: es7.service =====
命令执行成功!
7、在elk122节点和elk123节点上使用脚本管理
[root@elk122 ~]# systemctl daemon-reload
[root@elk122 ~]# systemctl enable --now es7
[root@elk123 ~]# systemctl daemon-reload
[root@elk123 ~]# systemctl enable --now es7
8、在elk121节点上查看es集群状态
[root@elk121 ~]# curl 192.168.1.121:9200/_cat/nodes
192.168.1.122 13 63 0 0.01 0.16 0.11 cdfhilmrstw * elk122
192.168.1.123 8 63 0 0.05 0.18 0.12 cdfhilmrstw - elk123
192.168.1.121 10 63 0 0.00 0.11 0.12 cdfhilmrstw - elk121
四、OracleJDK管理es服务¶
1、下载JDK环境
地址链接:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

2、在elk121节点上解压JDK软件包
| [root@elk121 ~]# tar xf jdk-8u291-linux-x64.tar.gz -C /es/softwares/ |
|---|
3、在elk121节点上配置系统环境变量
编写脚本
[root@elk121 ~]# vim /etc/profile.d/jdk.sh
#!/bin/bash
export JAVA_HOME=/es/softwares/jdk1.8.0_291
export PATH=$PATH:$JAVA_HOME/bin
执行脚本并查看效果
[root@elk121 ~]# . /etc/profile.d/jdk.sh
[root@elk121 ~]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@elk121 ~]# jps
2452 Elasticsearch
2906 Jps
4、在elk121节点上修改启动脚本
[root@elk121 ~]# cat > /usr/lib/systemd/system/es7.service <<EOF
[Unit]
Description=es7
After=network.target
[Service]
Type=simple
Environment=JAVA_HOME=/es/softwares/jdk1.8.0_291
ExecStart=/es/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch
User=es
LimitNOFILE=131070
LimitNPROC=8192
[Install]
WantedBy=multi-user.target
EOF
5、在elk121节点上重启es服务
[root@elk121 ~]# systemctl daemon-reload
[root@elk121 ~]# systemctl restart es7
6、在elk121节点上查看服务是否正常
[root@elk121 ~]# curl 192.168.1.121:9200/_cat/nodes
192.168.1.121 16 32 7 0.13 0.04 0.05 cdfhilmrstw - elk121
192.168.1.122 11 63 0 0.01 0.02 0.05 cdfhilmrstw * elk122
192.168.1.123 4 63 0 0.00 0.01 0.05 cdfhilmrstw - elk123
7、在elk121节点上同步配置到其他节点
[root@elk121 ~]# data_rsync.sh /etc/profile.d/jdk.sh
[root@elk121 ~]# data_rsync.sh /usr/lib/systemd/system/es7.service
[root@elk121 ~]# data_rsync.sh /es/softwares/jdk1.8.0_291
8、在elk122节点和elk123节点上重启服务
[root@elk122 ~]# . /etc/profile.d/jdk.sh
[root@elk122 ~]# systemctl daemon-reload && systemctl restart es7
[root@elk123 ~]# . /etc/profile.d/jdk.sh
[root@elk123 ~]# systemctl daemon-reload && systemctl restart es7
9、再次在elk121节点上查看服务是否正常
[root@elk121 ~]# curl 192.168.1.121:9200/_cat/nodes
192.168.1.121 28 33 1 0.02 0.05 0.05 cdfhilmrstw - elk121
192.168.1.122 11 30 2 0.06 0.04 0.05 cdfhilmrstw * elk122
192.168.1.123 11 30 3 0.24 0.09 0.07 cdfhilmrstw - elk123
五、修改ES环境的堆(heap)内存大小¶
1、在elk121节点上修改配置文件
[root@elk121 ~]# vim +33 /es/softwares/es7/elasticsearch-7.17.5/config/jvm.options
…
…
-Xms256m
-Xmx256m
2、在elk121节点上重启服务并验证堆内存大小,若不配置,默认1GB
[root@elk121 ~]# systemctl restart es7
[root@elk121 ~]# jmap -heap `jps | awk '/Elasticsearch/{print $1}'` | grep MaxHeapSize
MaxHeapSize = 268435456 (256.0MB)
3、在elk121节点上同步环境到其他节点
[root@elk121 ~]# data_rsync.sh /es/softwares/es7/elasticsearch-7.17.5/config/jvm.options
===== rsyncing elk122: jvm.options =====
命令执行成功!
===== rsyncing elk123: jvm.options =====
命令执行成功!
4、在elk122节点和elk123节点上重启服务
[root@elk122 ~]# systemctl restart es7
[root@elk122 ~]# jmap -heap `jps | awk '/Elasticsearch/{print $1}'` | grep MaxHeapSize
MaxHeapSize = 268435456 (256.0MB)
[root@elk123 ~]# systemctl restart es7
[root@elk123 ~]# jmap -heap `jps | awk '/Elasticsearch/{print $1}'` | grep MaxHeapSize
MaxHeapSize = 268435456 (256.0MB)