大家好,我是冰河~~

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

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

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

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

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

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

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

心里再怎么无语,也要解决问题啊!于是我赶紧登录服务器,在服务器命令行执行命令,将当前服务器终端所在的目录切换到Docker镜像默认的目录下。

  1. [root@localhost ~]# cd /var/lib/docker

结果却报错了,报错信息如下所示。

  1. [root@localhost ~]# ls -bash: 无法为立即文档创建临时文件: 设备上没有空间
  2. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  3. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  4. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  5. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  6. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  7. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  8. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  9. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  10. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  11. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  12. -bash: 无法为立即文档创建临时文件: 设备上没有空间
  13. -bash: 无法为立即文档创建临时文件: 设备上没有空间

无法切换目录了。咋办?我下意识的看下服务器的磁盘情况,结果一看出事了。

  1. [root@localhost ~]# df -lh
  2. 文件系统 容量 已用 可用 已用% 挂载点
  3. devtmpfs 3.8G 0 3.8G 0% /dev
  4. tmpfs 3.9G 0 3.9G 0% /dev/shm
  5. tmpfs 3.9G 82M 3.8G 3% /run
  6. tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
  7. /dev/mapper/localhost-root 50G 50G 0G 100% /
  8. /dev/sda1 976M 144M 766M 16% /boot
  9. /dev/mapper/localhost-home 53G 5G 48G 91% /home
  10. tmpfs 779M 0 779M 0% /run/user/0
  11. overlay 50G 50G 0G 100% /var/lib/docker/overlay2/d51b7c0afcc29c49b8b322d1822a961e6a86401f0c6d1c29c42033efe8e9f070/merged
  12. overlay 50G 50G 0G 100% /var/lib/docker/overlay2/0e52ccd3ee566cc16ce4568eda40d0364049e804c36328bcfb5fdb92339724d5/merged
  13. overlay 50G 50G 0G 100% /var/lib/docker/overlay2/16fb25124e9b85c7c91f271887d9ae578bf8df058ecdfece24297967075cf829/merged

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

  1. overlay 50G 50G 0G 100% /var/lib/docker/overlay2/d51b7c0afcc29c49b8b322d1822a961e6a86401f0c6d1c29c42033efe8e9f070/merged
  2. overlay 50G 50G 0G 100% /var/lib/docker/overlay2/0e52ccd3ee566cc16ce4568eda40d0364049e804c36328bcfb5fdb92339724d5/merged
  3. 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默认镜像安装目录。

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

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

  1. systemctl stop docker

或者

  1. service docker stop

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

  1. mv /var/lib/docker /home

这个过程可能时间比较长。

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

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

(5)最后,我们启动Docker服务器。

  1. systemctl start docker

或者

  1. service docker start

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

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

此时,Docker镜像目录迁移成功。

接下来,我们再说说修改配置法。

2.修改配置法

指定镜像和容器存放路径的参数是 –graph=/var/lib/docker ,我们只需要修改配置文件指定启动参数即可。

这里,我使用的服务器操作系统是CentOS。所以,可以通过如下方式方式修改了Docker的配置。

(1)停止Docker服务

  1. systemctl stop docker

或者

  1. service docker stop

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

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

在启动文件中增加如下一行代码。

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

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

  1. systemctl daemon-reload
  2. systemctl start docker

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

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

此时,Docker镜像目录迁移成功。

Kafka集群可以临时使用了,先让数据跑起来。于是我又重新分配了服务器,搭建好Kafka集群,中午把测试环境迁移到新的Kafka集群上。目前还在测试中。。。

小伙伴们学会了吗?

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

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

使用的Docker版本如下。

  1. [root@localhost ~]# docker info
  2. Client:
  3. Debug Mode: false
  4. Server:
  5. Containers: 4
  6. Running: 3
  7. Paused: 0
  8. Stopped: 1
  9. Images: 33
  10. Server Version: 19.03.8
  11. ############其他输出信息略############

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

因为我们生产环境的流量是比较大的,平时基本都在5万~8万QPS,如果遇到高峰期,会远比这些流量大的多。当时,我是在生产环境分了一部分流量到测试环境。如果Kafka集群的磁盘不设置的大一些的话,当Kafka消费者性能下降或者由于其他原因,造成消息在Kafka中堆积的话,会造成Kafka占用大量的磁盘空间。如果磁盘空间满了的话,那么Kafka所在的服务器就会崩溃,宕机。

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

