ceph(第三步) 基本使用

前言

這篇文章解決了什么問(wèn)題:

系統(tǒng)的開(kāi)始使用一個(gè) ceph 集群构订。

整體介紹:

本文將系統(tǒng)的介紹如何使用一個(gè) ceph 集群冕茅。

涉及:crush、osd店茶、pool蜕便、cache

環(huán)境

ceph 版本:nautilus
ceph-deploy 版本:2.0.1

正文

在基本使用需求下,一般需要存儲(chǔ)集群提供高性能存儲(chǔ)(SSD)和普通存儲(chǔ)(hdd)贩幻。

在 ceph 中轿腺,具體表現(xiàn)為某些池使用高性能存儲(chǔ),某些池使用普通存儲(chǔ)丛楚。而這種需求在 ceph 中由 crush 規(guī)則實(shí)現(xiàn)族壳。

ceph 提供了緩存的概念。在普通的存儲(chǔ)池之上架設(shè)一層高性能的緩存池趣些,外部訪問(wèn)首先到達(dá)緩存池仿荆,如果發(fā)生未命中等情況再去訪問(wèn)存儲(chǔ)池。這里需要提一點(diǎn)坏平,并不是任何情況都需要緩存拢操。

針對(duì)不同的場(chǎng)景,ceph 的使用方式多種多樣舶替,這里的介紹只能一切從簡(jiǎn)令境,但是會(huì)盡量全面。

一個(gè)標(biāo)準(zhǔn)的場(chǎng)景:一個(gè)存儲(chǔ)池加一個(gè)緩存池顾瞪,存儲(chǔ)池使用普通設(shè)備舔庶,緩存池使用高性能設(shè)備。

構(gòu)建一個(gè)帶緩存的存儲(chǔ)池

首先添加一塊高性能硬盤(pán)(我這里是虛擬環(huán)境陈醒,只能用普通硬盤(pán)充數(shù))

然后需要利用 crush 讓不同池使用不同的存儲(chǔ)設(shè)備

向集群添加兩塊高性能硬盤(pán)

這里只能拿普通的虛擬硬盤(pán)來(lái)做測(cè)試惕橙。

在 ceph02 虛擬機(jī)上增加一塊 30G 的虛擬硬盤(pán)。
在 ceph03 虛擬機(jī)上增加一塊 30G 的虛擬硬盤(pán)钉跷。

現(xiàn)在到部署節(jié)點(diǎn)進(jìn)行操作:

ceph-deploy osd create --data /dev/sdd ceph02
ceph-deploy osd create --data /dev/sdd ceph03

如圖 ceph02 出現(xiàn)了 osd.6弥鹦,ceph03 出現(xiàn)了 osd.7。

這里涉及到 root (根)的概念尘应,在文章末尾【擴(kuò)展】中會(huì)介紹惶凝。這里可以直接先使用。

將 osd.6 osd.7 加入名稱(chēng)為 cache 的根中(根名稱(chēng)會(huì)自動(dòng)創(chuàng)建犬钢,注意苍鲜,由于默認(rèn)情況下 osd 在啟動(dòng)時(shí)讀取的是 hostname,因此該方法只是臨時(shí)生效玷犹,在文章末尾【擴(kuò)展】中會(huì)介紹永久生效辦法)

# 權(quán)重為 1.0
ceph osd crush set 6 1.0 root=cache host=ceph02-cache
ceph osd crush set 7 1.0 root=cache host=ceph03-cache

“高性能”存儲(chǔ)盤(pán)現(xiàn)在已經(jīng)有了混滔,并且將其置于 cache 根下,這么做的意義在下一步中有體現(xiàn)。

現(xiàn)在可以進(jìn)行下一步了坯屿。

crush 使用

當(dāng)前環(huán)境下已經(jīng)有一個(gè)默認(rèn)的 crush 規(guī)則油湖。

# 查看 crush 規(guī)則列表:
ceph osd crush rule ls

# 列出 crush 規(guī)則詳情:
ceph osd crush rule dump
image.png

具體屬性解釋參考:
https://docs.ceph.com/docs/mimic/rados/operations/crush-map-edits/#crush-map-rules

如上圖劃線處,當(dāng)前規(guī)則只會(huì)使用 default 根的 osd领跛。

前面創(chuàng)建高性能設(shè)備時(shí)乏德,將其設(shè)置根為 cache。我們現(xiàn)在就可以創(chuàng)建一個(gè)只使用 cache 根中的 osd 的規(guī)則吠昭,從而實(shí)現(xiàn)緩存池和存儲(chǔ)池使用不同的設(shè)備喊括。

