zookeeper+kafka+EFK部署

目录

  • 1. 部署zookeeper+kafka+EFK过程
    • 1.1 搭建环境
    • 1.2 部署zookeeper
    • 1.3 部署 kafka 集群
      • 1.3.1 Kafka 命令行操作
    • 1.4 部署EFK
      • 1.4.1 搭建环境
      • 1.4.2 部署Elasticsearch
      • 1.4.3 部署elasticsearch-head插件
      • 1.4.4 部署kibana
      • 1.4.5 部署logstash
      • 1.4.6 部署Filebeat
    • 1.5 验证

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 验证

zookeeper+kafka+EFK部署_第1张图片
zookeeper+kafka+EFK部署_第2张图片

你可能感兴趣的:(各个架构群集,kafka,zookeeper)