估计五一放假前祭拜服务器不灵了,放假期间服务器总是或多或少的出现点问题。不知是人的问题,还是风水问题。放假前下班时,跟运维小伙伴交代了好几遍:如果使用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
############其他输出信息略############
https://mp.weixin.qq.com/s/iUnRI72uplmlkDldyMPPvA