Elasticsearch是一个开源搜索引擎,基于Lucene搜索库构建,被广泛应用于全文搜索、地理位置搜索、日志处理、商业分析等领域。它采用分布式架构,可以处理大规模数据集和支持高并发访问。Elasticsearch提供了一个简单而强大的API,可以轻松地将数据存储和检索,支持实时搜索和聚合分析,可用于构建各种类型的应用程序。Elasticsearch还提供了许多有用的插件和工具,例如Kibana、Logstash和Beats等,可以帮助用户更好地管理和可视化数据。
集群部署流程:
安装软件 | 主机名 | IP地址 | 系统版本 | 配置 |
---|---|---|---|---|
Elasticsearch | elk-1 | 192.168.231.245 | centos7.5.1804 | 3核4G |
Elasticsearch | es1 | 192.168.231.246 | centos7.5.1804 | 2核4G |
Elasticsearch | es2 | 192.168.231.247 | centos7.5.1804 | 2核4G |
- 软件版本:elasticsearch-7.13.2.tar.gz
- 示例节点:10.3.145.14
一,安装部署jdk
可以自行安装,es安装包中自带了jdk
二,安装配置ES
1.本地域名解析
三台机器都做相同的操作
[root@elk-1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.36.192.100 package.qf.com
192.168.231.245 elk-1
192.168.231.246 es1
192.168.231.247 es2
2.创建运行ES的普通用户设置密码
三台机器做相同的操作
[root@elk-1 ~]# useradd es
[root@elk-1 ~]# echo "123" | passwd --stdin "es"
3.上传包,解压,配置配置文件
三台机器做相同的操作
本文章配备的实验用到的包,解压用即可
上传到root
[root@elk-1 ~]# tar zxvf elasticsearch-7.13.2-linux-x86_64.tar.gz -C /usr/local/[root@elk-1 ~]# cd /usr/local
[root@elk-1 local]# mv elasticsearch-7.13.2-linux-x86_64 es #改名
修改配置文件
[root@elk-1 local]# cd es
[root@elk-1 es]# cd config/
[root@elk-1 config]# cat elasticsearch.ymlcluster.name: cloud2304
cluster.initial_master_nodes: ["192.168.231.245","192.168.231.246","192.168.231.247"]
node.name: elk01
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.231.246","192.168.231.247"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: "*"
es1的配置文件
[root@es1 ~]# cat /usr/local/es/config/elasticsearch.ymlcluster.name: cloud2304
cluster.initial_master_nodes: ["192.168.231.245","192.168.231.246","192.168.231.247"]
node.name: elk02
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.231.245","192.168.231.247"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: "*"
es2的配置文件
[root@es2 ~]# cat /usr/local/es/config/elasticsearch.ymlcluster.name: cloud2304
cluster.initial_master_nodes: ["192.168.231.245","192.168.231.246","192.168.231.247"]
node.name: elk03
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.231.246","192.168.231.245"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: "*"
提醒:
1. elasticsearch.yml 配置文件内删除多余的空格,对空格要求较严格
2. 单节点模式下,将discovery开头的行注释
3. cluster.name 是集群名称,实验三个名字相同
4. cluster.initial_master_nodes 集群的IP,集群有的ip都写入 用逗号隔开
5. node.name 是节点名称 实验为了观察集群,因此设置为递增的名字
6. discovery.seed_hosts 提供其他 Elasticsearch 服务节点的单点广播发现功能,这里填写除了本机的其他ip
4.配置项含义
cluster.name 集群名称,各节点配成相同的集群名称。
cluster.initial_master_nodes 集群ip,默认为空,如果为空则加入现有集群,第一次需配置
node.name 节点名称,各节点配置不同。
node.master 指示某个节点是否符合成为主节点的条件。
node.data 指示节点是否为数据节点。数据节点包含并管理索引的一部分。
path.data 数据存储目录。
path.logs 日志存储目录。
bootstrap.memory_lock 内存锁定,是否禁用交换,测试环境建议改为false。
bootstrap.system_call_filter 系统调用过滤器。
network.host 绑定节点IP。
http.port rest api端口。
discovery.seed_hosts 提供其他 Elasticsearch 服务节点的单点广播发现功能,这里填写除了本机的其他ip
discovery.zen.minimum_master_nodes 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。
discovery.zen.ping_timeout 节点在发现过程中的等待时间。
discovery.zen.fd.ping_retries 节点发现重试次数。
http.cors.enabled 是否允许跨源 REST 请求,用于允许head插件访问ES。
http.cors.allow-origin 允许的源地址。
5. 设置JVM堆大小,7.0默认是4G
三台机器做相同的步骤
[root@elk-1 ~]# sed -i 's/## -Xms4g/-Xms4g/' /usr/local/es/config/jvm.options
[root@elk-1 ~]# sed -i 's/## -Xmx4g/-Xmx4g/' /usr/local/es/config/jvm.options
注意:
确保堆内存最小值(Xms)与最大值(Xmx)的大小相同,防止程序在运行时改变堆内存大小。 如果系统内存足够大,将堆内存最大和最小值设置为31G,因为有一个32G性能瓶颈问题。 堆内存大小不要超过系统内存的50%
6. 创建ES的数据目录以及日志存储目录
三台机器做相同的步骤
[root@elk-1 config]# mkdir /data/elasticsearch/{data,logs} -p
7. 修改安装目录以及存储目录的权限
三台机器做相同的步骤
[root@elk-1 ~]# chown -R es.es /data/elasticsearch
[root@elk-1 ~]# chown -R es.es /usr/local/es
三,系统优化
1.增加最大文件的打开数
三台机器做相同的操作
永久生效的办法
[root@elk-1 ~]# echo "* soft nofile 65536" >> /etc/security/limits.conf
2.增加最大进程数
三台机器做相同的操作
[root@elk-1 ~]# echo "* soft nproc 65536" >> /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
更多的参数调整可以直接用这个
3.增加最大的内存映射数
三个机器相同的操作
[root@elk-1 ~]# echo "vm.max_map_count=262144" >> /etc/sysctl.conf
4. 添加elasticsearch用户拥有的客串建文件描述的权限,需要65536
三个机器相同的操作
vim /etc/security/limits.conf在最后添加
* hard nofile 65536
* hard nofile 65536
四,启动ES
1.切换普通用户启动es
三台机器相同的操作
[root@elk-1 ~]# su es[es@elk-1 root]$ /usr/local/es/bin/elasticsearch &
屏幕会产生大量数据,对不同计算机性能可能启动时间不同,放置后台启动观察端口,如果有9200 那么就可以成功访问
[es@es2 root]$ ss -nplt | grep 9
LISTEN 0 128 [::]:9200 [::]:* users:(("java",pid=1465,fd=279))
LISTEN 0 128 [::]:9300 [::]:* users:(("java",pid=1465,fd=277))
浏览器访问集群
访问: http://192.168.231.245:9200
安装部署head监控插件(只在第一台es部署)
1. 安装node
有包直接上传使用
rz 上传到/root解压
[root@elk-1 ~]# tar -zxf node-v10.0.0-linux-x64.tar.gz –C /usr/local改名
[root@elk-1 ~]# cd /usr/local
[root@elk-1 local]# mv node-v10.0.0-linux-x64 node编辑环境变量
vim /etc/profile.d/node.shNODE_HOME=/usr/local/node
PATH=$PATH:$NODE_HOME/bin重载变量
[root@elk-1 ~]# source /etc/profile.d/node.sh检查node版本号
[root@elk-1 ~]# node --version
2. 下载head插件
有包直接上传到/root
rz elasticsearch-head-master.zip解压 unzip
[root@elk-1 ~]# unzip –d /usr/local elasticsearch-head-master.zip
3. 安装grunt
[root@elk-1 ~]# cd /usr/local/elasticsearch-head-master安装grunt-cli
[root@elk-1elasticsearch-head-master]# npm install -g grunt-cli
[root@elk-1 elasticsearch-head-master]# grunt -version 查看grunt版本
grunt-cli v1.4.3
安装grunt-cil出错
解决办法在执行一次即可
4. 修改head源码
[root@elk-1 ~]#vi /usr/local/elasticsearch-head-master/Gruntfile.js +95 添加hostname,注意在上一行末尾添加逗号,hostname 不需要添加逗号
[root@elk-1 ~]# vim /usr/local/elasticsearch-head-master/_site/app.js +4373 原本是http://localhost:9200 ,如果head和ES不在同一个节点,注意修改成ES的IP地址,写成elk-1的IP地址
5. 下载head必要的文件
有包直接上传到/root即可
rz phantomjs-2.1.1-linux-x86_64.tar.bz2下载bzip2
[root@elk-1 ~]# yum -y install bzip2创建存放目录
[root@elk-1 ~]# mkdir /tmp/phantomjs将文件移动过去即可,不需要解压
[root@elk-1 ~]# mv phantomjs-2.1.1-linux-x86_64.tar.bz2 /tmp/phantomjs/更改权限
[root@elk-1 ~]# chmod 777 /tmp/phantomjs -R
6. 运行head
[root@elk-1 ~]# cd /usr/local/elasticsearch-head-master/[root@elk-1 ~]# npm install 如果报错
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! phantomjs-prebuilt@2.1.16 install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the phantomjs-prebuilt@2.1.16 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-04-21T09_49_34_207Z-debug.log
解决办法
[root@elk-1 ~]# npm install phantomjs-prebuilt@2.1.16 --ignore-scripts # 具体的版本按照上述报错修改
7. 放入后台运行,查看端口
[root@elk-1 ~]# nohup grunt server &
[root@elk-1 ~]# ss -tnlp有9100即可访问head
前台运行grunt运行报错
这个错误提示表明在运行grunt server命令时,缺少一些必要的grunt插件。
解决办法
重复步骤,直到所有缺少的grunt插件都被安装。
npm install grunt-contrib-clean --save-dev
成功
8.测试访问
http://192.168.231.245:9100