創(chuàng)建緩存池使用的規(guī)則:

ceph osd crush rule create-replicated replicated_cache cache host

其中:
replicated_cache 指該規(guī)則的名字。
cache 指該規(guī)則使用的根矢棚。
host 指故障域級(jí)別郑什。

再次查看所有規(guī)則:

ceph osd crush rule dump
image.png

現(xiàn)在我們有了一個(gè)只使用高性能存儲(chǔ)設(shè)備的規(guī)則了。接下來(lái)就可以開(kāi)始創(chuàng)建使用不同規(guī)則的池了蒲肋。

創(chuàng)建存儲(chǔ)池

創(chuàng)建存儲(chǔ)池:

# 創(chuàng)建存儲(chǔ)池 pg 為 80蘑拯,規(guī)則指定為 replicated_rule 
ceph osd pool create test_storage 80 replicated_rule 

# 初始化這個(gè)池為 rgw 使用的池
ceph osd pool application enable test_storage rgw 

查看池:

ceph osd lspools

查看該池的規(guī)則:

ceph osd pool get test_storage crush_rule
image.png

存儲(chǔ)池至此已經(jīng)好了。

創(chuàng)建緩存池

緩存池在 ceph 中常以 hot 標(biāo)識(shí)兜粘。
普通存儲(chǔ)池在 ceph 中常以 cold 標(biāo)識(shí)申窘。

緩存有多種形式(官方文檔列出以下幾種,實(shí)際更多):

  1. writeback :回寫(xiě)模式孔轴,這是 ceph 中最常用的一種模式偶洋。寫(xiě)入操作到達(dá)緩存盤(pán)時(shí)立即返回,隨后異步的將緩存盤(pán)中的內(nèi)容同步到存儲(chǔ)盤(pán)中距糖,過(guò)一段時(shí)間這條數(shù)據(jù)會(huì)自動(dòng)的從緩存池中清除。當(dāng)讀取數(shù)據(jù)時(shí)牵寺,緩存代理首先將數(shù)據(jù)從存儲(chǔ)池復(fù)制到緩存池中悍引,然后返回給客戶(hù)端,下一次直接從緩存池中讀取該條數(shù)據(jù)帽氓,同樣的趣斤,這條數(shù)據(jù)在一段時(shí)間內(nèi)沒(méi)被再次讀取會(huì)從緩存池中清除掉。
  2. readproxy :讀代理模式黎休,只會(huì)使用在緩存中已存在的對(duì)象浓领,常用于禁用 writeback 模式時(shí)的一個(gè)過(guò)渡階段。
  3. readonly :只讀模式势腮,讀取對(duì)象時(shí)首先讀取緩存池联贩,如果不存在再去訪問(wèn)存儲(chǔ)池。該模式常用于對(duì)一致性要求不高的環(huán)境捎拯,因?yàn)樗⑿戮彺娉刂械膶?duì)象有一定的滯后性泪幌。
  4. none :無(wú),指禁用緩存。

緩存參考:
https://docs.ceph.com/docs/master/rados/operations/cache-tiering/

創(chuàng)建緩存池

# 創(chuàng)建緩存池 pg 為 80祸泪,規(guī)則指定為 replicated_cache
ceph osd pool create test_cache 80 replicated_cache

# 目前用于緩存的主機(jī)只有2臺(tái)吗浩,所以將緩存池的副本數(shù)調(diào)為2
ceph osd pool set test_cache size 2
ceph osd pool set test_cache min_size 2

# 初始化這個(gè)池為 rgw 使用的池
ceph osd pool application enable test_cache rgw

緩存池創(chuàng)建好以后,要將這個(gè)緩存池與對(duì)應(yīng)存儲(chǔ)池聯(lián)系起來(lái)没隘。這個(gè)聯(lián)系的概念叫做 cache tiering懂扼,可以稱(chēng)之為緩存層,緩存代理右蒲。

參考:
https://docs.ceph.com/docs/master/rados/operations/cache-tiering/

  1. 創(chuàng)建緩存代理
ceph osd tier add test_storage test_cache
  1. 設(shè)置緩存模式
ceph osd tier cache-mode test_cache writeback
  1. 重定向流量到緩存池
ceph osd tier set-overlay test_storage test_cache
  1. 簡(jiǎn)單配置緩存池(基礎(chǔ)使用不具體介紹)
