国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ceph入門到精通-Linux下Ceph源碼編譯和GDB調(diào)試

這篇具有很好參考價值的文章主要介紹了Ceph入門到精通-Linux下Ceph源碼編譯和GDB調(diào)試。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Ceph版本:14.2.22
Linux版本:ubuntu-server 18.04

?
?

第一部分 下載Ceph源碼

1.1 配置Ceph源碼鏡像源

Ceph源碼是托管在Github上,由于某些原因,國內(nèi)訪問Github網(wǎng)站很慢,所以需要從其他途徑加速獲取源碼。Github官方給出了幾個Github的鏡像網(wǎng)站:

  1. https://github.com.cnpmjs.org/
  2. https://hub.fastgit.org/

本地需要修改~/.gitconfig文件,才可以從上面鏡像網(wǎng)站獲取源碼,相關(guān)配置如下:

#Github鏡像源
[url "https://hub.fastgit.org/"]
        insteadOf = https://github.com/

注:國內(nèi)也有Ceph源碼的鏡像,比如Gitee、Gitcode,但不建議從這些網(wǎng)站上獲取。因為Ceph源碼中使用了大量的第三方源碼作為自己的子模塊,而Gitee、Gitcode不一定將這些子模塊全部同步過來。相反,上面的兩個鏡像網(wǎng)站和Github完全是同步的,所以可以放心使用。

1.2 克隆ceph源碼

Ceph源碼很大,可根據(jù)需要,選擇性下載哪個版本或哪個分支。本案例拉取v14.2.22版本的源碼。版本和分支的區(qū)別:版本的代碼不會隨時間改變,被定格在打標(biāo)簽的那一刻;分支的代碼會隨時間不斷開發(fā)改變。

# 根據(jù)自己需要更換 v14.2.22 為自己需要的版本
git clone -b v14.2.22 --depth=1 https://github.com/ceph/ceph.git

1.3 同步子模塊源碼

Ceph源碼中使用大量的子模塊,在 ceph/.gitmodules 文件中羅列出所有的子模塊。在后面執(zhí)行do_cmake.sh 腳本生成 build 目錄時,do_cmake.sh 首先同步子模塊源碼到指定目錄。根據(jù)經(jīng)驗,在同步子模塊源碼時很容易出現(xiàn)同步不全,或同步失敗,這直接會導(dǎo)致構(gòu)建 build 目錄失敗。為了防止此狀況發(fā)生,建議提前手動去同步子模塊源碼。

git submodule update --init --recursive

注:如果發(fā)現(xiàn)同步子模塊源碼失敗,重復(fù)執(zhí)行上面命令即可。如果中斷同步子模塊源碼,此時必須要到相應(yīng)目錄下刪除該子模塊所有文件,尤其是 .git 文件。如果不刪除 .git,重復(fù)執(zhí)行上面命令時,則會直接跳過同步該子模塊,導(dǎo)致子模塊源碼缺失。這個問題無法被檢測到,因為執(zhí)行完上面命令后,依然會顯示同步成功,而不會提示哪個子模塊沒有被同步。
?
?

第二部分 源碼編譯

2.1 安裝依賴

Ceph源碼安裝依賴很簡單,直接執(zhí)行源碼根目錄下install-deps.sh腳本,根據(jù)經(jīng)驗發(fā)現(xiàn),該腳本存在一些問題,需要稍微修改一下。

2.1.1 修改launchpad源

腳本會安裝gcc環(huán)境,安裝包源url只需要保留一個即可,修改install-deps.sh腳本中的函數(shù)ensure_decent_gcc_on_ubuntu

deb [lang=none] http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu $codename main
#deb [arch=amd64 lang=none] http://mirror.cs.uchicago.edu/ubuntu-toolchain-r $codename main
#deb [arch=amd64,i386 lang=none] http://mirror.yandex.ru/mirrors/launchpad/ubuntu-toolchain-r $codename main

2.1.2 屏蔽調(diào)用安裝libboost的部分

