乐趣区

关于运维:记一次Kafka服务器宕机的真实经历

大家好,我是冰河~~

预计节前前祭拜服务器不灵了,年后服务器总是或多或少的呈现点问题。不知是人的问题,还是风水问题。昨天上班时,跟运维小伙伴交代了好几遍:如果应用 Docker 装置 Kafka 集群的话,也须要把 Kafka 集群的服务器硬盘调配的大一些,公司业务量很大,很多服务的通信、数据的流转、日志采集的传输等,都是通过 Kafka 音讯总线进行的。

没想到明天早上一到公司,刚刚做到工位上,关上我的电脑,邮件里霎时收到大量服务器告警信息,紧接着看到监控大屏上显示,内网几台测试服务器挂了。此时,我的表情是这样的。

我靠,啥状况?刚一来就搞事件?哪些服务器出问题了?再定睛一看大屏,我去,这不是昨天跟运维小伙伴说的那几台 Kafka 集群服务器吗?

刚测试就挂了?不会这么衰吧?

于是,我连忙走到运维小伙伴旁边,说:你昨天怎么配置的服务器啊?

他说:我没配置啊?不是测试环境吗?我就没怎么配置,我是每台服务器给了 120G 空间,依照默认设置装置的 Kafka 集群啊!

我:不是跟你说了让你把服务器磁盘空间设置的大一些吗?。。。

心里再怎么无语,也要解决问题啊!于是我连忙登录服务器,在服务器命令行执行命令,将以后服务器终端所在的目录切换到 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% /home
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

我去,根目录磁盘空间占用率 100%,果然跟我想的一样。 而且输入的后果信息中,显示了几个重要的信息,如下所示。

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

这不就是 Docker 的默认装置镜像吗?

下一步怎么办呢?咱们看到 /home 目录还是比拟闲暇的,咱们能够把 Docker 默认的镜像目录从 /var/lib/docker 目录挪动到 /home/docker 目下,来长期缓解下服务器的压力,进行测试。其余的就等重新分配好服务器再切换吧。

马上开干,于是我开始迁徙 Docker 默认镜像目录。

迁徙 Docker 默认镜像目录,有两种计划,这里跟小伙伴们说下, 一种计划是:软链接法;另一中计划是:批改配置法。 接下来,咱们就别离看下这两种办法。

1. 软链接法

(1)默认状况下 Docker 的寄存地位为:/var/lib/docker,咱们能够通过上面的命令来查看 Docker 默认镜像装置目录。

[root@localhost ~]# docker info | grep "Docker Root Dir"
Docker Root Dir: /var/lib/docker

(2)接下来,咱们执行如下命令停掉 Docker 服务器。

systemctl stop docker

或者

service docker stop

(3)而后将 /var/lib/docker 目录整体挪动到 /home 目录下。

mv /var/lib/docker /home

这个过程可能工夫比拟长。

(4)接下来,再创立软链接,如下所示。

ln -s /home/docker /var/lib/docker

(5)最初,咱们启动 Docker 服务器。

systemctl start docker

或者

service docker start

(6)再次查看 Docker 镜像的目录,如下所示。

[root@localhost ~]# docker info | grep "Docker Root Dir"
Docker Root Dir: /home/docker

此时,Docker 镜像目录迁徙胜利。

接下来,咱们再说说批改配置法。

2. 批改配置法

指定镜像和容器寄存门路的参数是 –graph=/var/lib/docker,咱们只须要批改配置文件指定启动参数即可。

这里,我应用的服务器操作系统是 CentOS。所以,能够通过如下形式形式批改了 Docker 的配置。

(1)进行 Docker 服务

systemctl stop docker

或者

service docker stop

(2)批改 docker 服务启动文件。

vim /etc/systemd/system/multi-user.target.wants/docker.service

在启动文件中减少如下一行代码。

ExecStart=/usr/bin/dockerd --graph=/home/docker

(3)从新加载配置并启动

systemctl daemon-reload
systemctl start docker

(4)再次查看 Docker 镜像的目录,如下所示。

[root@localhost ~]# docker info | grep "Docker Root Dir"
Docker Root Dir: /home/docker

此时,Docker 镜像目录迁徙胜利。

Kafka 集群能够长期应用了,先让数据跑起来。于是我又重新分配了服务器,搭建好 Kafka 集群,中午把测试环境迁徙到新的 Kafka 集群上。目前还在测试中。。。

小伙伴们学会了吗?

PS: 我应用的服务器操作系统版本如下。

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core) 

应用的 Docker 版本如下。

[root@localhost ~]# docker info
Client:
 Debug Mode: false
Server:
 Containers: 4
  Running: 3
  Paused: 0
  Stopped: 1
 Images: 33
 Server Version: 19.03.8
############ 其余输入信息略 ############

最初,跟小伙伴们简略说下,为啥开始我须要运维小伙伴给 Kafka 集群的服务器硬盘设置的大一些呢?

因为咱们生产环境的流量是比拟大的,平时根本都在 5 万~8 万 QPS,如果遇到高峰期,会远比这些流量大的多。过后,我是在生产环境分了一部分流量到测试环境。如果 Kafka 集群的磁盘不设置的大一些的话,当 Kafka 消费者性能降落或者因为其余起因,造成音讯在 Kafka 中沉积的话,会造成 Kafka 占用大量的磁盘空间。如果磁盘空间满了的话,那么 Kafka 所在的服务器就会解体,宕机。

好了,明天就到这儿吧,我是冰河,大家有啥问题能够在下方留言,一起交换技术,一起进阶,一起进大厂~~

退出移动版