
假設我有一個在多個伺服器之間共享的 glusterfs 掛載,該掛載由應用程式訪問,並且日誌被寫入通常位於該掛載點的目錄樹中的目錄中。 (假設 /foo 是我們安裝的共享存儲,而 /foo/bar 是寫入日誌的目錄)為了防止所有伺服器嘗試寫入同一個日誌文件,我想使 /foo/bar 成為一個符號連結另一個本地目錄/var/bar。是否可以在共享儲存掛載上建立本地符號連結?這些符號連結是否能夠映射到存取該儲存的其他伺服器?或者如果沒有,是否有其他方法可以解決這個問題,例如循環設備?假設無法變更寫入日誌的目錄。
答案1
如果檔案系統支援符號鏈接,則符號連結(根據 POSIX 標準)將在客戶端而不是伺服器上解釋。因此,您應該能夠在任何 Unix 或類 Unix 系統(例如 Linux)上可靠地符號連結到其他檔案系統。
例如:
/foo A gluster remote file system
/var A local file system
如果/foo/bar
是符號鏈接,/var/log/myhost
那麼每台寫入 /foo/bar 的機器都會寫入機器上的本機 /var/log/myhost 。
但是,如果/var/log
不存在,寫入將失敗,並顯示一條令您驚訝的錯誤訊息。 (嘗試一下)所以,請確保/var/log
存在。這不是/var/log
大多數系統中安裝時創建的問題。然而,如果連結很/var/log/dirname/filename.txt
可能/var/log/dirname
還不存在怎麼辦?我以前遇到過這個問題。
(我認為《系統與網路管理實務》第 28 章中有這樣的例子,其中建議從網路檔案系統連結到 /etc/。)
所以,是的,您可以使用符號連結來做到這一點。然而,這可能會讓同事感到困惑。是否可以告訴軟體只寫入/var/log/foo
?它將減少混亂並且更加永續。你的同事會感謝你的。
答案2
這取決於共享檔案系統。但一般來說,如果遠端 FS 支援符號鏈接,它就可以工作。我可以在 gluster 卷上進行符號鏈接,並且沒問題(經過測試)。
答案3
也許您想像這樣設定符號連結?
/foo - Gluster mountpoint
/var/log - local filesystem mountpoint
本機伺服器上的服務配置為登入/foo/log/app.log
.該/foo/log
目錄應該是針對每個伺服器的,但也應該位於 Gluster 磁碟區上,以便其他人可以在需要時檢查日誌。
為此,我建議建立兩個符號連結。在每台伺服器上:
# mkdir /foo/logs/$(hostname)
# ln -s /foo/logs/$(hostname) /var/log/app
在 Gluster 卷上(只需要一次):
# ln -s /var/log/app /foo/log
當應用程式寫入 時/foo/log/app.log
,符號連結/foo/log
解析為/var/log/app
。現在,/var/log/app
是每個伺服器本地檔案系統上的符號鏈接,每個伺服器都指向 Gluster 卷上的不同目錄。因此,/var/log/app
指向/foo/logs/server1.example.com
一台伺服器,並指向/foo/logs/server2.example.com
另一台伺服器。
/foo/log/app.log -> /var/log/app/app.log -> /foo/logs/server1.example.com/app.log