腳本會安裝 libboost 庫,編譯源碼過程會再次下載 boost 源碼包,因此腳本中不應(yīng)該再安裝 libboost,屏蔽install-deps.sh以下2個地方

 *Bionic*)
        #install_boost_on_ubuntu bionic
  ;;

2.1.3 設(shè)置pypi鏡像源

腳本會安裝pypi庫,默認(rèn)url下載很慢,需要設(shè)置pypi庫鏡像源。創(chuàng)建 ~/.pip/pip.conf 文件,并追加以下內(nèi)容

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

2.1.4 安裝其他依賴

編譯源碼過程中會遇到很多函數(shù)用到zstd庫,默認(rèn)情況下ubuntu18.04只安裝了libzstd1,但沒有用,需要安裝 libzstd1-dev

sudo apt install libzstd1-dev

2.1.5 執(zhí)行腳本

./install-deps.sh

2.2 編譯Ceph源碼

2.2.1 開啟debug模式

如果想要調(diào)試Ceph源碼,需要設(shè)置編譯源碼模式為debug模式,默認(rèn)編譯模式為release模式,該模式是不能調(diào)試源碼。向 ceph/CMakeList 文件的 set(VERSION 14.2.22) 后追加以下內(nèi)容

set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -Wall -g")
set(CMAKE_CXX_FLAGS "-O0 -Wall -g")
set(CMAKE_C_FLAGS "-O0 -Wall -g ")

2.2.2 構(gòu)建build目錄

直接執(zhí)行do_cmake腳本,該腳本會進行一系列檢測,包括源碼是不是完整,依賴是不是都安裝了等等。如果出現(xiàn)問題,構(gòu)建出的build目錄是不完整的,最直接的影響是無法生成makefile文件,導(dǎo)致無法編譯。

./do_cmake.sh

2.2.3 下載boost源碼包

在執(zhí)行make編譯的時候,腳本會自動下載 boost_1_72_0.tar.bz2,由于下載地址和網(wǎng)絡(luò)問題,下載很慢,為了節(jié)省時間,提前手動下載,下載地址:https://download.ceph.com/qa/boost_1_72_0.tar.bz2,將下載的好的包放在ceph/build/boost/src即可。

2.2.4 編譯

使用make編譯必須要到ceph/build目錄下執(zhí)行,ceph源碼可以單獨編譯某一個模塊,也可以全部編譯。使用make可以指定多線程編譯,提高編譯速度,但要合理分配線程數(shù),建議使用4線程編譯即可。

#方式1:全部編譯
make all -j4
#方式2:單獨編譯osd某塊
make ceph-osd -j4
#查看所有模塊
make help

注:源碼編譯會生成很多庫文件和二進制文件,分別放在ceph/build/lib和ceph/build/bin目錄下
?
?

第三部分 部署Debug版本的集群

3.1 集群部署

Cpeh源碼提供了一個部署開發(fā)集群的腳本:vstart.sh,該腳本會利用本地IP和不同端口來配置MON、MGR、OSD等。切換到切換到build目錄下,執(zhí)行以下命令,部署一個新的集群

MON=1 OSD=6 MDS=0 MGR=1 RGW=0 ../src/vstart.sh -d -n  -x  --without-dashboard

參數(shù)解釋:

  1. MON、 OSD、 MDS、 MGR是配置相應(yīng)的個數(shù)
  2. -d:debug,開啟debug模式
  3. -n:new,新建一個集群
  4. -x:cephx,cephx認(rèn)證
  5. --without-dashboard,mgr的一個配置,自測發(fā)現(xiàn)如果這個不關(guān)閉,部署會報錯

3.2 查看集群狀態(tài)

切換到build目錄下,執(zhí)行以下命令,查看集群狀態(tài)

./bin/ceph -s 

