搭建日志分析平台 ¶
为增加 ELK 集群的运行效率,一般建议在 k8s 集群外使用物理机部署 ELK 集群。
zookeeper 集群部署 ¶
zookeeper 介绍 ¶
Zookeeper 概述 ¶
Zookeeper 常被形象地称为 “动物园管理员”,主要负责管理诸如 Hadoop(可类比为大象)、Hive(蜜蜂)、Pig(小猪)以及 Kafka 消息系统等。同时,Apache Hbase 和 Apache Solr 的分布式集群也都用到了 Zookeeper。Zookeeper 是一个分布式且开源的程序协调服务,属于 Hadoop 项目下的一个子项目。其主要提供的功能包括配置管理、名字服务、分布式锁以及集群管理等。
Zookeeper 的主要作用 ¶
(1)节点选举:选举出 Master 节点。当主节点出现故障时,从节点会接手工作,并且确保这个主节点是唯一的,此即首脑模式,从而保障集群的高可用性。 (2)统一配置文件管理:仅需部署一台服务器,就能够将相同的配置文件同步更新到其他所有服务器。例如,可对 Hadoop、Kafka、Redis 等进行统一配置修改。 (3)发布与订阅消息:类似消息队列,发布者将数据存储在 znode 节点上,订阅者读取该数据。 (4)集群管理:确保集群中数据的一致性。
zookeeper 角色: ¶
leader 领导者 - 负责发起选举和决议的,更新系统状态 follower 跟随着 - 接收客户端的请求,给客户端返回结果,在选主的过程参与投票 observer 观察者 - 接收客户端的连接,同步leader状态,不参与选主
Zookeeper 的选举机制为过半机制,安装的台数应为奇数台(否则无法实现过半机制)。一般来说,若有 10 台服务器,需安装 3 台 Zookeeper。
zookeeper 安装 ¶
1. 下载安装包 ¶
cd /opt
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
tar -xf apache-zookeeper-3.9.2-bin.tar.gz
mv apache-zookeeper-3.9.2-bin /opt/zookeeper
2. 在 /opt/zookeeper 目录下创建数据文件目录和日志文件目录 ¶
mkdir /opt/zookeeper/zkData
mkdir /opt/zookeeper/zkLog
3. 复制配置文件并修改 ¶
cd /opt/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/opt/zookeeper
dataLogDir=/opt/zookeeper/zkLog
server.1=10.10.0.2:2188:3888
server.2=10.10.0.4:2188:3888
server.3=10.10.0.5:2188:3888
4. 启动 zookeeper ¶
apt install openjdk-19-jdk-headless -y
cd /opt/zookeeper/
echo 1 > myid
./bin/zkServer.sh start conf/zoo.cfg
apt install openjdk-19-jdk-headless -y
cd /opt/zookeeper/
echo 2 > myid
./bin/zkServer.sh start conf/zoo.cfg
apt install openjdk-19-jdk-headless -y
cd /opt/zookeeper/
echo 3 > myid
./bin/zkServer.sh start conf/zoo.cfg
5. 测试 zookeeper ¶
cd /opt/zookeeper/bin
./zkCli.sh -server 127.0.0.1:2181
============= zookeeper 终端 ================
## 创建节点,以及关联的字符串
[zk: 127.0.0.1:2181(CONNECTED) 2] create /test "test1"
Created /test
## 获取刚创建的节点信息
[zk: 127.0.0.1:2181(CONNECTED) 3] get /test
test1
## 修改节点信息
[zk: 127.0.0.1:2181(CONNECTED) 4] set /test "test222"
## 再次获取修改后的信息
[zk: 127.0.0.1:2181(CONNECTED) 5] get /test
test222
kafka 集群部署 ¶
Kafka 简介 ¶
Kafka 是一个高吞吐量的分布式发布订阅消息系统,即便是在普通硬件条件下,也能够支持每秒数百万条消息的处理。它采用生产者消费者模型。
kafka 下载地址:https://kafka.apache.org/downloads
相关术语
- Broker:Kafka 集群由一个或多个服务器组成,这些服务器被称为 Broker。
- Topic:每一条发布到 Kafka 集群的消息都有一个类别,这个类别即 Topic。从物理层面看,不同 Topic 的消息是分开存储的;从逻辑层面讲,一个 Topic 的消息虽然存储在一个或多个 Broker 上,但用户只需指定消息的 Topic 就可以进行生产或消费数据,而无需关心数据具体存储在哪里。
- Partition:Partition 是物理概念,每个 Topic 包含一个或多个 Partition。
- Producer:负责向 Kafka Broker 发布消息。
- Consumer:消息消费者,即向 Kafka Broker 读取消息的客户端。
Kafka 安装 ¶
1. 下载安装包 ¶
cd /opt
wget https://downloads.apache.org/kafka/3.8.0/kafka_2.12-3.8.0.tgz
tar -xf kafka_2.12-3.8.0.tgz -C /opt/ --transform 's/^kafka_2.12-3.8.0/kafka/'
2. 复制配置文件并修改 ¶
cd /opt/kafka/config
cp server.properties server.properties.bak
vim server.properties
broker.id=0
listeners=PLAINTEXT://10.10.0.2:9092
zookeeper.connect=10.10.0.2:2181,10.10.0.4:2181,10.10.0.5:2181
broker.id=1
listeners=PLAINTEXT://10.10.0.4:9092
zookeeper.connect=10.10.0.2:2181,10.10.0.4:2181,10.10.0.5:2181
broker.id=2
listeners=PLAINTEXT://10.10.0.5:9092
zookeeper.connect=10.10.0.2:2181,10.10.0.4:2181,10.10.0.5:2181
3. 启动 kafka ¶
apt install openjdk-19-jdk-headless -y
cd /opt/kafka/
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
# 1. 登录客户端
/opt/zookeeper/bin/zkCli.sh -server 10.10.0.2:2181
# 2. 查看 /brokers/ids
ls /brokers/ids
# 3. 查看结果,有三个节点正常
[0, 1, 2]
4. 测试 kafka 是否可以正常生产和消费消息 ¶
/opt/kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server 10.10.0.2:9092
/opt/kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server 10.10.0.2:9092
```yaml title="3. 开启消费者消费消息"
/opt/kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 10.10.0.2:9092
/opt/kafka/bin/kafka-topics.sh --bootstrap-server 10.10.0.2:9092 --delete --topic quickstart-events
========== 分割线(下面废弃) ========== ¶
1
1
kafka 是高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。
kafka 下载地址:https://kafka.apache.org/downloads
修改 kafka 配置 ¶
/usr/local/kafka/config/server.properties 核心配置
#broker实例标识,集群时要保证唯一
broker.id=1
# kafka存放数据的目录
log.dirs=/tmp/kafka-logs
# 注册中心zookeeper的地址
zookeeper.connect=localhost:2181
##超时将被删除,也就是说7天之前的数据将被清理掉。
log.retention.hours=168
# 是否允许自动创建 topic
delete.topic.enable=true
listeners=PLAINTEXT://192.168.3.40:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.check.interval.ms=300000
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
启动 zookeeper 和 kafka ¶
nohup /usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties &
nohup /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
测试 kafka 启动是否成功 ¶
ps -ef|grep zookeeper
ps -ef|grep kafka
测试是否可以正常生产和消费消息 ¶
/usr/local/kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server 192.168.3.40:9092
/usr/local/kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.3.40:9092
/usr/local/kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 192.168.3.40:9092
/usr/local/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.3.40:9092 --delete --topic quickstart-events
kafka 其他的查询命令汇总 ¶
# 查询现有的 topic
/usr/local/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.3.40:9092 --list
#查询具体的 topic 的信息
/usr/local/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.3.40:9092 --topic quickstart-events --describe
#查询消费者组的信息
/usr/local/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 192.168.3.40:9092 --list
#删除topic
/usr/local/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.3.40:9092 --delete --topic quickstart-events
搭建过程中的异常 ¶
#查询 kafka 的日志位置
egrep -v "^*#|^$" /usr/local/kafka/config/server.properties