Elasticsearch集群安装
1.环境准备
OS: CentOS Linux release 7.9.2009 (Core)
机器:
IP | node | cpu | 内存 | 存储 |
---|---|---|---|---|
10.28.19.110 | node1 | 16 核 | 16 G | 200 G |
10.28.19.111 | node2 | 16 核 | 16 G | 200 G |
10.28.19.112 | node3 | 16 核 | 16 G | 200 G |
安装版本:7.15.2
Elasticsearch:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
Kibana: https://www.elastic.co/cn/downloads/past-releases#kibana
提前下载好elasticsearch-7.15.2-linux-x86_64.tar.gz
、kibana-7.15.2-linux-x86_64.tar.gz
,上传至/opt目录下。
Java环境:
ES依赖于java环境,请确保机器上已有安装java环境,ES7.x版本对应的是JDK1.8,版本不要弄错。
未安装可自行下载java安装包,进行安装。
java国内下载镜像站:http://www.codebaoku.com/jdk/jdk-oracle-jdk1-8.html
rpm -ivh jdk-8u351-linux-x64.rpm
安装必要组件:
yum install -y wget unzip lrzsz bzip2 git lsof
上面组件必须要安装,为后面的es安装做准备。
2.系统优化
请注意,所有es机器节点
都需要进行系统优化操作。
优化inux资源限制配置文件limits.conf
vim /etc/security/limits.conf
添加以下内容:
# 进程可以最大打开的文件数
* soft nofile 655350
* hard nofile 655350
# 进程可以创建的线程数
* soft nproc 102400
* hard nproc 409600
# 允许进程锁定内存
* soft memlock unlimited
* hard memlock unlimited
- 第一列表示用户和组(@开头)。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值;
- hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值;
- core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了。
修改Linux系统配置文件sysctl.conf
vim /etc/sysctl.conf
添加以下内容:
vm.max_map_count = 262145
fs.file-max=655360
执行下面命令,立即生效:
sysctl -p
-
max_map_count: 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
-
fs.file-max: 系统中可以同时打开的文件数目
开启端口
这里提前开启端口,为了方便后续的测试验证使用
5601为kibana端口, 9100为head端口, 9200为服务端口,9300为内部节点之间沟通端口
下面命令在所有ES机器上执行:
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
firewall-cmd --reload
3.安装ES节点
3.1安装
规划ES安装目录是/opt
规划ES数据及日志存储目录为/data
elasticsearch-7.15.2-linux-x86_64.tar.gz
安装包提前放置在/opt
目录下
在所有机器
上执行如下命令,解压并重命名
cd /opt
tar -xf elasticsearch-7.15.2-linux-x86_64.tar.gz
mv elasticsearch-7.15.2 elasticsearch
mkdir -p /data/es-data
mkdir -p /data/es-logs
- /opt/elasticsearch 安装目录
- /data/es-data 数据存储目录
- /data/es-logs 日志存储目录
3.2创建es用户
从5.0开始 elasticsearch 提高了安全级别,禁止采用root帐号启动, 所以需要添加一个用户用来启动 elasticsearch
创建es用户,并赋予权限:
useradd es
chown es:es -R /opt/elasticsearch
chown es:es -R /data/es-data
chown es:es -R /data/es-logs
3.3修改配置文件
分别修改3台机器配置文件:
调整内存大小
vi /opt/elasticsearch/config/jvm.options
一般Xmx不建议超过物理服务器内存的一半,以16G内存为例,改为如下:
-Xms12g
-Xmx12g
修改 elasticsearch.yaml
vim /opt/elasticsearch/config/elasticsearch.yml
配置文件是yaml语法,注意key与value之间要有空格
# 解决跨域问题
http.cors.enabled: true
# 解决跨域问题
http.cors.allow-origin: "*"
# es集群名称,默认elasticsearch,es会自动发现在同一网段下es,如果在同一网段下有多个集群,可用这个属性来区分不同的集群
cluster.name: scsales
# 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中
node.name: node1
# 是不是有资格竞选主节点
node.master: true
# 是否存储数据
node.data: true
# 最大集群节点数
node.max_local_storage_nodes: 3
# 网关地址
network.host: 0.0.0.0
# 设置对外服务的http端口,默认为9200
http.port: 9200
# 内部节点之间沟通端口
transport.tcp.port: 9300
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["10.28.19.110","10.28.19.111","10.28.19.112"]
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1", "node2","node3"]
# 数据存储路径
path.data: /data/es-data
# 日志存储路径
path.logs: /data/es-logs
# 7.13以上版本,禁用安全选项
xpack.security.enabled: false
3台es节点机器elasticsearch.yml
配置文件的区别:
就只有node.name: node1
参数不一样
修改10.28.19.111
上配置文件,将 node.name: node1
改为 node.name: node2
sed -i 's#node.name: node1#node.name: node2#g' /opt/elasticsearch/config/elasticsearch.yml
修改10.28.19.112
上配置文件,将 node.name: node1
改为 node.name: node3
sed -i 's#node.name: node1#node.name: node3#g' /opt/elasticsearch/config/elasticsearch.yml
3.4安装插件
这里安装下ik中文分词器
插件、拼英分词器
插件
ik中文分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases
拼英分词器:https://github.com/medcl/elasticsearch-analysis-pinyin/releases
注意,下载插件时,请与安装的ES版本保持一至 ,当前ES安装版本为7.15.2,那么下载的插件版本也要为7.15.2。
cd /opt
wget https://ghproxy.com/https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.2/elasticsearch-analysis-ik-7.15.2.zip
wget https://ghproxy.com/https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.15.2/elasticsearch-analysis-pinyin-7.15.2.zip
因为无法访问github,插件下载是借道github加速网站。
解压放入ES插件目录下:
unzip -d /opt/elasticsearch/plugins/ik elasticsearch-analysis-ik-7.15.2.zip
unzip -d /opt/elasticsearch/plugins/pinyin elasticsearch-analysis-pinyin-7.15.2.zip
再次授权安装目录:
chown -R es:es /opt/elasticsearch
3.5创建ES服务脚本
在所有ES机器节点上创建服务脚本文件:
创建ES服务脚本文件:
tee /usr/lib/systemd/system/elasticsearch.service << \EOF
# 主要用于配置整个服务的详情信息以及服务依赖,用于快速识别该服务的相关情况以及依赖项目
[Unit]
# 描述这个 Unit 文件的信息
Description=elasticsearch7.15.2
# 文档地址
Documentation=https://www.elastic.co
# 描述服务类别,表示本服务需要在network服务启动后在启动
After=network.target
# 主要用于配置整个服务生命周期的管理行为
[Service]
# 设置服务运行的用户
User=es
# 服务将以fork分叉的方式启动,此时父进程将会退出,子进程将成为主进程。
Type=simple
# 服务启动命令,命令需要绝对路径
ExecStart=/opt/elasticsearch/bin/elasticsearch
# 表示给服务分配独立的临时空间
PrivateTmp=true
# 设置内核可以同时打开的文件描述符的最大值.单位:n(相当于ulimit -n),infinity代表当前用户达到的上限
LimitNOFILE=65535
# 设置进程数目:用户最多可启动的进程数目(相当于ulimit -u),infinity代表当前用户达到的上限
LimitNPROC=4096
# 不自动重启
Restart=no
# 用于配置服务安装级别,当我们设置服务在Linux的那种级别下启动或开机自启动时会加载该部分(典型的当chkconfig nginx on或者systemctl enable|disable nginx.service时会读取该部分的配置)
[Install]
# 多用户,表示多用户命令行状态,这个设置很重要
WantedBy=multi-user.target
EOF
重新加载服务、设置开机启动、启动服务:
systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch
ES停止、重启命令:
systemctl stop elasticsearch
systemctl restart elasticsearch
测试访问ES:
4.安装Kibana
4.1安装Kibana
Kibana安装单节点即可,这里规划安装在10.28.19.110
机器上
kibana-7.15.2-linux-x86_64.tar.gz
安装包提前放置在/opt目录下
cd /opt
tar -xf kibana-7.15.2-linux-x86_64.tar.gz
mv kibana-7.15.2 elasticsearch-kibana
修改kibana配置文件
vim /opt/elasticsearch-kibana/config/kibana.yml
最下面添加以下内容,配置文件是yaml语法,注意key与value之间要有空格
# 对外访问服务端口
server.port: 5601
# 默认值:“localhost”此设置指定后端服务器的主机
server.host: "0.0.0.0"
# 服务名称,默认值:“your-hostname”用于标识此Kibana实例的可读显示名称
server.name: "kibana"
# kibana中文界面显示
i18n.locale: "zh-CN"
# Elasticsearch实例
elasticsearch.hosts:
- http://10.28.19.110:9200
- http://10.28.19.111:9200
- http://10.28.19.112:9200
# 指定Kibana进程ID文件的路径
pid.file: /opt/elasticsearch-kibana/pid
同样,这里kibana也授权给es来启动
授权给es用户组
chown es:es -R /opt/elasticsearch-kibana
4.2创建Kibana服务脚本
创建Kibana服务脚本文件:
tee /usr/lib/systemd/system/kibana.service << \EOF
# 主要用于配置整个服务的详情信息以及服务依赖,用于快速识别该服务的相关情况以及依赖项目
[Unit]
Description=kibana7.15.2
# 描述服务类别,表示本服务需要在network服务启动后在启动
After=network.target
# 主要用于配置整个服务生命周期的管理行为
[Service]
# 设置服务运行的用户
User=es
# 服务将以fork分叉的方式启动,此时父进程将会退出,子进程将成为主进程。
Type=simple
# 安装目录
WorkingDirectory=/opt/elasticsearch-kibana
# 服务启动命令,命令需要绝对路径
ExecStart=/opt/elasticsearch-kibana/bin/kibana
ExecStop=/usr/bin/kill -15 $MAINPID
ExecReload=/usr/bin/kill -HUP $MAINPID
# 表示给服务分配独立的临时空间
PrivateTmp=true
# 限制进程使用的文件描述符数量,等同ulimit -n
LimitNOFILE=65536
# 限制进程的数量,等同于ulimit -u
LimitNPROC=2048
# 等待服务停止的时间(以秒为单位)
TimeoutStopSec=0
# 设置杀死进程的第一步使用什么信号,所有可用的信号详见 signal(7) 手册。默认值为SIGTERM信号。
# 注意,systemd会无条件的紧跟此信号之后再发送一个SIGCONT信号,以确保干净的杀死已挂起(suspended)的进程。
KillSignal=SIGTERM
# 设置在单元停止时,杀死进程的方法。
# 取值范围如:control-group, process, mixed, none 默认值是 control-group 表示杀死该单元的 cgroup 内的所有进程(对于 service 单元,还要先执行 ExecStop= 动作)
KillMode=process
# 是否在超过 TimeoutStopSec= 时间后,使用 SIGKILL 或 FinalKillSignal= 信号杀死依然残存的进程。默认值为"yes"
SendSIGKILL=no
# 配置项 SuccessExitStatus=143 是为了抑制stop时报错 Main process exited, code=exited, status=143/n/a
# 这是因为 java 程序在响应 SIGTERM 时不会并不会发回预期的退出状态
# 所以需要将退出代码 SuccessExitStatus=143 添加到 systemd 服务文件作为成功退出状态来抑制这种报错
SuccessExitStatus=143
# 用于配置服务安装级别,当我们设置服务在Linux的那种级别下启动或开机自启动时会加载该部分(典型的当chkconfig nginx on或者systemctl enable|disable nginx.service时会读取该部分的配置)
[Install]
# 多用户,表示多用户命令行状态,这个设置很重要
WantedBy=multi-user.target
EOF
重新加载服务、设置开机启动、启动服务:
systemctl daemon-reload
systemctl enable kibana
systemctl start kibana
Kibana停止、重启命令:
systemctl stop kibana
systemctl restart kibana
测试访问Kibana:http://10.28.19.110:5601
5.安装head图形化管理工具
elasticsearch-head是一款专门针对于elasticsearch的客户端工具,可实现es web图形化管理。
head只需要安装单节点即可,规划安装在10.28.19.110
机器上。
5.1安装head
head是一个基于node.js的前端工程,需借助nodejs编译
指定node安装版本:
curl --silent --location https://rpm.nodesource.com/setup_16.x | bash -v
安装node:
yum install -y nodejs
下载head源码:
(github访问正常情况下,访问官网:git clone git://github.com/mobz/elasticsearch-head.git,这里无法访问github,所以从github加速站下载)
cd /opt
git clone https://ghproxy.com/https://github.com/mobz/elasticsearch-head
elasticsearch-head/_site/app.js文件,修改ES地址,大概在4388行
sed -i 's#http://localhost:9200#http://10.28.19.110:9200#g' /opt/elasticsearch-head/_site/app.js
http://localhost:9200
改为 http://10.28.19.110:9200
编译head,这里采用的是国内镜像源:
cd /opt/elasticsearch-head
npm install -g cnpm --registry=https://registry.npmmirror.com
npm install grunt --save-dev
授权给es
chown es:es -R /opt/elasticsearch-head
5.2创建head服务脚本
创建服务脚本
tee /usr/lib/systemd/system/elasticsearch-head.service << \EOF
# 主要用于配置整个服务的详情信息以及服务依赖,用于快速识别该服务的相关情况以及依赖项目
[Unit]
Description=elasticsearch-head
# 描述服务类别,表示本服务需要在network服务启动后在启动
After=network.target
# 主要用于配置整个服务生命周期的管理行为
[Service]
# 设置服务运行的用户
User=es
# 安装目录
WorkingDirectory=/opt/elasticsearch-head
# 启动命令
ExecStart=/usr/bin/npm start
# 用于配置服务安装级别,当我们设置服务在Linux的那种级别下启动或开机自启动时会加载该部分(典型的当chkconfig nginx on或者systemctl enable|disable nginx.service时会读取该部分的配置)
[Install]
# 多用户,表示多用户命令行状态,这个设置很重要
WantedBy=multi-user.target
EOF
重新加载服务、设置开机启动、启动服务:
systemctl daemon-reload
systemctl enable elasticsearch-head
systemctl start elasticsearch-head
elasticsearch-head停止、重启命令:
systemctl stop elasticsearch-head
systemctl restart elasticsearch-head
测试访问head:
6.引用Reference
CentOS8搭建nfs服务
Kubernetes 1.25.4版本安装
kubeasz安装kubernetes1.25.5
k8s一键安装redis单机版
k8s一键安装mysql8单机版
k8s部署springboot应用
Docker安装及学习
Docker制作springboot运行应用镜像
Docker制作Java8环境镜像
Docker安装Mysql5.7.31
Docker安装Mysql8.1.0
Elasticsearch单机版本安装
Elasticsearch集群安装
ELK安装
Docker安装ELK
zookeeper集群安装
Nginx日志切割
RabbitMQ集群安装
springboot集成prometheus+grafana
windows11安装android应用