# 以下兩條命令配置緩存池的絕對(duì)大小
# 這兩條配置十分重要阀湿,影響 crush 什么時(shí)候清洗數(shù)據(jù)
# 一條配置緩存池的空間大小,一條配置緩存池的對(duì)象數(shù)量品嚣。
# 當(dāng)擁有多個(gè)緩存池時(shí)炕倘,注意緩存池的總大小不能超過(guò)物理大小。緩存池也有副本的概念翰撑。
ceph osd pool set test_cache target_max_bytes 26843545600
ceph osd pool set test_cache target_max_objects 1000000

ceph osd pool set test_cache hit_set_type bloom
ceph osd pool set test_cache hit_set_count 12
ceph osd pool set test_cache hit_set_period 14400

ceph osd pool set test_cache cache_target_dirty_ratio 0.4
ceph osd pool set test_cache cache_target_dirty_high_ratio 0.6
ceph osd pool set test_cache cache_target_full_ratio 0.8

ceph osd pool set test_cache cache_min_flush_age 600
ceph osd pool set test_cache cache_min_evict_age 1800
測(cè)試緩存

對(duì)于 test_storage 池罩旋,我們有一個(gè)只讀的緩存池了。只要我們讀取 test_storage 中的某個(gè)對(duì)象眶诈,這個(gè)對(duì)象就應(yīng)該自動(dòng)的置于緩存池中一段時(shí)間涨醋。

  1. 上傳對(duì)象到緩存池(不再贅述,在部署文檔中有寫(xiě))
echo 1234 > /tmp/testfile.txt
rados put obj1 /tmp/testfile.txt --pool=test_cache
  1. 查看存儲(chǔ)池
rados ls -p test_storage

可以發(fā)現(xiàn)逝撬,將對(duì)象上傳回寫(xiě)模式的緩存池浴骂,存儲(chǔ)池中也出現(xiàn)了對(duì)應(yīng)的數(shù)據(jù)。

擴(kuò)展

關(guān)于權(quán)重

osd 的大小可能不相同宪潮,因此其上的數(shù)據(jù)量也不應(yīng)該相同溯警,因此引入權(quán)重來(lái)影響數(shù)據(jù)分布。
比如100G的 osd 權(quán)重為1狡相,則200G的 osd 權(quán)重就應(yīng)設(shè)置為2梯轻。

關(guān)于 osd 存儲(chǔ)結(jié)構(gòu)

ceph osd tree 命令可以看到存儲(chǔ)結(jié)構(gòu)【∽兀可以結(jié)合自己機(jī)器執(zhí)行的結(jié)果往下閱讀喳挑。

一張官方圖:


這是描述 ceph 存儲(chǔ)結(jié)構(gòu)的一張圖。

首先這是一個(gè)樹(shù)形結(jié)構(gòu)滔悉。

其中最上層的 root default :root 是根的意思伊诵,default 就是這個(gè)根的名字。

中間 host foo:host 是主機(jī)的意思回官,foo 就是這個(gè)主機(jī)的名字曹宴。這里的主機(jī)名僅僅是個(gè)別稱(chēng),不代表實(shí)際的主機(jī)孙乖,可以隨意更改浙炼。

最下面的就是葉子節(jié)點(diǎn)了份氧,具體指向 osd。

劃分這三層結(jié)構(gòu)的意義(不完全):

  1. 影響數(shù)據(jù)的分布弯屈,比如故障域的概念蜗帜,讓數(shù)據(jù)分布在不同的 osd 上,或者讓數(shù)據(jù)分布在不同的 host 上资厉,或者讓數(shù)據(jù)分布在不同的 root 上厅缺。(一般故障域級(jí)別為 host)
  2. 影響 pool 的數(shù)據(jù)分布,pool 可以指定在哪個(gè) root 上宴偿。根據(jù)這個(gè)特性湘捎,可能讓緩存池使用高性能設(shè)備,普通池使用普通設(shè)備窄刘。

關(guān)于添加 osd

本文使用 ceph-deploy 添加 osd 時(shí)窥妇,并沒(méi)有直接將其設(shè)置到最終根下,后續(xù)還需要手動(dòng)配置娩践。這么操作是不合理的活翩,暫時(shí)未找到 ceph-deploy 指定根的參數(shù)。

關(guān)于緩存

當(dāng)前文章配置的緩存池是2副本的翻伺。

某些時(shí)候材泄,緩存數(shù)據(jù)是允許丟失的,比如只讀的緩存吨岭。這種緩存池單副本即可拉宗,但是經(jīng)測(cè)試,單副本池在 ceph 中似乎困難重重辣辫。

關(guān)于 osd 在重啟后 hostname 重置的解決方案

1. 當(dāng)一個(gè)機(jī)器中的 osd 的 host 名稱(chēng)都為同一個(gè):

