ceph分布式存儲-日志和調(diào)試

1. 介紹

一般來說,你應(yīng)該在運行時增加調(diào)試選項來調(diào)試問題;也可以把調(diào)試選項添加到 Ceph 配置文件里來調(diào)試集群啟動時的問題,然后查看 /var/log/ceph (默認(rèn)位置)下的日志文件。

Tip: 調(diào)試輸出會拖慢系統(tǒng),這種延時有可能掩蓋競爭條件。

日志記錄是資源密集型任務(wù)。如果你碰到的問題在集群的某個特定區(qū)域,只啟用那個區(qū)域?qū)?yīng)的日志功能即可。例如,你的 OSD 運行良好、元數(shù)據(jù)服務(wù)器卻有問題,這時應(yīng)該先打開那個可疑元數(shù)據(jù)服務(wù)器實例的調(diào)試日志;如果不行再打開各子系統(tǒng)的日志。

重要: 詳盡的日志每小時可能超過 1GB ,如果你的系統(tǒng)盤滿了,這個節(jié)點就會停止工作。

如果你要打開或增加 Ceph 日志級別,確保有足夠的系統(tǒng)盤空間。滾動日志文件的方法見下面的 加快日志更迭 小節(jié)。集群穩(wěn)定運行后,可以關(guān)閉不必要的調(diào)試選項以優(yōu)化運行。集群在運行中記錄調(diào)試輸出信息會拖慢系統(tǒng)、且浪費資源。

2. 運行時

如果你想在運行時查看某一進(jìn)程的配置,必須先登錄對應(yīng)主機,然后執(zhí)行命令:

    ceph daemon {daemon-name} config show | less

例如:

    ceph daemon osd.0 config show | less

要在運行時激活 Ceph 的調(diào)試輸出(即 dout() ),用 ceph tell 命令把參數(shù)注入運行時配置:

    ceph tell {daemon-type}.{daemon id or *} injectargs --{name} {value} [--{name} {value}]

osd 、 monmds 替代 {daemon-type} 。還可以用星號( * )把配置應(yīng)用到同類型的所有守護(hù)進(jìn)程,或者指定具體守護(hù)進(jìn)程的 ID 。例如,要給名為 ods.0ceph-osd 守護(hù)進(jìn)程提高調(diào)試級別,用下列命令:

    ceph tell osd.0 injectargs --debug-osd 0/5

ceph tell 命令會通過 monitor 起作用。如果你不能綁定 monitor,仍可以登錄你要改的那臺主機然后用 ceph daemon 來更改。例如:

    sudo ceph daemon osd.0 config set debug_osd 0/5

3. 啟動時

要在啟動時激活調(diào)試輸出(即 dout() ),你得把選項加入配置文件。各進(jìn)程共有配置可寫在配置文件的 [global] 段下,某類進(jìn)程的配置可寫在對應(yīng)的守護(hù)進(jìn)程段下(如 [mon] 、 [osd][mds] )。例如:

    [global]
            debug ms = 1/5

    [mon]
            debug mon = 20
            debug paxos = 1/5
            debug auth = 2

    [osd]
            debug osd = 1/5
            debug filestore = 1/5
            debug journal = 1
            debug monc = 5/20

    [mds]
            debug mds = 1
            debug mds balancer = 1
            debug mds log = 1
            debug mds migrator = 1

4. 加快日志更迭

如果你的系統(tǒng)盤比較滿,可以修改 /etc/logrotate.d/ceph 內(nèi)的日志滾動配置以加快滾動。在滾動頻率后增加一個日志 size 選項(達(dá)到此大小就滾動)來加快滾動(通過 cronjob )。例如默認(rèn)配置大致如此:

    rotate 7
    weekly
    compress
    sharedscripts

增加一個 size 選項。

    rotate 7
    weekly
    size 500M
    compress
    sharedscripts

然后,打開 crontab 編輯器。

    crontab -e

最后,增加一條用以檢查 /etc/logrorate.d/ceph 文件的語句。

    30 * * * * /usr/sbin/logrotate /etc/logrotate.d/ceph >/dev/null 2>&1

本例中每 30 分鐘檢查一次 /etc/logrorate.d/ceph 文件。

5. VALGRIND 工具

調(diào)試時可能還需要追蹤內(nèi)存和線程問題。你可以在 Valgrind 中運行單個守護(hù)進(jìn)程、一類進(jìn)程、或整個集群。 Valgrind 是計算密集型程序,應(yīng)該只用于開發(fā)或調(diào)試 Ceph,否則它會拖慢系統(tǒng)。Valgrind 的消息會記錄到 stderr 。

6. 子系統(tǒng)、日志和調(diào)試選項

大多數(shù)情況下,你可以通過子系統(tǒng)打開調(diào)試日志輸出。

6.1 CEPH 子系統(tǒng)概覽

各子系統(tǒng)都有日志級別用于分別控制其輸出日志和暫存日志(內(nèi)存中),你可以分別為這些子系統(tǒng)設(shè)置不同的記錄級別。 Ceph 的日志級別從 1 到 20 , 1 是簡潔、 20 是詳盡。通常,內(nèi)存駐留日志不會發(fā)送到輸出日志,除非:

  • 致命信號出現(xiàn),或者
  • 源碼中的 assert 被觸發(fā),或者
  • 明確要求發(fā)送。

調(diào)試選項允許用單個數(shù)字同時設(shè)置日志級別和內(nèi)存級別,這會將二者設(shè)置為一樣的值。比如,如果你指定 debug ms = 5 , Ceph 會把日志級別和內(nèi)存級別都設(shè)置為 5 。也可以分別設(shè)置,第一個選項是日志級別、第二個是內(nèi)存級別,二者必須用斜線( / )分隔。假如你想把 ms 子系統(tǒng)的調(diào)試日志級別設(shè)為 1 、內(nèi)存級別設(shè)為 5 ,可以寫為 debug ms = 1/5 ,如下:

    debug {subsystem} = {log-level}/{memory-level}
    #for example
    debug mds log = 1/20

Ceph 子系統(tǒng)及其默認(rèn)日志和內(nèi)存級別具體見 SUBSYSTEM, LOG AND DEBUG SETTINGS 。一旦你完成調(diào)試,應(yīng)該恢復(fù)默認(rèn)值,或一個適合平常運營的級別。

6.2 日志記錄選項

關(guān)于日志記錄選項的詳細(xì)信息,可以參考 Ceph 官方文檔的對應(yīng)內(nèi)容 LOGGING SETTING 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容