目录
一、实验环境
192.168.238.150:zookeeper kafka
192.168.238.100:zookeeper kafka
192.168.238.99:zookeeper kafka
二、部署zookeeper
三台服务器安装
[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 #客户端连接端口
#在每个节点上创建数据目录和日志目录
[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
#设置开机自启
[root@localhost zookeeper-3.5.7]# chmod +x /etc/init.d/zookeeper
[root@localhost zookeeper-3.5.7]# chkconfig --add zookeeper
三、部署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.238.100:9092 #取消注释,指定监听的IP和端口。另外两台为192.168.238.150:9092;192.168.238.99: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 #修改环境变量
[root@localhost config]# source /etc/profile #重载文件
[root@localhost config]# vim /etc/init.d/kafka #配置kafka启动脚本
[root@localhost config]# chmod +x /etc/init.d/kafka
[root@localhost config]# chkconfig --add kafka
[root@localhost config]# service kafka start
---------- Kafka 启动 ------------
ps:如果查看不到端口,说明服务没有启动成功,将kafka目录下的logs目录里的文件,删除后重启
kafka命令行操作
#创建topic
[root@localhost logs]# kafka-topics.sh --create --zookeeper 192.168.238.150:2181,192.168.238.100:2181,192.168.238.99:2181 --replication-factor 2 --partitions 3 --topic test
#查看当前系统的所有topic
[root@localhost logs]# kafka-topics.sh --list --zookeeper 192.168.238.150:2181,192.168.238.100:2181,192.168.238.99:2181
test
#查看指定topic详情
[root@localhost logs]# kafka-topics.sh --describe --zookeeper 192.168.238.150:2181,192.168.238.100:2181,192.168.238.99:2181
Topic: test PartitionCount: 3 ReplicationFactor: 2 Configs:
Topic: test Partition: 0 Leader: 2 Replicas: 2,0 Isr: 2,0
Topic: test Partition: 1 Leader: 0 Replicas: 0,1 Isr: 0,1
Topic: test Partition: 2 Leader: 1 Replicas: 1,2 Isr: 1,2
#发布消息
[root@localhost logs]# kafka-console-producer.sh --broker-list 192.168.238.150:9092,192.168.238.100:9092,192.168.238.99:9092 --topic test2
>holle
#消费消息
[root@localhost logs]# kafka-console-consumer.sh --bootstrap-server 192.168.238.150:9092,192.168.238.100:9092,192.168.238.99:9092 --topic test2 --from-beginning
holle
#修改分区数
[root@localhost logs]# kafka-topics.sh --zookeeper 192.168.238.150:2181,192.168.238.100:2181,192.168.238.99: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.238.150:2181,192.168.238.100:2181,192.168.238.99:2181 --topic test
Topic test is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
四、部署EFK
node1:192.168.238.133 Elasticsearch kibana
node2:192.168.238.134 Elasticsearch
apach:192.168.238.135 Apache logstash
一、部署Elasticsearch
node1、node2
[root@localhost ~]# hostnamectl set-hostname node1 #修改主机名
[root@localhost ~]# su
[root@node1 ~]# ntpdate ntp.aliyun.com
[root@node1 ~]# vim /etc/hosts #添加主机映射
#上传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
[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]# mkdir -p /data/elk_data # #创建数据文件目录
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/ ##修改目录属主属组
[root@node1 opt]# systemctl start elasticsearch.service #开启
查看节点信息
查看群集健康状态信息
二、部署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@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
在最后插入
http.cors.enabled: true #开启跨域访问支持
http.cors.allow-origin: "*" #跨域方位允许的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch
[root@node1 elasticsearch-head]# npm run start &
[root@node1 elasticsearch-head]# netstat -natp | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 128023/grunt
三、部署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.238.133:9200" #取消注释,与elasticsearch建立联系
第30行 kibana.index: ".kibana" #取消注释,在elasticsearch中添加kibana索引
[root@node1 kibana]# systemctl start kibana.service #开启服务
[root@node1 kibana]# systemctl enable kibana.service #设置开机自启
四、部署logstash
Apache:192.168.238.135
##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
[root@apache conf.d]# nohup logstash -f filebeat.conf &
五、部署Filebeat
Filebeat:192.168.238.136
[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
ps:将filebeat.yml文件中,如下注释掉,否则启动不了
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
[root@localhost filebeat]# ./filebeat -e -c filebeat.yml #启动
五、验证