可以通過(guò)修改該機(jī)器的 hostname 旦事,一勞永逸

2. 當(dāng)一個(gè)機(jī)器中的 osd 的 host 名稱(chēng)不相同:

這個(gè)時(shí)候,當(dāng)機(jī)器重啟后急灭,該機(jī)器的所有 osd 的 host 名稱(chēng)都一樣了族檬,導(dǎo)致 osd tree 混亂。這個(gè)時(shí)候可以在 ceph.conf 中具體配置某塊盤(pán)的信息化戳。

當(dāng)前環(huán)境配置參考:

  1. 編寫(xiě)配置
    去部署節(jié)點(diǎn)上:
cd /opt/ceph-deploy
vim ceph.conf

增加如下內(nèi)容:

[osd.6]
host = ceph02-cache

[osd.7]
host = ceph03-cache
  1. 同步配置
ceph-deploy --overwrite-conf admin ceph01 ceph02 ceph03

重啟后,一切正常埋凯。

通用解決方案

在 osd 的啟動(dòng)上做文章点楼。
比如,配置 osd 的啟動(dòng)方式白对,容器化 osd掠廓,容器會(huì)記住某些信息,因此可以實(shí)現(xiàn)永久生效 hostname甩恼。

常見(jiàn)問(wèn)題

1. 創(chuàng)建池時(shí)提示 pg 數(shù)過(guò)多

osd 上的 pg 數(shù)量會(huì)對(duì)整體集群性能造成影響蟀瞧,并不是越多越好沉颂,也不是越少越好。

由于池有副本的概念悦污,因此產(chǎn)生了如下的計(jì)算方式:

池的 pg 數(shù) * 該池副本數(shù) = 該池使用的 pg 數(shù)

官方建議每個(gè) osd 上的 pg 數(shù)為 100铸屉。實(shí)際測(cè)試每個(gè) osd 上的 pg 數(shù)到達(dá) 250 時(shí)開(kāi)始告警,因此該集群的總 pg 數(shù)不應(yīng)超過(guò):

總 pg 數(shù) = 總 osd 數(shù)量 * 250

因此出現(xiàn)此問(wèn)題的原因:
所有池的 pg 數(shù)加起來(lái)超過(guò)了設(shè)定的 總 pg 數(shù) 切端。但集群依然可正常使用彻坛,因此只是一個(gè)警告。

解決該問(wèn)題的手段:

  1. 增加總 pg 數(shù):一般通過(guò)加 osd 的方式踏枣。(盡量不要試圖去修改閾值昌屉,除非你知道結(jié)果是什么)
  2. 削減當(dāng)前集群使用的 pg 數(shù):降低池的副本數(shù)(不要降到單副本),降低池的 pg 數(shù)(不建議)茵瀑。
2. 單副本间驮,導(dǎo)致 pg 狀態(tài) unknown

目前個(gè)人經(jīng)驗(yàn)來(lái)說(shuō),不要使用單副本马昨。

參考

crush 規(guī)則參考:
https://docs.ceph.com/docs/master/rados/operations/crush-map/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竞帽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子偏陪,更是在濱河造成了極大的恐慌抢呆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笛谦,死亡現(xiàn)場(chǎng)離奇詭異抱虐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)饥脑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)恳邀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人灶轰,你說(shuō)我怎么就攤上這事谣沸。” “怎么了笋颤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵乳附,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我伴澄,道長(zhǎng)赋除,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任非凌,我火速辦了婚禮举农,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敞嗡。我一直安慰自己颁糟,他們只是感情好航背,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著棱貌,像睡著了一般玖媚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上键畴,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天最盅,我揣著相機(jī)與錄音,去河邊找鬼起惕。 笑死涡贱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惹想。 我是一名探鬼主播问词,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嘀粱!你這毒婦竟也來(lái)了激挪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锋叨,失蹤者是張志新(化名)和其女友劉穎垄分,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體娃磺,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄湿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偷卧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豺瘤。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖听诸,靈堂內(nèi)的尸體忽然破棺而出坐求,到底是詐尸還是另有隱情,我是刑警寧澤晌梨,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布桥嗤,位于F島的核電站,受9級(jí)特大地震影響仔蝌,放射性物質(zhì)發(fā)生泄漏砸逊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一掌逛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧司倚,春花似錦豆混、人聲如沸篓像。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)员辩。三九已至,卻和暖如春鸵鸥,著一層夾襖步出監(jiān)牢的瞬間奠滑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工妒穴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宋税,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓讼油,卻偏偏與公主長(zhǎng)得像杰赛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子矮台,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355