目录
1. 部署zookeeper+kafka+EFK过程
1.1 搭建环境
192.168.152.130:zookeeper kafka
192.168.152.129:zookeeper kafka
192.168.152.128:zookeeper kafka
1.2 部署zookeeper
注意:这里是三台服务器一起安装
[root@localhost ~]# yum -y install ntpdate ntp
[root@localhost ~]# ntpdate ntp.aliyun.cpm #同步阿里云时钟服务器
[root@localhost ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel #安装依赖环境
[root@localhost ~]# java -version #查看java版本
[root@localhost ~]# cd /opt
[root@localhost opt]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz #下载zookeeper软件包
[root@localhost opt]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz #解包
[root@localhost opt]# mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7 #将目录移到/usr/local
[root@localhost opt]# cd /usr/local/zookeeper-3.5.7/conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# vim zoo.cfg
tickTime=2000 #通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
initLimit=10 #Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量),这里表示为10*2s
syncLimit=5 #Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer
dataDir=/usr/local/zookeeper-3.5.7/data ●修改,指定保存Zookeeper中的数据的目录,目录需要单独创建
dataLogDir=/usr/local/zookeeper-3.5.7/logs ●添加,指定存放日志的目录,目录需要单独创建
clientPort=2181 #客户端连接端口
在最后添加集群信息
server.1=192.168.152.130:3188:3288
server.2=192.168.152.129:3188:3288
server.3=192.168.152.128:3188:3288
#在每个节点上创建数据目录和日志目录
[root@localhost conf]# mkdir /usr/local/zookeeper-3.5.7/data
[root@localhost conf]# mkdir /usr/local/zookeeper-3.5.7/logs
[root@localhost conf]# cd ..
#在每个节点的dataDir指定的目录下创建一个 myid 的文件
[root@localhost zookeeper-3.5.7]# echo 1 > /usr/local/zookeeper-3.5.7/data/myid #第一台
[root@localhost zookeeper-3.5.7]# echo 2 > /usr/local/zookeeper-3.5.7/data/myid #第二台
[root@localhost zookeeper-3.5.7]# echo 3 > /usr/local/zookeeper-3.5.7/data/myid #第三台
#配置Zookeeper启动脚本
[root@localhost zookeeper-3.5.7]# vim /etc/init.d/zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.5.7'
case $1 in
start)
echo "---------- zookeeper 启动 ------------"
$ZK_HOME/bin/zkServer.sh start
;;
stop)
echo "---------- zookeeper 停止 ------------"
$ZK_HOME/bin/zkServer.sh stop
;;
restart)
echo "---------- zookeeper 重启 ------------"
$ZK_HOME/bin/zkServer.sh restart
;;
status)
echo "---------- zookeeper 状态 ------------"
$ZK_HOME/bin/zkServer.sh status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac
#设置开机自启
[root@server zookeeper-3.5.7]# chmod +x /etc/init.d/zookeeper
[root@server zookeeper-3.5.7]# chkconfig --add zookeeper
#分别启动 Zookeeper
[root@server zookeeper-3.5.7]# service zookeeper start
#查看当前状态
[root@server zookeeper-3.5.7]# service zookeeper status
1.3 部署 kafka 集群
注意:这是在安装zookeeper的三台服务器上部署kafka
[root@localhost zookeeper-3.5.7]# cd /opt
[root@localhost opt]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2.13-2.7.1.tgz
#下载kafka软件包
[root@localhost opt]# tar zxvf kafka_2.13-2.7.1.tgz #解包
[root@localhost opt]# mv kafka_2.13-2.7.1 /usr/local/kafka
[root@localhost opt]# cd /usr/local/kafka/config/
[root@localhost config]# cp server.properties{,.bak} #备份配置文件
[root@localhost config]# vim server.properties
第21行 broker.id=0 #broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 broker.id=1、broker.id=2
第31行 listeners=PLAINTEXT://192.168.152.130:9092
#取消注释,指定监听的IP和端口。另外两台为192.168.152.129:9092;192.168.152.128:9092
第42行 num.network.threads=3 #broker处理网络请求的线程数量,一般情况下不需要去修改
第45行 num.io.threads=8 #用来处理磁盘IO的线程数量,数值应该大于硬盘数
第48行 socket.send.buffer.bytes=102400 #发送套接字的缓冲区大小
第51行 socket.receive.buffer.bytes=102400 #接收套接字的缓冲区大小
第54行 socket.request.max.bytes=104857600 #请求套接字的缓冲区大小
第60行 log.dirs=/usr/local/kafka/logs #kafka运行日志存放的路径,也是数据存放的路径
第65行 num.partitions=1 #topic在当前broker上的默认分区个数,会被topic创建时的指定参数覆盖
第69行 num.recovery.threads.per.data.dir=1 #用来恢复和清理data下数据的线程数量
第103行 log.retention.hours=168 #segment文件(数据文件)保留的最长时间,单位为小时,默认为7天,超时将被删除
第110行 log.segment.bytes=1073741824 #一个segment文件最大的大小,默认为1G,超出将新建一个新的segment文件
第123行 zookeeper.connect=192.168.238.100:2181,192.168.238.150:2181,192.168.238.99:2181 #配置连接Zookeeper集群地址
[root@localhost config]# vim /etc/profile
#修改环境变量,在最后添加
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
[root@localhost config]# source /etc/profile #重载文件
[root@localhost config]# vim /etc/init.d/kafka #配置kafka启动脚本
#!/bin/bash
#chkconfig:2345 22 88
#description:Kafka Service Control Script
KAFKA_HOME='/usr/local/kafka'
case $1 in
start)
echo "---------- Kafka 启动 ------------"
${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
;;
stop)
echo "---------- Kafka 停止 ------------"
${KAFKA_HOME}/bin/kafka-server-stop.sh
;;
restart)
$0 stop
$0 start
;;
status)
echo "---------- Kafka 状态 ------------"
count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
if [ "$count" -eq 0 ];then
echo "kafka is not running"
else
echo "kafka is running"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac
[root@localhost config]# chmod +x /etc/init.d/kafka
[root@localhost config]# chkconfig --add kafka
[root@localhost config]# service kafka start
[root@localhost config]# netstat -antp | grep 9092
注意:如果查看不到端口,说明服务没有启动成功,将kafka目录下的logs目录里的文件,删除后重启
1.3.1 Kafka 命令行操作
#创建topic
[root@localhost logs]# kafka-topics.sh --create --zookeeper 192.168.152.130:2181,192.168.152.129:2181,192.168.152.128:2181 --replication-factor 2 --partitions 3 --topic test
#查看当前系统的所有topic
[root@localhost logs]# kafka-topics.sh --list --zookeeper 192.168.152.130:2181,192.168.152.129:2181,192.168.152.128:2181 test
#查看指定topic详情
[root@localhost logs]# kafka-topics.sh --describe --zookeeper 192.168.152.130:2181,192.168.152.129:2181,192.168.152.128:2181
#发布消息
[root@localhost logs]# kafka-console-producer.sh --broker-list 192.168.152.130:9092,192.168.152.129:9092,192.168.152.128:9092 --topic test2
#消费消息
[root@localhost logs]# kafka-console-consumer.sh --bootstrap-server 192.168.152.130:9092,192.168.152.129:9092,192.168.152.128:9092 --topic test2 --from-beginning
#修改分区数
[root@localhost logs]# kafka-topics.sh --zookeeper 192.168.152.130:2181,192.168.152.129:2181,192.168.152.128:2181 --alter --topic test2 --partitions 6
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!
#删除topic
[root@localhost logs]# kafka-topics.sh --delete --zookeeper 192.168.152.130:2181,192.168.152.129:2181,192.168.152.128:2181 --topic test
1.4 部署EFK
1.4.1 搭建环境
node1:192.168.152.11 Elasticsearch kibana
node2:192.168.152.12 Elasticsearch
apach:192.168.152.127 Apache logstash
1.4.2 部署Elasticsearch
node1、node2做相同的操作
[root@localhost ~]# hostnamectl set-hostname node1 #修改主机名
[root@node1 ~]# ntpdate ntp.aliyun.com
[root@node1 ~]# vim /etc/hosts #添加主机映射
192.168.152.11 node1
192.168.152.12 node2
[root@node1 ~]# java -version
#上传elasticsearch-5.5.0.rpm到/opt目录下
[root@node1 ~]# cd /opt
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm #安装
#加载系统服务
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service
#更改elasticsearch主配置文件
[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak #备份
[root@node1 opt]# vim /etc/elasticsearch/elasticsearch.yml
第17行 cluster.name: my-elk-cluster #集群名称
第23行 node.name: node1 #节点名称,另一台为node2
第33行 path.data: /data/elk_data #数据存放路径
第37行 path. logs: /var/log/elasticsearch/ #日志存放路径
第43行 bootstrap.memory_lock: false
#锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致Ios变高(性能测试:每秒的读写次数)。
第55行 network.host: 0.0.0.0 #提供服务绑定的IP地址,0.0.0.0代表所有地址
第59行 http.port: 9200 #侦听端口为9200
第68行 discoveryp zen.ping.unicast.hosts:["node1", "node2"] #集群发现通过单播实现单播
[root@node1 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
#创建数据存放路径并授权
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/
[root@node1 opt]# systemctl start elasticsearch.service #开启
可在真机上输入192.168.152.11:9200进行验证
1.4.3 部署elasticsearch-head插件
node1、node2做相同的操作
##安装node组件 上传node-v8.2.1.tar.gz到/opt
[root@node1 opt]# yum install gcc gcc-c++ make -y #安装依赖环境
[root@node1 opt]# tar xzvf node-v8.2.1.tar.gz #解包
[root@node1 node-v8.2.1]# ./configure && make -j3 && make install #编译安装
##安装phantomjs前端框架
#上传phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 node-v8.2.1]# cd /usr/local/src/
[root@node1 src]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 #解包
[root@node2 bin]# cp phantomjs /usr/local/bin
##安装elasticsearch-head图形化界面
[root@node1 bin]# cd /usr/local/src/
#上传elasticsearch-head软件包
[root@localhost src]# tar xzvf elasticsearch-head.tar.gz #解包
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install
#修改主配置文件
[root@localhost ~]# cd ~
[root@localhost ~]# vim /etc/elasticsearch/elasticsearch.yml
#下面配置文件,插末尾
http.cors.enabled: true #开启跨域访问支持,默认为false
http.cors.allow-origin: "*" # 跨域访问允许的域名地址
[root@localhost ~]# systemctl restart elasticsearch
#启动elasticsearch-head 启动服务器
[root@localhost ~]# cd /usr/local/src/elasticsearch-head/
[root@localhost elasticsearch-head]# npm run start & #切换到后台运行
1.4.4 部署kibana
在node1主机安装kibana
[root@node1 elasticsearch-head]# cd /usr/local/src/
#上传kibana-5.5.1-x86_64.rpm 到/usr/local/src目录
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm #安装
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml
第2行 server.port: 5601 #取消注释打开端口
第7行 server.host: "0.0.0.0" #取消注释,修改监听地址
第21行 elasticsearch.url: "http://192.168.152.11:9200" #取消注释,与elasticsearch建立联系
第30行 kibana.index: ".kibana" #取消注释,在elasticsearch中添加kibana索引
[root@node1 kibana]# systemctl start kibana.service #开启服务
[root@node1 kibana]# systemctl enable kibana.service #设置开机自启
1.4.5 部署logstash
logstash是为了收集Kafka队列传输过来的数据的
在192.168.152.127上面操作
##logstash是为了收集Kafka队列传输过来的数据的
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
[root@apache ~]# ntpdate ntp.aliyun.com
[root@apache ~]# cd /opt
#上传logstash软件包
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm #安装
[root@apache opt]# systemctl start logstash.service
[root@apache opt]# systemctl enable logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ #命令优化
[root@apache opt]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim filebeat.conf
input {
kafka {
bootstrap_servers => "192.168.152.130:9092,192.168.152.129:9092,192.168.152.128:9092"
topics => "filebeat_test"
group_id => "test123"
auto_offset_reset => "earliest"
}
}
output {
elasticsearch {
hosts => ["192.168.152.11:9200"]
index => "filebeat-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
#启动 logstash
[root@apache conf.d]# nohup logstash -f filebeat.conf &
1.4.6 部署Filebeat
准备另一台虚拟机 地址为Filebeat:192.168.152.13
[root@localhost opt]# cd /usr/local/
[root@localhost local]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz
[root@localhost local]# tar -xvzf filebeat-7.5.1-linux-x86_64.tar.gz
[root@localhost local]# mv filebeat-7.5.1-linux-x86_64 /usr/local/filebeat
[root@localhost local]# cd filebeat/
[root@localhost filebeat]# vim filebeat.yml
filebeat.prospectors:
- type: log
enabled: true
paths:
- /var/log/messages
- /var/log/*.log
......
#添加输出到 Kafka 的配置
output.kafka:
enabled: true
hosts: ["192.168.152.130:9092","192.168.152.129:9092","192.168.152.128:9092"] #指定 Kafka 集群配置
topic: "filebeat_test" #指定 Kafka 的 topic
ps:将filebeat.yml文件中,如下注释掉,否则启动不了
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
#启动 filebeat
[root@localhost filebeat]# ./filebeat -e -c filebeat.yml #启动
1.5 验证