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