linux centos7.9 安装 ES 和 kibana 集群
logstash 安装完没派上用场,不过启动之后就能用,我们公司环境没要求安装logstash。
话不多说,开始入坑。
系统 | IP | 主机名 | 所属服务 |
---|---|---|---|
centos7.9 | 192.168.232.68 | elasticsearch | elasticsearch-master logstash kibana |
centos7.9 | 192.168.232.69 | elasticsearch01 | elasticsearch-node |
centos7.9 | 192.168.232.70 | elasticsearch02 | elasticsearch-node |
一、部署
1.下载服务安装包
jdk (三台服务器都需要)
wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz
logstash (192.168.232.68需要)
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.5.2-linux-x86_64.tar.gz
Elasticsearch (三台服务器都需要)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.2-linux-x86_64.tar.gz
中文ik分词器 (三台服务器都需要)
gitlab官网:https://github.com/medcl/elasticsearch-analysis-ik
登录官网自行下载
elasticsearch-head(192.168.232.68需要)
wget https://cdn.npmmirror.com/binaries/node/v14.15.0/node-v14.15.0-linux-x64.tar.xz
kibana (192.168.232.68需要)
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.5.2-linux-x86_64.tar.gz
Metricbeat组件 (192.168.232.68需要)
官网:https://www.elastic.co/cn/downloads/past-releases#metricbeat
下载的组件需要和 elasticsearch 版本相同
我下载的是tar包,也可以是rpm包
wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.5.2-linux-x86_64.tar.gz
以上就是所需要的安装包
开始解压部署
部署Elasticsearch (以下操作3台服务器都做)
yum -y install wget git net-tools unzip lrzsz vim
操作系统优化
1 设置打开的文件句柄数和线程数
vim /etc/security/limits.conf
#添加
# soft:软限制;hard:硬限制
# nproc:单个用户可打开的进程最大数
# nofile:单个进程打开文件最大数
# as:地址空间限制(unlimited:无限)
# fsize:最大文件大小
# memlock:最大锁定内存地址空间
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
* - as unlimited
* - fsize unlimited
* - memlock unlimited
2 关闭 swap 交换空间
swapoff -a && sed -i '/swap/s/^.*$/#&/' /etc/fstab
3 设置虚拟内存大小和 TCP 超时重传次数
vim /etc/sysctl.conf
#添加
vm.max_map_count=262144
net.ipv4.tcp_retries2=5
#默认情况下 TCP keepalive 时间为 60 秒,超时重传 15 次。
sysctl -p
## vim /etc/profile
export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
4.配置主机名解析
cat << "EOF" >> /etc/hosts
192.168.232.68 elasticsearch
192.168.232.69 elasticsearch01
192.168.232.70 elasticsearch02
EOF
开始安装 Elasticsearch 只在192.168.232.68操作
1.解压 Elasticsearch和jdk
mkdir /home/opt/
tar -xvf elasticsearch-8.5.2-linux-x86_64.tar.gz -C /home/opt
tar -xf jdk-18_linux-x64_bin.tar.gz -C /home/opt/
2.配置java
ln -s /home/opt/jdk-18.0.2/bin/java /usr/bin/java
3.配置环境变量
vim /etc/profile
LS_JAVA_HOME=/home/opt/jdk1.8.0_231
JRE_HOME=/home/opt/jdk1.8.0_231
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZK_HOME/bin:$PATH:$KAFKA_HOME/bin:$FLUME_HOME/bin:$PATH
CLASSPATH=.:$LS_JAVA_HOME/lib/dt.jar:$LS_JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$KAFKA_HOME/bin:$FLUME_HOME/bin:$PATH
export LS_JAVA_HOME JRE_HOME FLUME_HOME FLUME_CONF_DIR ZK_HOME KAFKA_HOME PATH CLASSPATH
保存退出
刷新环境变量
source /etc/profile
4.创建 esuser 用户、data目录
useradd -u 9200 esuser
mkdir -p /data/elasticsearch/{data,logs,temp}
chown -R esuser:esuser /home/opt/elasticsearch-8.5.2/ /data/elasticsearch/
5.修改配置
vim /home/opt/elasticsearch-8.5.2/bin/elasticsearch-env
找到 if [ ! -z "$JAVA_OPTS" ] 的行注释掉
意思是不使用ES自带的JDK 使用本地安装的。
8.0以前的版本这几行是在39行左右
8.5以后的版本是在65行左右 如图:
JVM 优化
vim /home/opt/elasticsearch-8.5.2/config/jvm.options
根据需求修改
-Xms10g
-Xmx10g
#-Xms 和 -Xmx 大小最好相同。
#-Xmx 不要超过物理内存的 50%.
开始修改配置文件
vim /home/opt/elasticsearch-8.5.2/config/elasticsearch.yml
cluster.name: es-devops #集群名称
node.name: elasticsearch #节点名称
#### - - ---- - - - - 注意 注意 注意 这里角色分配 - - - -- - - - ###
########----------这些角色只需要在kibana安装节点配置 ,且需要使用堆栈监测功能--------#############
node.roles: [master,data,ingest, ml, transform, remote_cluster_client]
########----------如果使用堆栈功能,需要把安全认证关闭------------------#############
######## ------- 正常情况下配置两个角色足够 -----------#########
node.roles: [master,data] # 注意至少有两个具有选举master资格的节点
path.data: /data/elasticsearch/data # 数据存储位置
path.logs: /data/elasticsearch/logs #日志存储位置
bootstrap.memory_lock: false
network.host: 0.0.0.0 #允许连接IP
# 允许跨域
http.port: 9200 # 网页访问端口
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "*"
cluster.initial_master_nodes: ["elasticsearch", "elasticsearch01", "elasticsearch02"]
action.destructive_requires_name: false
discovery.seed_hosts: ["192.168.232.68:9300", "192.168.232.69:9300", "192.168.232.70:9300"]
# 集群成员
#如果关闭安全认证需要使用以下方法,我默认是关闭状态 如果开启安全认证 使用如下方法
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false
如图:192.168.232.68 (master)
如图:192.168.232.69(从) 192.168.232.70(从)
两台从节点几乎没变化 改一下节点名称就可以了,配置一模一样
角色介绍
master:master准确的来说是具有成为master节点资格的节点,即master-eligible node,
具体哪个节点会成为master node 则由master选举算法选举出来的。
data: 又称数据节点,包含已建立索引的文档的分片,数据节点处理与数据相关的操作,例如 CRUD,搜索和聚合
ingest: 又称摄取节点,可以执行由一个或多个ingest processor组成的预处理pipeline。用于对写入
或者查询的数据进行预处理,即可以将部分client需要预处理的工作放到了server端,如常见的格式转换,
空值处理以及时间处理。 可以通过 GET _ingest/pipeline 来查看所有的ingest processor,
并在查询或者写入数据时配置相关的processor来进行数据预处理。
ml: X-pack专用角色,又称机器学习节点,提供了机器学习功能,该节点运行作业并处理机器学习 API 请求 。
transform: X-pack专用角色,又称转换节点,运行转换并处理转换 API 请求。
如果你只有 OSS 发行版,请不要使用这些设置。
remote_cluster_client: 是跨集群连接时需要用到的client节点,又称跨集群节点
默认情况下,集群中的任何节点都可以充当跨集群客户端并连接到其他集群。
连接后,你可以使用跨集群搜索来搜索远程集群。
你还可以使用跨集群复制在集群之间同步数据。这些操作实现的基础就是远程连接节点。
开启安全认证方法:
首先修改配置文件 把配置文件里的false 改为 true 然后指定证书位置,证书位置如下生成
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
#添加以下配置
xpack.security.transport.ssl.verification_mode: none
xpack.security.transport.ssl.keystore.path: /home/opt/elasticsearch-8.5.2/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /home/opt/elasticsearch-8.5.2/config/certs/elastic-certificates.p12
ingest.geoip.downloader.enabled: false
xpack.monitoring.collection.enabled: true
生成证书 为Elasticsearch集群创建一个证书颁发机构。
cd /home/opt/elasticsearch-8.5.2/bin
./elasticsearch-certutil ca
直接全部回车
为集群中的每个节点生成证书和私钥
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
直接全部回车
这样就生成了两个自建的证书
将证书拷贝到elasticsearch的每个节点下面config/certs目录下
mkdir /home/opt/elasticsearch-8.5.2/config/certs
mv elastic-certificates.p12 elastic-stack-ca.p12 /home/opt/elasticsearch-8.5.2/config/certs
chown -R esuser:esuser /home/opt/elasticsearch-8.5.2/
到此证书配置完成,如果不启用证书的话,以上 开启安全认证方法 到此都不需要操作。
安装ik分词器
IK分词器是ES的一个插件,主要用于把一段中文或者英文的划分成一个个的关键字,我们在搜索时候会把
自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器
是将每个字看成一个词,比如"我爱技术"会被分为"我","爱","技","术",这显然不符合要求,所以我们需要安
装中文分词器IK来解决这个问题;
ik分词器gitlab官网:https://github.com/medcl/elasticsearch-analysis-ik
更多版本点击官网中的 Releases
点击 Releases 找到 8.5.2 版本
下载和 es 相同的版本
将包上传到服务器
mkdir /home/opt/elasticsearch-8.5.2/plugins/ik
cd /home/opt/elasticsearch-8.5.2/plugins/ik
将包上传到这个目录 必须在 es目录中。
unzip elasticsearch-analysis-ik-8.5.2.zip
rm -f elasticsearch-analysis-ik-8.5.2.zip
chown -R esuser:esuser /home/opt/elasticsearch-8.5.2/
启动 elasticsearch
su - esuser
/home/opt/elasticsearch-8.5.2/bin/elasticsearch -d -p /data/elasticsearch/temp/elasticsearch.pid
启动完成之后以下操作均在 master 操作 192.168.232.68
两台从节点不用管了
如果开启安全认证,要给集群建用户密码,如果没开启安全认证可以接着安装 head 插件
不急着安装kibana 和 logstash
------------------------全部启动完成之后,master节点建密码----------------------
### 给认证的集群创建用户密码
bin/elasticsearch-setup-passwords interactive
密码自己设置
elastic 账号:拥有 superuser 角色,是内置的超级用户。 kibana 账号:拥有 kibana_system 角色,用户
kibana 账号: 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和.kibana 索引。不能访问 index。
logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。
beats_system账号: 拥有 beats_system角色。用户 Beats 在 Elasticsearch 中存储监控信息时使用。
elastic是超级用户
注意 如果开启了安全认证 账户密码一定要记着 后面会用到
接下来 如果有需要 可以安装一下 head 插件
~]# wget https://cdn.npmmirror.com/binaries/node/v14.15.0/node-v14.15.0-linux-x64.tar.xz
~]# mv node-v14.15.0-linux-x64.tar.xz /home/opt/
~]# cd /home/opt
~]# tar -xf node-v14.15.0-linux-x64.tar.xz
~]# mv node-v14.15.0-linux-x64 nodejs
~]# ln -s /home/opt/nodejs/bin/npm /usr/local/bin/
~]# ln -s /home/opt/nodejs/bin/node /usr/local/bin/
~]# node -v 验证
v14.15.0
~]# npm install -g grunt-cli
/home/opt/nodejs/bin/grunt -> /home/opt/nodejs/lib/node_modules/grunt-cli/bin/grunt
+ grunt-cli@1.4.3
added 59 packages from 71 contributors in 16.72s
~]# ln -s /home/opt/nodejs/bin/grunt /usr/local/bin/
~]# grunt -version
grunt-cli v1.4.3
~]# git clone https://gitee.com/cyberton/elasticsearch-head.git
~]# cd elasticsearch-head/
~]# vi Gruntfile.js
connect: {
server: {
options: {
hostname: '*',
port: 9100,
base: '.',
keepalive: true
}
}
}
~]# vi /home/opt/elasticsearch-head/_site/app.js +4388
#将localhost 修改为 本机IP
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.232.68:9200";
~]# npm install
有报错先不用处理 直接运行下面命令试试
~]# npm run start
~]# nohup grunt server >/dev/null 2>&1 & 后台运行
访问:测试:
http://192.168.232.68:9100
开启证书的 URL是:
http://192.168.0.153:9100/?auth_user=elastic&auth_password=123
接下来部署 kibana
安装包已经在上面下载好了,上传至服务器即可。
tar -zxvf kibana-8.5.2-linux-x86_64.tar.gz -C /home/opt/
vim /home/opt/kibana-8.5.2/config/kibana.yml
server.port: 5601
server.host: "192.168.232.68"
##填本机IP或者 0.0.0.0 都可以,最好写本机IP
server.name: "devops-kibana"
## name 名称可以随便指定
### es集群配置
elasticsearch.hosts: ["http://192.168.232.68:9200","http://192.168.232.69:9200","http://192.168.232.70:9200"]
pid.file: /home/opt/kibana-8.5.2/kibana.pid
elasticsearch.requestTimeout: 99999
i18n.locale: "zh-CN"
如图:
#如果生成证书认证,需要加如下两个参数 ,用户名密码为 elasticsearch 安全证书用户密码
elasticsearch.username: "kibana"
elasticsearch.password: "123"
创建 kibana 用户和依赖目录,并授权
useradd -u 5601 kibana
chown -R kibana:kibana /home/opt/kibana-8.5.2-linux-x86_64
启动 Kibana
su - kibana
cd /home/opt/kibana-8.5.2-linux-x86_64
./bin/kibana
#后台启动
#nohup ./bin/kibana > /dev/null &
PS: 当启动报如下错误(The Reporting plugin encountered issues launching Chromium in a self-test. You may have trouble generating reports.)
参考官方文档,安装依赖包
yum -y install ipa-gothic-fonts
yum -y install xorg-x11-fonts-100dpi
yum -y install xorg-x11-fonts-75dpi
yum -y install xorg-x11-utils
yum -y install xorg-x11-fonts-cyrillic
yum -y install xorg-x11-fonts-Type1
yum -y install xorg-x11-fonts-misc
yum -y install fontconfig freetype
验证配置是否正常
URL:http://IP:5601
如果有安全认证,会有账户密码
账户默认是:elastic 密码是自己设置的密码。
部署logstash
1.解压
tar -zxf logstash-8.5.2-linux-x86_64.tar.gz -C /home/opt/
2.配置logstash.yml
cd /home/opt/logstash/
vi config/logstash.yml
config.reload.automatic: true
3.ELK收集系统标准日志 ,创建收集日志配置目录;
mkdir config/etc/
vim elasticsearch.conf
input {
stdin { }
}
output {
stdout {
codec => rubydebug {}
}
elasticsearch {
hosts => "127.0.0.1:9200" }
}
后台运行
nohup ./logstash -f ../config/elasticsearch.conf > logstash.log 2>&1 &
如果使用 kibana上的 堆栈监测服务 配置如下
在elasticsearch master 节点安装即可
下载Metricbeat组件
官网:https://www.elastic.co/cn/downloads/past-releases#metricbeat
下载的组件需要和 elasticsearch 版本相同
我下载的是tar包,也可以是rpm包
wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.5.2-linux-x86_64.tar.gz
tar -xf metricbeat-8.5.2-linux-x86_64.tar.gz -C /home/opt/
mv metricbeat-8.5.2-linux-x86_64.tar.gz metricbeat
cd metricbeat
vim metricbeat.yml
配置两行
一行是:61行,在61行下面新加一行,如下:
setup.kibana:
host: "192.168.232.68:5601"
修改的一行是:94行
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.232.68:9200"]
#hosts 配置的是 elasticsearch master节点IP,且这个节点必须具备上面所述的6个角色属性
就是es 配置文件 node.roles: 参数配置的角色
配置完成之后 保存退出
执行:
./metricbeat modules enable elasticsearch-xpack
完成之后 执行:
./metricbeat -e
查看是否有报错
正常无报错情况
登录 kibana 页面
点击堆栈监测 功能
稍等片刻 数据会自动刷新