大家好,我是冰河~~
估計節前前祭拜服務器不靈了,年后服務器總是或多或少的出現點問題。不知是人的問題,還是風水問題。昨天下班時,跟運維小伙伴交代了好幾遍:如果使用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所在的服務器就會崩潰,宕機。
好了,今天就到這兒吧,我是冰河,大家有啥問題可以在下方留言,一起交流技術,一起進階,一起進大廠~~