結(jié)果如下

  cluster:
    id:     88b11a21-7dd1-49d8-bb24-c18821ff09ae
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum a (age 5m)
    mgr: x(active, since 5m)
    osd: 6 osds: 6 up (since 4m), 6 in (since 4m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   12 GiB used, 594 GiB / 606 GiB avail
    pgs:   

注:ceph 14.2.22版本的vstart.sh腳本并沒有將ceph可執(zhí)行文件添加到系統(tǒng)環(huán)境變量中,所有的ceph命令都必須在build目錄下執(zhí)行

3.3 部署ceph分級存儲結(jié)構(gòu)

本案例需要調(diào)試ceph分級存儲功能,因此簡單的搭建一個分層存儲結(jié)構(gòu)。為集群分配6個OSD,創(chuàng)建2個pool,cache pool和ec pool,每個pool分配了3個osd。
詳細(xì)部署請參考(文章還在編寫中)
?
?

第四部分 代碼調(diào)試

4.1 查看PG-OSD映射關(guān)系

如果仔細(xì)閱讀源碼,會發(fā)現(xiàn)ceph分級存儲主要是由主OSD進程來負(fù)責(zé)。如果不是主OSD,是無法調(diào)試到代碼中的。所以需要查看分級存儲中緩存池的PG映射關(guān)系。

#切換到build目錄下,執(zhí)行以下命令
./bin/ceph pg ls-by-pool cache_pool

PG  OBJECTS DEGRADED MISPLACED UNFOUND BYTES OMAP_BYTES* OMAP_KEYS* LOG STATE        SINCE VERSION REPORTED UP        ACTING    SCRUB_STAMP                DEEP_SCRUB_STAMP           
5.0       0        0         0       0     0           0          0  18 active+clean   22h  323'18   323:76 [2,4,0]p2 [2,4,0]p2 2021-09-25 16:55:28.572062 2021-09-24 11:30:14.717641 

從結(jié)果可以看到PG5.0對應(yīng)的主OSD為OSD 2

4.2 查看主OSD進程

執(zhí)行以下命令

ps -ef | grep ceph

結(jié)果如下

admins   10961 19680  0 15:12 pts/0    00:00:00 grep --color=auto ceph
admins   18474     1  1 Sep24 ?        01:02:09 /home/admins/code/ceph/build/bin/ceph-mon -i a -c /home/admins/code/ceph/build/ceph.conf
admins   18582     1  1 Sep24 ?        00:33:41 /home/admins/code/ceph/build/bin/ceph-mgr -i x -c /home/admins/code/ceph/build/ceph.conf
admins   18806     1  1 Sep24 ?        00:41:15 /home/admins/code/ceph/build/bin/ceph-osd -i 1 -c /home/admins/code/ceph/build/ceph.conf
admins   19096     1  1 Sep24 ?        00:41:06 /home/admins/code/ceph/build/bin/ceph-osd -i 3 -c /home/admins/code/ceph/build/ceph.conf
admins   19242     1  1 Sep24 ?        00:40:37 /home/admins/code/ceph/build/bin/ceph-osd -i 4 -c /home/admins/code/ceph/build/ceph.conf
admins   19415     1  1 Sep24 ?        00:41:00 /home/admins/code/ceph/build/bin/ceph-osd -i 5 -c /home/admins/code/ceph/build/ceph.conf
admins   20385     1  1 Sep24 ?        00:39:47 /home/admins/code/ceph/build/bin/ceph-osd -i 0 -c /home/admins/code/ceph/build/ceph.conf
admins   22235     1  1 Sep24 ?        00:40:24 /home/admins/code/ceph/build/bin/ceph-osd -i 2 -c /home/admins/code/ceph/build/ceph.conf

從結(jié)果可以看到,主OSD進程號為?22235

4.3 GDB多線程調(diào)試

關(guān)于linux gdb多線程調(diào)試具體用法這里就不多介紹,需要學(xué)習(xí)了解的,請百度。以下僅為本案例調(diào)試步驟

4.3.1 進入gdb模式

gdb調(diào)試需要以管理員權(quán)限,執(zhí)行以下命令,進入gdb模式

sudo gdb

結(jié)果如下

[sudo] password for admins: 
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) 

4.3.2 attach osd2 進程

