Kafka 服务器宕机
文章目录
前言
现在很多公司工具都分开部署,从而保证安全性。而且如果使用 Docker 安装 Kafka 集群的话,也需要把 Kafka 集群的服务器硬盘分配的大一些,因为很多服务的通信、数据的流转、日志采集的传输等,都是通过 Kafka 消息总线进行的。
一、挂机事件
公司2019年后,业务量扩大,也更新了之前的消息队列,换成了kafka,所以使用 Docker 安装 Kafka 集群的话,特意叮嘱运维需要把 Kafka 集群的服务器硬盘分配的大一些,没想到第二天邮件里瞬间收到大量服务器告警信息,紧接着看到监控显示内网几台测试服务器挂机。
二、解决步骤
1.登录服务器
将当前服务器终端所在的目录切换到 Docker 镜像默认的目录下,查询信息,发现无法切换。
[root@localhost ~]# cd /var/lib/docker
[root@localhost ~]# ls -bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
-bash: 无法为立即文档创建临时文件: 设备上没有空间
查看磁盘信息
[root@localhost ~]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 82M 3.8G 3% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/localhost-root 50G 50G 0G 100% /
/dev/sda1 976M 144M 766M 16% /boot
/dev/mapper/localhost-home 53G 5G 48G 91% /dockerhome
tmpfs 779M 0 779M 0% /run/user/0
overlay 50G 50G 0G 100% /var/lib/docker/overlay2/d51b7c0afcc29c49b8b322d1822a961e6a86401f0c6d1c29c42033efe8e9f070/merged
overlay 50G 50G 0G 100% /var/lib/docker/overlay2/0e52ccd3ee566cc16ce4568eda40d0364049e804c36328bcfb5fdb92339724d5/merged
overlay 50G 50G 0G 100% /var/lib/docker/overlay2/16fb25124e9b85c7c91f271887d9ae578bf8df058ecdfece24297967075cf829/merged
发现已经overlay了,根目录磁盘空间占用率 100%。
2.移动目录
/dockerhome目录还是比较空闲的,我们可以把 Docker 默认的镜像目录从 /var/lib/docker目录移动到 /dockerhome/docker目下,来临时缓解下服务器的压力,进行测试。其他的就等重新分配好服务器再切换。然后使用修改配置法去迁移 Docker 默认镜像目录。
指定镜像和容器存放路径的参数是–graph=/var/lib/docker
,我们只需要修改配置文件指定启动参数即可。公司使用的服务器操作系统是 CentOS。所以,可以通过如下方式方式修改了 Docker 的配置。
(1)停止 Docker 服务
systemctl stop docker
(2)修改 docker 服务启动文件
vim /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart=/usr/bin/dockerd --graph=/dockerhome/docker
(3)重新加载配置并启动
systemctl daemon-reload
systemctl start docker
总结
生产环境的流量是比较大的,正常基本都在 5万 QPS,如果遇到高峰期,几乎是2-3倍。公司kafka集群有5台机器,正常情况下3台机器足够了,但是懂的都懂,一台机器配置80T左右。基本上配置内存都在,当时,我是在生产环境分了一部分流量到测试环境。如果 Kafka 集群的磁盘不设置的大一些的话,当 Kafka 消费者性能下降或者由于其他原因,造成消息在 Kafka 中堆积的话,会造成 Kafka 占用大量的磁盘空间。如果磁盘空间满了的话,那么 Kafka 所在的服务器就会崩溃,宕机。