记一次Kafka服务器宕机的真实经历!!的更多相关文章

  1. 服务器宕机了,Kafka 消息会丢失吗?

    大家好,我是树哥. 消息队列可谓是高并发下的必备中间件了,而 Kafka 作为其中的佼佼者,经常被我们使用到各种各样的场景下.随着 Kafka 而来得,还有三个问题:消息丢失.消息重复.消息顺序.今天 ...

  2. PHP载入GIF图像造成服务器宕机(CVE-2018-5711)的漏洞复现

    参考链接: http://www.freebuf.com/vuls/161262.html 今日看新漏洞发现一个UC编辑部的标题,CVE-2018-5711:一张GIF图片就能让服务器宕机的PHP漏洞 ...

  3. 远离服务器宕机,腾讯WeTest正式推出服务器深度性能测试服务

    WeTest 导读 随着城市发展趋向智慧化,不仅移动互联网应用正迅速融入出行.金融.医疗.娱乐等传统行业,跟随移动互联网成长起来的,还有用户对应用使用与消费的理性意识. 而在用户不断增加的同时,如何避 ...

  4. linux服务器宕机分析/性能瓶颈分析

    linux服务器宕机分析/性能瓶颈分析   服务器宕机原因很多,资源不足.应用.硬件.系统内核bug等,以下一个小例子 服务器宕机了,首先得知道服务器宕机的时间点,然后分析日志查找原因 1.last ...

  5. 服务器宕机,mysql无法启动,job for mysql.service failed because the process exited with error code,数据库备份与恢复

    [问题现象] 服务器在运行过程中,因人为意外导致电源被拔,服务器宕机,mysql重启不成功,报错如下 根据提示,输入systemctl status mysql.service和journalctl ...

  6. nginx解决服务器宕机、解决跨域问题、配置防盗链、防止DDOS流量攻击

    解决服务器宕机 配置nginx.cfg配置文件,在映射拦截地址中加入代理地址响应方案 location / { proxy_connect_timeout 1; proxy_send_timeout ...

  7. Nginx配置服务器宕机策略

    Nginx解决服务器宕机问题,Nginx配置服务器宕机策略,如果服务器宕机,会找下一台机器进行访问        配置nginx.cfg配置文件,在映射拦截地址中加入代理地址响应方案 location ...

  8. Nginx解决服务器宕机问题

    1.Nginx解决服务器宕机问题,Nginx配置服务器宕机策略,如果服务器宕机,会找下一台机器进行访问 配置nginx.cfg配置文件,在映射拦截地址中加入代理地址响应方案 location / { ...

  9. 【故障公告】redis 服务器宕机引发博客站点故障

    非常抱歉,今天下午 17:10~17:40 左右,由于博客系统所使用的 redis 服务器宕机,造成博客站点无法正常访问,由此给您带来很大的麻烦,请您谅解. 我们会针对这次故障改进 redis 服务器 ...

随机推荐

  1. 复习git

    git 常用点,详解 from my typora 文章目录 git 常用点,详解 git 模式解析 删除文件 方式一: 方式二: 远程库 配置忽略文件 查看版本库日志,以及版本回退 解决冲突 替换我 ...

  2. 参数化SQL

    原文:http://www.cnblogs.com/aito/archive/2010/08/25/1808569.html 避免SQL注入的方法有两种:一是所有的SQL语句都存放在存储过程中,这样不 ...

  3. vue 基础入门(一)

    app-1 :声明式渲染 app-2 :绑定元素特性 v-bind 特性被称为指令.指令带有前缀 v-,以表示它们是 Vue 提供的特殊特性. app-3 app-4 :条件与循环 app-5 ,ap ...

  4. Mysql You can't specify target table 'newsalrecord' for update in FROM clause

    这个问题是不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值.解决办法就是建立个临时的表.

  5. LeetCode通关:连刷三十九道二叉树,刷疯了!

    分门别类刷算法,坚持,进步! 刷题路线参考:https://github.com/youngyangyang04/leetcode-master 大家好,我是拿输出博客来督促自己刷题的老三,这一节我们 ...

  6. 程序解决十苹果问题 Java

    程序解决十苹果问题 Java 题目:10个苹果,其中有9个重量相同,剩余1个相比其它重量不同(或重或轻,不得而知),使用天平比较三次,找出重量特殊的那一个 import org.junit.Test; ...

  7. RHCS集群架构之mysql及共享存储iscsi

    server1 172.25.7.1(配置Nginx.ricci和luci) server2 172.25.7.2(Apache.iscsi) server3 172.25.7.3(Apache) s ...

  8. LVS实现(VS/DR)负载均衡和Keepalived高可用

    LVS是Linux Virtual Server的简写即Linux虚拟服务器,是一个虚拟的服务器集群系统一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(Load ...

  9. sqlite数据库的基本用法及C语言的API接口简介

    ********************sqlite数据库******************** http://www.sqlite.org/c3ref/intro.html 1-- 安装数据库: ...

  10. AspectJ基于xml和基于注解

    一.基于xml 执行的切入点中具体方法有返回值,则方法结束会立即执行后置通知,然后再执行环绕通知的放行之后的代码: 2.连接点即所有可能的方法,切入点是正真被切的方法,连接点方法名: 其中,只有环绕通 ...