(gdb) attach 22235
Attaching to process 22235
[New LWP 22237]
[New LWP 22238]
[New LWP 22239]
[New LWP 22248]
[New LWP 22249]
[New LWP 22250]
[New LWP 22251]
[New LWP 22254]
[New LWP 22255]
[New LWP 22256]
[New LWP 22257]
[New LWP 22258]
[New LWP 22259]
[New LWP 22260]
[New LWP 22269]
[New LWP 22270]
[New LWP 22271]
........
........
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007fd026a7dad3 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55b3123d8910) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
88        ../sysdeps/unix/sysv/linux/futex-internal.h: No such file or directory.
(gdb)

4.3.3 設(shè)置斷點

#本例斷電設(shè)置在PrimaryLogPG::do_op函數(shù)開始
(gdb) b PrimaryLogPG.cc:1952
Breakpoint 1 at 0x55b305d28af2: file /home/admins/code/ceph/src/osd/PrimaryLogPG.cc, line 1952.

#設(shè)置完斷電之,執(zhí)行continue
(gdb) c
Continuing.

4.3.4 測試

向存儲池中寫入數(shù)據(jù),測試結(jié)果如下

[Switching to Thread 0x7fd0034cb700 (LWP 22364)]
Thread 57 "tp_osd_tp" hit Breakpoint 1, PrimaryLogPG::do_op (this=0x55b312519400, op=...) 
at /home/admins/code/ceph/src/osd/PrimaryLogPG.cc:1952
1952        {

從上面結(jié)果可以看到,當(dāng)寫入數(shù)據(jù)時,函數(shù)停在代碼的1952行,現(xiàn)在就可以使用gdb命令進行代碼調(diào)試,和正常調(diào)試代碼一樣。但需要值得注意的一點是,由于ceph osd存在心跳機制,當(dāng)調(diào)試某一個osd時,如果長時間沒有走完該走的流程,該osd會被標(biāo)記為down,就無法再繼續(xù)調(diào)試。需要重新進入gdb模式!文章來源地址http://www.zghlxwxcb.cn/news/detail-651555.html

到了這里,關(guān)于Ceph入門到精通-Linux下Ceph源碼編譯和GDB調(diào)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 『Linux從入門到精通』第 ? 期 - Linux調(diào)試器——gdb使用詳解

    『Linux從入門到精通』第 ? 期 - Linux調(diào)試器——gdb使用詳解

    ??作者簡介: 花想云 ,在讀本科生一枚,致力于 C/C++、Linux 學(xué)習(xí)。 ?? 專欄簡介:本文收錄于 C語言初階專欄 ,本專欄主要內(nèi)容為本專欄主要內(nèi)容為Linux的系統(tǒng)性學(xué)習(xí),專為小白打造的文章專欄。 ?? 相關(guān)專欄推薦: C語言初階系列 、 C語言進階系列 、 C++系列 、 數(shù)據(jù)結(jié)構(gòu)

    2024年02月02日
    瀏覽(28)
  • Ceph入門到精通-Ceph版本升級命令

    Cephadm 可以安全地將 Ceph 從一個錯誤修復(fù)版本升級到下一個錯誤修復(fù)版本。為 例如,你可以從v15.2.0(第一個八達(dá)通版本)升級到下一個 點發(fā)布,v15.2.1。 自動升級過程遵循 Ceph 最佳實踐。例如: 升級順序從管理器、監(jiān)視器開始,然后是其他守護程序。 每個守護程序僅在 Ce

    2024年02月10日
    瀏覽(18)
  • Ceph入門到精通-使用 Ceph 編排器管理 OSD

    作為存儲管理員,您可以使用 Ceph 編排器來管理紅帽 Ceph 存儲集群的 OSD。 當(dāng)紅帽 Ceph 存儲集群啟動并運行時,您可以在運行時將 OSD 添加到存儲集群。 Ceph OSD 通常由一個存儲驅(qū)動器的一個守護進程及其節(jié)點中的關(guān)聯(lián)日志組成。如果節(jié)點有多個存儲驅(qū)動器,則為每個驅(qū)動器映

    2024年02月05日
    瀏覽(29)
  • Ceph入門到精通-Ceph PG狀態(tài)詳細(xì)介紹(全)

    本文主要介紹PG的各個狀態(tài),以及ceph故障過程中PG狀態(tài)的轉(zhuǎn)變。 Ceph is still creating the placement group. Ceph 仍在創(chuàng)建PG。 activating The placement group is peered but not yet active. PG已經(jīng)互聯(lián),但是還沒有active。 active Ceph will process requests to the placement group. Ceph 可處理到此PG的請求。 clean Ceph re

    2024年02月14日
    瀏覽(22)
  • Ceph入門到精通-ceph故障處理 - osd down處理

    發(fā)現(xiàn)osd掉之后,我們首先要確認(rèn)是哪個主機的哪塊盤,來判斷是這個盤壞了還是什么原因 來看一下是哪兩塊 登錄對應(yīng)機器確認(rèn)下是哪塊盤 2.我們發(fā)現(xiàn)盤還在,首先嘗試能否重啟ceph-osd服務(wù) ,這里已經(jīng)拉起來了 3.如果重啟無望或者盤漂移,重新卸載安裝 3.1 看看日志 是不是有

    2024年02月01日
    瀏覽(18)
  • Ceph入門到精通-podman 入門實戰(zhàn)

    Ceph入門到精通-podman 入門實戰(zhàn)

    目錄 podman安裝 podman制作本地鏡像 podman(docker)命令回顧 podman快速入門 一入編程深似海,從此節(jié)操是路人。 最近使用podman,就想著寫一篇總結(jié)性的筆記,以備后續(xù)參考。就如同寫代碼,不寫注釋,過了一段時間可能會想這是我寫的嗎?不會吧,還要理一下邏輯才能讀懂,不利

    2023年04月24日
    瀏覽(21)
  • Ceph入門到精通-sysctl參數(shù)優(yōu)化

    sysctl.conf ?是一個文件,通常用于在 Linux 操作系統(tǒng)中配置內(nèi)核參數(shù)。這些參數(shù)可以控制網(wǎng)絡(luò)、文件系統(tǒng)、內(nèi)存管理等各方面的行為。 99-xx.yml ?可能是一個文件名,其中? 99- ?是一個特定的命名約定。在? sysctl.conf ?文件中,通常會有一個特定的順序來加載配置項。通常,以?

    2024年02月10日
    瀏覽(17)
  • Ceph入門到精通-創(chuàng)建存儲桶通知

    在存儲桶級別創(chuàng)建存儲桶通知。這些需要 與發(fā)送存儲桶通知的目標(biāo)一起發(fā)布。桶 通知是 S3 操作。 父主題: 存儲桶管理 運行 IBM Storage Ceph 集群,帶有 Ceph Object Gateway。 正在運行的 HTTP 服務(wù)器、RabbitMQ 服務(wù)器或 Kafka 服務(wù)器。 根級訪問。 用戶訪問密鑰和私有密鑰。 終結(jié)點參數(shù)

    2024年02月15日
    瀏覽(58)
  • Ceph入門到精通-LVS基礎(chǔ)知識

    Ceph入門到精通-LVS基礎(chǔ)知識

    LB集群: ???(Load??Balancing)即負(fù)載均衡集群,其目的是為了提高訪問的并發(fā)量及提升服務(wù)器的性能,其 ???實現(xiàn)方式分為硬件方式和軟件方式。 ??硬件實現(xiàn)方式: ????????常用的有 F5公司的BIG-IP系列、A10公司的AX系列、Citrix公司的 NetScaler系列等 ??軟件實現(xiàn)方式: ??

    2024年02月11日
    瀏覽(22)
  • Ceph入門到精通-更換osd、擴容osd

    1. 1 查看故障盤osd id 1.2 銷毀osd 1.3 更換故障硬盤 1.4 查看新硬盤盤符 1.5 擦除新硬盤 1.6 預(yù)備替換原osd 1.7 查看osd fsid 1.8 激活osd 3.1 停止所有osd服務(wù) 3.2 銷毀所有osd 3.3 擦除磁盤數(shù)據(jù) 3.4 清除crush數(shù)據(jù) 3.5 刪除osd應(yīng)用 4. 調(diào)整PG

    2024年02月19日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包