最近把ELK生产环境从5.6.0升级到了6.3.2,在此记录一下
-
基础环境:
操作系统:Centos 6.7 64位
ELK版本:6.3.2
jdk版本:1.8
ES用户:elastic
节点:
172.221.16.105
172.16.221.104
172.16.221.12
-
安装Elasticsearch
1.下载并解压
可以直接wget下载:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.tar.gz
也可先离线下载然后上传到服务器,下载页面:
https://www.elastic.co/downloads/elasticsearch(下载tar格式)
我的存放目录是在/data/elastic/elasticsearch-6.3.2.tar.gz(3台机器)
分别对3台机器压缩包解压:
tar -zxvf elasticsearch-6.3.2.tar.gz
2. 配置
在105机器上:
cd /data/elastic/elasticsearch-6.3.2
分别创建data目录和logs目录,用来存放索引数据和日志数据
mkdir data
mkdir logs
然后vim elasticsearch.yml添加如下配置:
# 集群名字,相同集群名字的节点会放到同一个集群下
cluster.name: golive
# 节点名字
node.name: node3
node.master: true
node.data: true
path.data: /data/elastic/elasticsearch-6.3.2/data
path.logs: /data/elastic/elasticsearch-6.3.2/logs
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 172.16.221.105
http.port: 9400
#discovery.zen.ping.multicast.enabled: false
#指明集群中其它可能为master的节点ip,以防es启动后发现不了集群中的其他节点。
discovery.zen.ping.unicast.hosts: ["172.16.221.104", "172.16.221.105", "172.16.221.12"]
#指定集群中的节点中有几个有master资格的节点,对于大集群可以写3个以上。
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
thread_pool.bulk.size: 12
thread_pool.bulk.queue_size: 1000
在其他两台机器做相同的配置,修改响应node.name和network.host
另外,配置jvm.options如下,这个根据机器内存情况,最大不要超过机器内存的一半
-Xms16g
-Xmx16g
3. 创建非root用户elastic,并修改es目录所属组和所有者
groupadd elastic
useradd elastic -g elastic
更改es目录下所有文件所属用户及组为elastic:elastic
chown -R elastic:elastic elasticsearch-6.3.2
4. 启动es
su elastic
依次再各节点:./bin/elasticsearch -d
启动过程中可以通过tail -f logs/golive.log监控各节点启动情况
启动时可能会报错:
- max number of threads [1024] for user [etl] is too low, increase to at least [4096] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
切换回root用户,修改/etc/security/limits.conf,增加如下配置:
elastic soft memlock unlimited elastic hard memlock unlimited elastic hard nproc 65536 elastic soft nproc 65536
elastic soft nofile 65536
elastic hard nofile 65536
修改/etc/sysctl.conf,增加如下配置:
vm.max_map_count=262144 vm.swappiness=1
使用命令:sysctl -p使修改生效,可以使用sysctl vm.max_map_count查看是否修改成功 - ERROR:bootstrap checks failed system call filters failed to install;check the logs and fix your configuration or disable system call filters at your own risk
因为Centos6不支持SecComp,而ES5.2.1默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动,解决方法是在elasticsearch.yml配置bootstrap.system_call_filter为false,注意要在memory下边:
bootstrap.memory_lock: true
bootstrap.system_call_filter: false - max virtual memory areas vm.max_map_count[65530] likely too low,increase to at least [262144]
这个错误是说最大虚拟内存太小,解决方式:
切换到root用户下,修改配置文件sysctl.conf
vim /etc/sysctl.conf
添加如下配置:
vm.max_map_count=655360
然后执行命令:sysctl -p - 报错:max number of threads [1024] for user [elastic] is too low, increase to at least [4096]
vi /etc/security/limits.d/90-nproc.conf
修改如下配置:
* soft nproc 4096
* soft nproc 4096
再次启动:
su elastic
./bin/elasticsearch -d
启动时观察es日志,3个节点都启动完后jps可以看到Elasticsearh进程,也可以通过
curl -X GET http://172.16.221.105:9400/_cluster/health?pretty
返回如下信息:
{
"cluster_name" : "golive",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 90,
"active_shards" : 205,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
-
安装kibana
1. 下载并解压
kibana是用于es可视化及监控,只需要在一台机器上安装,我的是在12上
可以直接wget下载:
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-linux-x86_64.tar.gz
也可先离线下载然后上传到服务器,下载页面:
https://www.elastic.co/downloads/kibana(下载LINUX 64-BIT格式)
我的是在/data/elastic/kibana-6.3.2-linux-x86_64.tar.gz(3台机器)
解压:
tar -zxvf kibana-6.3.2-linux-x86_64.tar.gz
2. 配置
cd /data/elastic/kibana-6.3.2-linux-x86_64/config
vim kibana.yml添加如下配置:
server.port: 3000
server.host: "*.*.*.12"
server.name: "golive"
elasticsearch.url: "http://*.*.221.105:9400"
xpack.security.enabled: false
注意,从6.3版本开始,kibana内置了x-pack插件,现在官网的x-pack组件只提供6.2及6.2以前的版本
x-pack里包含了权限管理、集群监控等,加入xpack.security.enabled: false是要禁用登录功能,可以根据需要加入该配置
3. 启动
nohup ./bin/kibana > /dev/kibana.log 2>&1 &
可以tail -f /dev/kibana.log监控启动情况
4. 页面访问
启动成功后可以3000端口访问,访问如下:
不得不说,从6.3开始内置了x-pack加入完整的权限管理,集群监控的功能,必须点个赞,现在观察各节点、各索引等的状态信息特别方便,也特别细致,我记得我之前在5.x,6.1版都手动装过x-pack,里面都是些简单的功能,而且要定期更新证书才能使用,很麻烦,现在真心方便了,比心
我这次ELK搭建集群其实是把之前的ELK从5.6.0版升级到6.3.2,ES数据是先备份(快照)到HDFS上,之后再从HDFS做restore,之前kibana在ES保存的数据(可视化图表,仪表盘等)默认是.kibana,这个索引恢复的时候需要做升级,根据官网步骤升级就行,官网地址如下:(https://www.elastic.co/guide/en/kibana/current/migrating-6.0-index.html)
-
安装Logstash
1. 下载并解压
logstash用于数据采集、转换,这里我只需要在一台机器上安装,安装机器是104
可以直接wget下载:
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz
也可先离线下载然后上传到服务器,下载页面:
https://www.elastic.co/downloads/logstash(下载TAR.GZ格式)
我的是在/data/elastic/logstash-6.3.2.tar.gz
解压:
tar -zxvf logstash-6.3.2.tar.gz
2. 配置
配置根据数据源的不同,添加相关配置和响应jar就可以了,比如我是从redis采集数据到ES,新建redis.conf,并添加input filter output
3. 启动
nohup ./bin/logstash -f ./bin/conf/redis.conf > /dev/null 2>&1 &