CephFS 介紹及使用經(jīng)驗分享

目錄

  1. Ceph架構介紹
  2. NFS介紹
  3. 分布式文件系統(tǒng)比較
  4. CephFS介紹
  5. MDS介紹
    • 5.1 單活MDS介紹
    • 5.2 單活MDS高可用
  6. CephFS遇到的部分問題
    • 6.1 客戶端緩存問題
    • 6.2 務端緩存不釋放
    • 6.3 客戶端夯住或者慢查詢
    • 6.4 客戶端失去連接
    • 6.5 主從切換問題
  7. CephFS問題解決方案
    • 7.1 服務端緩存警告問題
    • 7.2 客戶端夯住問題
      • 7.2.1 MDS鎖的問題
    • 7.3 MDS主從切換問題
      • 7.3.1 為什么mds切換耗時比較高?
      • 7.3.2 MDS切換循環(huán)纹磺?
    • 7.4 客戶端失去連接
  8. 總結及優(yōu)化方案推薦
  9. 多活MDS
    • 9.1 簡介
    • 9.2 多活MDS優(yōu)勢
    • 9.3 多活MDS特點
    • 9.4 CephFS Subtree Partitioning
      • 9.4.1 介紹
    • 9.5 Subtree Pinning(static subtree partitioning)
    • 9.6 動態(tài)負載均衡
      • 9.6.1 介紹
      • 9.6.2 可配置的負載均衡
      • 9.6.3 負載均衡策略
      • 9.6.4 通過lua靈活控制負載均衡
      • 9.6.5 內(nèi)部結構圖
  10. 多活負載均衡-實戰(zhàn)演練
    • 10.1 集群架構
    • 10.2 擴容活躍MDS
    • 10.3 多活MDS壓測
    • 10.4 多活MDS-動態(tài)負載均衡
    • 10.5 多活MDS-靜態(tài)分區(qū)(多租戶隔離)
    • 10.6 多活MDS-主備模式
  11. 多活負載均衡-總結
    • 11.1 測試報告
    • 11.2 結論
  12. MDS狀態(tài)說明
    • 12.1 MDS主從切換流程圖
    • 12.2 MDS狀態(tài)
    • 12.3 State Diagram
  13. 深入研究
    • 13.1 MDS啟動階段分析
    • 13.2 MDS核心組件
    • 13.3 MDSDaemon類圖
    • 13.4 MDSDaemon源碼分析
    • 13.5 MDSRank類圖
    • 13.6 MDSRank源碼分析

1. Ceph架構介紹

image.png

Ceph是一種為優(yōu)秀的性能斗忌、可靠性和可擴展性而設計的統(tǒng)一的聪蘸、分布式文件系統(tǒng)嘲恍。

特點如下:

  • 高性能
    • a. 摒棄了傳統(tǒng)的集中式存儲元數(shù)據(jù)尋址的方案状您,采用CRUSH算法枢舶,數(shù)據(jù)分布均衡涂邀,并行度高隘击。
    • b.考慮了容災域的隔離侍芝,能夠實現(xiàn)各類負載的副本放置規(guī)則,例如跨機房埋同、機架感知等州叠。
    • c. 能夠支持上千個存儲節(jié)點的規(guī)模,支持TB到PB級的數(shù)據(jù)凶赁。
  • 高可用性
    • a. 副本數(shù)可以靈活控制咧栗。
    • b. 支持故障域分隔,數(shù)據(jù)強一致性虱肄。
    • c. 多種故障場景自動進行修復自愈致板。
    • d. 沒有單點故障,自動管理咏窿。
  • 高可擴展性
    • a. 去中心化斟或。
    • b. 擴展靈活。
    • c. 隨著節(jié)點增加而線性增長集嵌。
  • 特性豐富
    • a. 支持三種存儲接口:塊存儲萝挤、文件存儲、對象存儲根欧。
    • b. 支持自定義接口怜珍,支持多種語言驅動。

使用場景:

  • 塊存儲 (適合單客戶端使用)
    • 典型設備:磁盤陣列凤粗,硬盤酥泛。
    • 使用場景:
      • a. docker容器、虛擬機遠程掛載磁盤存儲分配。
      • b. 日志存儲揭璃。
      • ...
  • 文件存儲 (適合多客戶端有目錄結構)
    • 典型設備:FTP晚凿、NFS服務器。
    • 使用場景:
      • a. 日志存儲瘦馍。
      • b. 多個用戶有目錄結構的文件存儲共享歼秽。
      • ...
  • 對象存儲 (適合更新變動較少的數(shù)據(jù),沒有目錄結構情组,不能直接打開/修改文件)
    • 典型設備:s3, swift燥筷。
    • 使用場景:
      • a. 圖片存儲。
      • b. 視頻存儲院崇。
      • c. 文件肆氓。
      • d. 軟件安裝包。
      • e. 歸檔數(shù)據(jù)底瓣。
      • ...

系統(tǒng)架構:

Ceph 生態(tài)系統(tǒng)架構可以劃分為四部分:

  1. Clients:客戶端(數(shù)據(jù)用戶)
  2. mds:Metadata server cluster谢揪,元數(shù)據(jù)服務器(緩存和同步分布式元數(shù)據(jù))
  3. osd:Object storage cluster,對象存儲集群(將數(shù)據(jù)和元數(shù)據(jù)作為對象存儲捐凭,執(zhí)行其他關鍵職能)
  4. mon:Cluster monitors拨扶,集群監(jiān)視器(執(zhí)行監(jiān)視功能)
image.png

2. NFS介紹

1. NAS(Network Attached Storage)

  • 網(wǎng)絡存儲基于標準網(wǎng)絡協(xié)議NFSv3/NFSv4實現(xiàn)數(shù)據(jù)傳輸。
  • 為網(wǎng)絡中的Windows / Linux / Mac OS 等各種不同操作系統(tǒng)的計算機提供文件共享和數(shù)據(jù)備份茁肠。
  • 目前市場上的NAS存儲是專門的設備患民,成本較高穿剖,且容量不易動態(tài)擴展锐墙,數(shù)據(jù)高可用需要底層RAID來保障狱庇。
  • CephFS屬于NAS的解決方案的一種疫蔓,主要優(yōu)勢在成本昏苏,容量擴展和高性能方案呈野。

2. NFS(Network File System)

  • NFS即網(wǎng)絡文件系統(tǒng)旗闽,通過使用NFS遵馆,用戶和程序可以像訪問本地文件一樣訪問遠端系統(tǒng)上的文件站刑。
  • NFS客戶端和NFS服務器之間正是通過NFS協(xié)議進行通信的另伍。
  • 目前NFS協(xié)議版本有NFSv3、NFSv4和NFSv4.1绞旅,NFSv3是無狀態(tài)的摆尝,NFSv4是有狀態(tài),NFSv3和NFSv4是基于Filelayout驅動的因悲,而NFSv4.1是基于Blocklayout驅動堕汞。本文主要使用NFSv4協(xié)議。

3. 分布式文件系統(tǒng)比較

名稱 功能 適合場景 優(yōu)缺點
MFS 1. 單點MDS
2. 支持FUSE
3. 數(shù)據(jù)分片分布
4. 多副本
5. 故障手動恢復
大量小文件讀寫 1. 運維實施簡單
2. 但存在單點故障
Ceph 1. 多個MDS,可擴展
2. 支持FUSE
3. 數(shù)據(jù)分片(crush)分布
4. 多副本/糾刪碼
5. 故障自動恢復
統(tǒng)一小文件存儲 1. 運維實施簡單
2. 故障自愈晃琳,自我恢復
3. MDS鎖的問題
4. J版本很多坑, L版本可以上生產(chǎn)環(huán)境
ClusterFS 1. 不存在元數(shù)據(jù)節(jié)點
2. 支持FUSE
3. 數(shù)據(jù)分片分布
4. 鏡像
5. 故障自動恢復
適合大文件 1. 運維實施簡單
2. 不存儲元數(shù)據(jù)管理
3. 增加了客戶端計算負載
Lustre 1. 雙MDS互備讯检,不可用擴展
2. 支持FUSE
3. 數(shù)據(jù)分片分布
4. 冗余(無)
5. 故障自動恢復
大文件讀寫 1. 運維實施復雜
2. 太龐大
3. 比較成熟

4. CephFS介紹

image.png

說明:

  • CephFS 是個與 POSIX 標準兼容的文件系統(tǒng)琐鲁。
  • 文件目錄和其他元數(shù)據(jù)存儲在RADOS中。
  • MDS緩存元信息和文件目錄信息人灼。
  • 核心組件:MDS围段、Clients、RADOS投放。
    • Client <–> MDS
      元數(shù)據(jù)操作和capalities奈泪。
    • Client <–> OSD
      數(shù)據(jù)IO。
    • MDS <–> OSD
      元數(shù)據(jù)IO灸芳。
  • 掛載方式:
    • ceph-fuse ... 涝桅。
    • mount -t ceph ... 。
  • 可擴展性
    • client讀寫osd 烙样。
  • 共享文件系統(tǒng)
    • 多個clients可以同時讀寫 冯遂。
  • 高可用
    • MDS主備模式,Active/Standby MDSs 谒获。
  • 文件/目錄Layouts
    • 支持配置文件/目錄的Layouts使用不同的Ppool 蛤肌。
  • POSIX ACLs
    • CephFS kernel client默認支持。
    • CephFS FUSE client可配置支持 批狱。
  • NFS-Ganesha
    • 一個基于 NFSv3\v4\v4.1 的NFS服務器
    • 運行在大多數(shù) Linux 發(fā)行版的用戶態(tài)空間下寻定,同時也支持 9p.2000L 協(xié)議。
    • Ganesha通過利用libcephfs庫支持CephFS FSAL(File System Abstraction Layer精耐,文件系統(tǒng)抽象層),可以將CephFS重新Export出去琅锻。
  • Client Quotas
    • CephFS FUSE client支持配置任何目錄的Quotas卦停。
  • 負載均衡
    • 動態(tài)負載均衡。
    • 靜態(tài)負載均衡恼蓬。
    • hash負載均衡惊完。

5. MDS介紹

5.1 單活MDS介紹

image.png

說明:

  • MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數(shù)據(jù)服務处硬。
  • 元數(shù)據(jù)的內(nèi)存緩存小槐,為了加快元數(shù)據(jù)的訪問。
  • 保存了文件系統(tǒng)的元數(shù)據(jù)(對象里保存了子目錄和子文件的名稱和inode編號)
  • 保存cephfs日志journal荷辕,日志是用來恢復mds里的元數(shù)據(jù)緩存
  • 重啟mds的時候會通過replay的方式從osd上加載之前緩存的元數(shù)據(jù)
  • 對外提供服務只有一個active mds凿跳。
  • 所有用戶的請求都只落在一個active mds上。

5.2 單活MDS高可用

image.png

說明:

  • 對外提供服務只有一個active mds, 多個standby mds疮方。
  • active mds掛掉控嗜,standby mds會立馬接替,保證集群高可用性骡显。
  • standby mds
    • 冷備就是備份的mds疆栏,只起到一個進程備份的作用曾掂,并不備份lru元數(shù)據(jù)。主備進程保持心跳關系壁顶,一旦主的mds掛了珠洗,備份mds replay()元數(shù)據(jù)到緩存,當然這需要消耗一點時間若专。
    • 熱備除了進程備份许蓖,元數(shù)據(jù)緩存還時時刻刻的與主mds保持同步,當 active mds掛掉后富岳,熱備的mds直接變成主mds蛔糯,并且沒有replay()的操作,元數(shù)據(jù)緩存大小和主mds保持一致窖式。

6. CephFS遇到的部分問題

6.1 客戶端緩存問題

消息: Client name failing to respond to cache pressure

說明: 客戶端有各自的元數(shù)據(jù)緩存蚁飒,客戶端緩存中的條目(比如索引節(jié)點)也會存在于 MDS 緩存中,
所以當 MDS 需要削減其緩存時(保持在 mds_cache_size 以下)萝喘,它也會發(fā)消息給客戶端讓它們削減自己的緩存淮逻。如果某個客戶端的響應時間超過了 mds_recall_state_timeout (默認為 60s ),這條消息就會出現(xiàn)阁簸。

6.2 服務端緩存不釋放

如果有客戶端沒響應或者有缺陷爬早,就會妨礙 MDS 將緩存保持在 mds_cache_size 以下, MDS 就有可能耗盡內(nèi)存而后崩潰启妹。

6.3 客戶端夯住或者慢查詢

  • 客戶端搜索遍歷查找文件(不可控)筛严。
  • session的 inode太大導致mds負載過高。
  • 日志級別開的太大饶米,從而導致mds負載高桨啃。
  • mds鎖問題,導致客戶端夯住檬输。
  • mds性能有限照瘾,目前是單活。

6.4 客戶端失去連接

客戶端由于網(wǎng)絡問題或者其他問題丧慈,導致客戶端不可用析命。

6.5 主從切換問題

  • 主從切換耗時長。
  • 主從切換循環(huán)選舉逃默。

7. CephFS問題解決方案

7.1 服務端緩存警告問題

v12 luminous版本已修復:
https://github.com/ceph/ceph/commit/51c926a74e5ef478c11ccbcf11c351aa520dde2a
mds: fix false "failing to respond to cache pressure" warning

  • MDS has cache pressure, sends recall state messages to clients
  • Client does not trim as many caps as MDS expected. So MDS
    does not reset session->recalled_at
  • MDS no longer has cache pressure, it stop sending recall state
    messages to clients.
  • Client does not release its caps. So session->recalled_at in
    MDS keeps unchanged

7.2 客戶端夯住問題

7.2.1 MDS鎖的問題

7.2.1.1 場景模擬

  • A用戶以只讀的方式打開文件鹃愤,不關閉文件句柄。然后意外掉線或者掉電笑旺,B用戶讀寫這個文件就會夯住昼浦。
  1. 讀寫代碼
//read.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <pthread.h>
int main()
{
    int i = 0;
    for(i = 0; ;i++)
    {
        char *filename = "test.log";
        int fd = open(filename, O_RDONLY);
        printf("fd=[%d]", fd);
        fflush(stdout);
        sleep(5);
    }
}
 
//write.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <pthread.h>
int main()
{
    int i = 0;
    for(i = 0; ;i++)
    {
        char *filename = "test.log";
        int fd = open(filename, O_CREAT | O_WRONLY | O_APPEND, S_IRUSR | S_IWUSR);
        write(fd, "aaaa\n", 6);
        printf("fd=[%d] buffer=[%s]", fd, "aaaa");
        close(fd);
        fflush(stdout);
        sleep(5);
    }
}
  1. A用戶執(zhí)行read, B用戶執(zhí)行write。
  • a. A用戶筒主,kill -9 ceph-fuse pid 時間點是19:55:39关噪。
  • b. 觀察A,B用戶的情況如下鸟蟹。


    image.png
  • c. 觀察mds的日志
2018-12-13 19:56:11.222816 7fffee6d0700  0 log_channel(cluster) log [WRN] : 1 slow requests, 1 included below; oldest blocked for > 30.670943 secs
2018-12-13 19:56:11.222826 7fffee6d0700  0 log_channel(cluster) log [WRN] : slow request 30.670943 seconds old, received at 2018-12-13 19:55:40.551820: client_request(client.22614489:538 lookup #0x1/test.log 2018-12-13 19:55:40.551681 caller_uid=0, caller_gid=0{0,}) currently failed to rdlock, waiting
2018-12-13 19:56:13.782378 7ffff0ed5700  1 mds.ceph-xxx-osd02.ys Updating MDS map to version 229049 from mon.0
2018-12-13 19:56:33.782572 7ffff0ed5700  1 mds.ceph-xxx-osd02.ys Updating MDS map to version 229050 from mon.0
2018-12-13 20:00:26.226405 7fffee6d0700  0 log_channel(cluster) log [WRN] : evicting unresponsive client ceph-xxx-osd01.ys (22532339), after 303.489228 seconds

總結:

  • 可以發(fā)現(xiàn)kill之后A用戶是不可用的狀態(tài)。
  • 與此同時B用戶也是不可用的狀態(tài)使兔,過了300s才恢復建钥。
  • 與此同時mds日志顯示,有慢查詢夯住的client.22614489正好是B用戶虐沥。
  • mds日志中發(fā)現(xiàn)熊经,夯住都是在等待讀鎖。(currently failed to rdlock, waiting)
  • mds日志中發(fā)現(xiàn)欲险, 夯住后過了300s 驅逐異掣湟溃客戶端A用戶。
  • 有兩種情況可以自動剔除客戶:
    • 在活動的MDS守護程序上天试,如果客戶端尚未通過mds_session_autoclose秒(默認為300秒)與MDS進行通信(客戶端每隔20s 向mds發(fā)送心跳鏈接handle_client_session)槐壳,則會自動將其逐出。
    • 在MDS啟動期間(包括故障轉移)喜每,MDS通過稱為重新連接的狀態(tài)务唐。 在此狀態(tài)下,它等待所有客戶端連接到新的MDS守護程序带兜。 如果任何客戶端在時間窗口(mds_reconnect_timeout枫笛,默認值為45秒)內(nèi)未能這樣做,那么它們將被逐出刚照。
  • 調(diào)節(jié)mds session autoclose(默認300s)可以盡快釋放異常會話刑巧,讓其他客戶端盡快可用。

7.3 MDS主從切換問題

7.3.1 為什么mds切換耗時比較高无畔?

  1. 分析日志(發(fā)現(xiàn)執(zhí)行rejoin_start海诲,rejoin_joint_start動作耗時比較高)。
2018-04-27 19:24:15.984156 7f53015d7700  1 mds.0.2738 rejoin_start
2018-04-27 19:25:15.987531 7f53015d7700  1 mds.0.2738 rejoin_joint_start
2018-04-27 19:27:40.105134 7f52fd4ce700  1 mds.0.2738 rejoin_done
2018-04-27 19:27:42.206654 7f53015d7700  1 mds.0.2738 handle_mds_map i am now mds.0.2738
2018-04-27 19:27:42.206658 7f53015d7700  1 mds.0.2738 handle_mds_map state change up:rejoin --> up:active
  1. 跟蹤代碼分析(在執(zhí)行process_imported_caps超時了檩互, 這個函數(shù)主要是打開inodes 加載到cache中)。


    image.png

7.3.2 MDS切換循環(huán)咨演?

MDS守護進程至少在mds_beacon_grace中未能向監(jiān)視器發(fā)送消息闸昨,而它們應該在每個mds_beacon_interval發(fā)送消息。此時Ceph監(jiān)視器將自動將MDS切換為備用MDS薄风。 如果MDS的Session Inode過多導致MDS繁忙饵较,只從切換未能及時發(fā)送消息,就可能會出現(xiàn)循環(huán)切換的概率遭赂。一般建設增大mds_beacon_grace循诉。

mds beacon grace
描述: 多久沒收到標識消息就認為 MDS 落后了(并可能替換它)。
類型: Float
默認值: 15

7.4 客戶端失去連接

client: fix fuse client hang because its pipe to mds is not ok
There is a risk client will hang if fuse client session had been killed by mds and
the mds daemon restart or hot-standby switch happens right away but the client
did not receive any message from monitor due to network or other whatever reason
untill the mds become active again.Thus cause client didn't do closed_mds_session
lead the seession still is STATE_OPEN but client can't send any message to
mds because its pipe is not ok.

So we should create pipe to mds guarantee any meta request can be sent to
server.When mds recevie the message will send a CLOSE_SESSION to client
becasue its session for this client is STATE_CLOSED.After the previous
steps the old session of client can be closed and new session and pipe
can be established and the mountpoint will be ok.

8. 總結及優(yōu)化方案推薦

  • A用戶讀數(shù)據(jù)意外掉線撇他,B用戶的操作都會抗住等待A用戶恢復茄猫,如果恢復不了狈蚤,直到一定時間會自動剔除A用戶。(鎖的粒度很大划纽,坑很大)
  • 調(diào)節(jié)mds session autoclose(默認300s)脆侮,盡快剔除有問題的客戶端。
    • On an active MDS daemon, if a client has not communicated with the MDS for over session_autoclose (a file system variable) seconds (300 seconds by default), then it will be evicted automatically
  • 有兩種情況可以自動驅逐客戶:
    • 在活動的MDS守護程序上勇劣,如果客戶端尚未通過mds_session_autoclose秒(默認為300秒)與MDS進行通信(客戶端每隔20s 向mds發(fā)送心跳鏈接handle_client_session)靖避,則會自動將其逐出。
    • 在MDS啟動期間(包括故障轉移)比默,MDS通過稱為重新連接的狀態(tài)幻捏。 在此狀態(tài)下,它等待所有客戶端連接到新的MDS守護程序命咐。 如果任何客戶端在時間窗口(mds_reconnect_timeout篡九,默認值為45秒)內(nèi)未能這樣做,那么它們將被逐出侈百。
  • 如果mds負載過高或者內(nèi)存過大瓮下,限制MDS內(nèi)存,減少資源消耗钝域。mds limiting cache by memory https://github.com/ceph/ceph/pull/17711
  • 如果mds負載過高或者內(nèi)存過大讽坏,官方提供的mds 主動刪除cache,補丁在review過程中個例证,目標版本是ceph-14.0.0 https://github.com/ceph/ceph/pull/21566
  • mds在主處理流程中使用了單線程路呜,這導致了其單個MDS的性能受到了限制,最大單個MDS可達8k ops/s织咧,CPU利用率達到的 140%左右胀葱。
  • ceph-fuse客戶端Qos限速溪北,避免IO一瞬間涌進來導致mds抖動(從客戶端限制IOPS,避免資源爭搶吱抚,對系統(tǒng)資源帶來沖擊)
  • 剔除用戶可以釋放inode數(shù)量,但是不能減少內(nèi)存丐重,如果此時切換主從可以加快切換速度捅位。
  • 多活MDS 在12 Luminous 官方宣稱可以上生產(chǎn)環(huán)境轧葛。
  • 當某個文件系統(tǒng)客戶端不響應或者有其它異常行為時,此時會對客戶端進行驅逐艇搀,為了防止異衬虺叮客戶端導致數(shù)據(jù)不一致。

9. 多活MDS

9.1 簡介

也叫: multi-mds 焰雕、 active-active MDS
每個 CephFS 文件系統(tǒng)默認情況下都只配置一個活躍 MDS 守護進程衷笋。在大型系統(tǒng)中,為了擴展元數(shù)據(jù)性能你可以配置多個活躍的 MDS 守護進程矩屁,它們會共同承擔元數(shù)據(jù)負載辟宗。

CephFS 在Luminous版本中多元數(shù)據(jù)服務器(Multi-MDS)的功能和目錄分片(dirfragment)的功能宣稱已經(jīng)可以在生產(chǎn)環(huán)境中使用爵赵。

image.png

9.2 多活MDS優(yōu)勢

  • 當元數(shù)據(jù)默認的單個 MDS 成為瓶頸時,配置多個活躍的 MDS 守護進程慢蜓,提升集群性能亚再。
  • 多個活躍的 MDS 有利于性能提升。
  • 多個活躍的MDS 可以實現(xiàn)MDS負載均衡晨抡。
  • 多個活躍的MDS 可以實現(xiàn)多租戶資源隔離氛悬。

9.3 多活MDS特點

  • 它能夠將文件系統(tǒng)樹分割成子樹。
  • 每個子樹可以交給特定的MDS進行權威管理耘柱。
  • 從而達到了隨著元數(shù)據(jù)服務器數(shù)量的增加如捅,集群性能線性地擴展。
  • 每個子樹都是基于元數(shù)據(jù)在給定目錄樹中的熱動態(tài)創(chuàng)建的调煎。
  • 一旦創(chuàng)建了子樹镜遣,它的元數(shù)據(jù)就被遷移到一個未加載的MDS。
  • 后續(xù)客戶端對先前授權的MDS的請求被轉發(fā)士袄。
image.png

9.4 CephFS Subtree Partitioning

9.4.1 介紹

image.png

說明:
為了實現(xiàn)文件系統(tǒng)數(shù)據(jù)和元數(shù)據(jù)的負載均衡悲关,業(yè)界一般有幾種分區(qū)方法:

  • 靜態(tài)子樹分區(qū)
    • 即通過手工分區(qū)方式,將數(shù)據(jù)直接分配到某個服務節(jié)點上娄柳,出現(xiàn)負載
      不均衡時寓辱,再由管理員手動重新進行分配。
    • 這種方式適應于數(shù)據(jù)位置固定的場景赤拒,不適合動態(tài)擴展秫筏、或者有可能出現(xiàn)異常的場景。
  • Hash計算分區(qū)
    • 即通過Hash計算來分配數(shù)據(jù)存儲的位置挎挖。
    • 這種方式適合數(shù)據(jù)分布均衡这敬、且需要應用各種異常的情況,但不太適合需要數(shù)據(jù)分布固定蕉朵、環(huán)境變化頻率很高的場景崔涂。
  • 動態(tài)子樹分區(qū)
    • 通過實時監(jiān)控集群節(jié)點的負載,動態(tài)調(diào)整子樹分布于不同的節(jié)點始衅。
    • 這種方式適合各種異常場景堪伍,能根據(jù)負載的情況,動態(tài)的調(diào)整數(shù)據(jù)分布觅闽,不過如果大量數(shù)據(jù)的遷移肯定會導致業(yè)務抖動,影響性能涮俄。

9.5 Subtree Pinning(static subtree partitioning)

image.png

說明:

  • 通過pin可以把mds和目錄進行綁定 蛉拙。
  • 通過pin可以做到不同用戶的目錄訪問不同的mds。
  • 可以實現(xiàn)多租戶MDS負載均衡彻亲。
  • 可以實現(xiàn)多租戶MDS負載資源隔離孕锄。

9.6 動態(tài)負載均衡

9.6.1 介紹

多個活動的MDSs可以遷移目錄以平衡元數(shù)據(jù)負載吮廉。何時、何地以及遷移多少的策略都被硬編碼到元數(shù)據(jù)平衡模塊中畸肆。

Mantle是一個內(nèi)置在MDS中的可編程元數(shù)據(jù)均衡器宦芦。其思想是保護平衡負載(遷移、復制轴脐、碎片化)的機制调卑,但使用Lua定制化平衡策略。

大多數(shù)實現(xiàn)都在MDBalancer中大咱。度量通過Lua棧傳遞給均衡器策略恬涧,負載列表返回給MDBalancer。這些負載是“發(fā)送到每個MDS的數(shù)量”碴巾,并直接插入MDBalancer“my_targets”向量溯捆。

暴露給Lua策略的指標與已經(jīng)存儲在mds_load_t中的指標相同:auth.meta_load()、all.meta_load()厦瓢、req_rate提揍、queue_length、cpu_load_avg煮仇。

它位于當前的均衡器實現(xiàn)旁邊劳跃,并且它是通過“ceph.conf”中的字符串啟用的。如果Lua策略失敗(無論出于何種原因)欺抗,我們將回到原來的元數(shù)據(jù)負載均衡器售碳。
均衡器存儲在RADOS元數(shù)據(jù)池中,MDSMap中的字符串告訴MDSs使用哪個均衡器绞呈。

This PR does not not have the following features from the Supercomputing paper:

  1. Balancing API: all we require is that balancer written in Lua returns a targets table, where each index is the amount of load to send to each MDS
  2. "How much" hook: this let's the user define meta_load()
  3. Instantaneous CPU utilization as metric
    Supercomputing '15 Paper: http://sc15.supercomputing.org/schedule/event_detail-evid=pap168.html

9.6.2 可配置的負載均衡

image.png

參考:

9.6.3 負載均衡策略

image.png

9.6.4 通過lua靈活控制負載均衡

image.png

參考:

9.6.5 內(nèi)部結構圖

image.png

參考:

10. 多活負載均衡-實戰(zhàn)演練

10.1 集群架構

  • mon: ceph-xxx-osd02.ys,ceph-xxx-osd03.ys,ceph-xxx-osd01.ys
  • mgr: ceph-xxx-osd03.ys(active), standbys: ceph-xxx-osd02.ys
  • mds: test1_fs-1/1/1 up {0=ceph-xxx-osd02.ys=up:active}, 2 up:standby
  • osd: 36 osds: 36 up, 36 in
  • rgw: 1 daemon active

10.2 擴容活躍MDS

10.2.1 設置max_mds為2

$ ceph fs set test1_fs max_mds 2

10.2.2 查看fs狀態(tài)信息


$ ceph fs status
test1_fs - 3 clients
========
+------+--------+------------------------+---------------+-------+-------+
| Rank | State  |          MDS           |    Activity   |  dns  |  inos |
+------+--------+------------------------+---------------+-------+-------+
|  0   | active | ceph-xxx-osd02.ys | Reqs:    0 /s | 3760  |   14  |
|  1   | active | ceph-xxx-osd01.ys | Reqs:    0 /s |   11  |   13  |
+------+--------+------------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata |  194M | 88.7T |
|   cephfs_data   |   data   |    0  | 88.7T |
+-----------------+----------+-------+-------+
+------------------------+
|      Standby MDS       |
+------------------------+
| ceph-xxx-osd03.ys |
+------------------------+
MDS version: didi_dss version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)

10.2.3 總結

  • 每一個 CephFS 文件系統(tǒng)都有自己的 max_mds 配置贸人,它控制著會創(chuàng)建多少 rank 。
  • 有空閑守護進程可接管新 rank 時佃声,文件系統(tǒng) rank 的實際數(shù)量才會增加 艺智。
  • 通過設置max_mds增加active mds。
    • 新創(chuàng)建的 rank (1) 會從 creating 狀態(tài)過渡到 active 狀態(tài)圾亏。
    • 創(chuàng)建后有兩個active mds十拣, 一個standby mds。

10.3 多活MDS壓測

10.3.1 用戶掛載目錄

$ ceph-fuse /mnt/
$ df
ceph-fuse      95330861056     40960 95330820096   1% /mnt

10.3.2 filebench壓測

image.png

10.3.3 查看fs mds負載


$ ceph fs status
test1_fs - 3 clients
========
+------+--------+------------------------+---------------+-------+-------+
| Rank | State  |          MDS           |    Activity   |  dns  |  inos |
+------+--------+------------------------+---------------+-------+-------+
|  0   | active | ceph-xxx-osd03.ys | Reqs: 5624 /s |  139k |  133k |
+------+--------+------------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata |  238M | 88.7T |
|   cephfs_data   |   data   | 2240M | 88.7T |
+-----------------+----------+-------+-------+
+------------------------+
|      Standby MDS       |
+------------------------+
| ceph-xxx-osd01.ys |
| ceph-xxx-osd02.ys |
+------------------------+
MDS version: didi_dss version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)

10.3.4 總結

  • fuse模式 mds性能 5624 ops/s志鹃。
  • 雖然有兩個active mds, 但是目前請求都會落在rank0上面夭问。
  • 默認多個active mds負載并沒有均衡。

10.4 多活MDS-動態(tài)負載均衡

10.4.1 Put the balancer into RADOS

rados put --pool=cephfs_metadata_a greedyspill.lua ../src/mds/balancers/greedyspill.lua

10.4.2 Activate Mantle

ceph fs set test1_fs max_mds 2
ceph fs set test1_fs balancer greedyspill.lua

10.4.3 掛載壓測

$ ceph fs status
test1_fs - 3 clients
========
+------+--------+------------------------+---------------+-------+-------+
| Rank | State | MDS | Activity | dns | inos |
+------+--------+------------------------+---------------+-------+-------+
| 0 | active | ceph-xxx-osd03.ys | Reqs: 2132 /s | 4522 | 1783 |
| 1 | active | ceph-xxx-osd02.ys | Reqs: 173 /s | 306 | 251 |
+------+--------+------------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
| Pool | type | used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata | 223M | 88.7T |
| cephfs_data | data | 27.1M | 88.7T |
+-----------------+----------+-------+-------+
+------------------------+
| Standby MDS |
+------------------------+
| ceph-xxx-osd01.ys |
+------------------------+
MDS version: didi_dss version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)

10.4.4 總結

  • 通過lua可以靈活控制負載均衡策略曹铃。
  • 測試結果發(fā)現(xiàn)缰趋,負載均衡效果并不好。
  • 負載均衡目前來看坑比較深,目前不推薦使用秘血。

10.5 多活MDS-靜態(tài)分區(qū)(多租戶隔離)

10.5.1 根據(jù)目錄綁定不同的mds

#mds00綁定到/mnt/test0
#mds01綁定到/mnt/test1
#setfattr -n ceph.dir.pin -v <rank> <path>
 
setfattr -n ceph.dir.pin -v 0 /mnt/test0
setfattr -n ceph.dir.pin -v 1 /mnt/test1

10.5.2 兩個客戶端壓測

image.png

10.5.3 觀察fs 狀態(tài)信息(2個壓測端)

#檢查mds請求負責情況
$ ceph fs status
test1_fs - 3 clients
========
+------+--------+------------------------+---------------+-------+-------+
| Rank | State  |          MDS           |    Activity   |  dns  |  inos |
+------+--------+------------------------+---------------+-------+-------+
|  0   | active | ceph-xxx-osd03.ys | Reqs: 3035 /s |  202k |  196k |
|  1   | active | ceph-xxx-osd02.ys | Reqs: 3039 /s | 70.8k | 66.0k |
+------+--------+------------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata |  374M | 88.7T |
|   cephfs_data   |   data   | 4401M | 88.7T |
+-----------------+----------+-------+-------+
+------------------------+
|      Standby MDS       |
+------------------------+
| ceph-xxx-osd01.ys |
+------------------------+
MDS version: didi_dss version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)

10.5.4 結論

  • 通過ceph.dir.pin把目錄綁定到不同的mds上味抖,從而實現(xiàn)多租戶隔離。
  • 兩個客戶端各自寫入自己所在目錄持續(xù)壓測20分鐘灰粮。
  • 兩個客戶端壓測結果分別是:3035 ops/s仔涩,3039 ops/s。
  • 兩個客戶端cpu消耗非常接近粘舟。
  • 兩個active mds 目前都有請求負載熔脂,實現(xiàn)了多個客戶端的負載均衡。

10.6 多活MDS-主備模式

10.6.1 查看mds狀態(tài)

$ ceph fs status
test1_fs - 4 clients
========
+------+--------+------------------------+---------------+-------+-------+
| Rank | State  |          MDS           |    Activity   |  dns  |  inos |
+------+--------+------------------------+---------------+-------+-------+
|  0   | active | ceph-xxx-osd02.ys | Reqs:    0 /s | 75.7k | 72.6k |
|  1   | active | ceph-xxx-osd01.ys | Reqs:    0 /s | 67.8k | 64.0k |
+------+--------+------------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata |  311M | 88.7T |
|   cephfs_data   |   data   | 3322M | 88.7T |
+-----------------+----------+-------+-------+
+------------------------+
|      Standby MDS       |
+------------------------+
| ceph-xxx-osd03.ys |
+------------------------+
MDS version: didi_dss version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)

10.6.2 停掉mds2

$ systemctl stop ceph-mds.target

10.6.3 查看mds狀態(tài)信息

$ ceph fs status
test1_fs - 2 clients
========
+------+--------+------------------------+---------------+-------+-------+
| Rank | State  |          MDS           |    Activity   |  dns  |  inos |
+------+--------+------------------------+---------------+-------+-------+
|  0   | replay | ceph-xxx-osd03.ys |               |    0  |    0  |
|  1   | active | ceph-xxx-osd01.ys | Reqs:    0 /s | 67.8k | 64.0k |
+------+--------+------------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata |  311M | 88.7T |
|   cephfs_data   |   data   | 3322M | 88.7T |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: didi_dss version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)

10.6.4 壓測觀察

#進行壓測rank0, 發(fā)現(xiàn)請求能正常落在mds3上
$ ceph fs status
test1_fs - 4 clients
========
+------+--------+------------------------+---------------+-------+-------+
| Rank | State  |          MDS           |    Activity   |  dns  |  inos |
+------+--------+------------------------+---------------+-------+-------+
|  0   | active | ceph-xxx-osd03.ys | Reqs: 2372 /s | 72.7k | 15.0k |
|  1   | active | ceph-xxx-osd01.ys | Reqs:    0 /s | 67.8k | 64.0k |
+------+--------+------------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata |  367M | 88.7T |
|   cephfs_data   |   data   | 2364M | 88.7T |
+-----------------+----------+-------+-------+
+------------------------+
|      Standby MDS       |
+------------------------+
| ceph-xxx-osd02.ys |
+------------------------+
MDS version: didi_dss version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)

10.6.5 總結

  • 多active mds蓖乘,如果主mds掛掉锤悄, 備mds會接替主的位置。
  • 新的主會繼承靜態(tài)分區(qū)關系嘉抒。

11. 多活負載均衡-總結

11.1 測試報告

工具 集群模式 客戶端數(shù)量(壓測端) 性能
filebench 1MDS 2個客戶端 5624 ops/s
filebench 2MDS 2個客戶端 客戶端1:3035 ops/s
客戶端2:3039 ops/s

11.2 結論

  • 單活mds
    • 性能是 5624 ops/s左右零聚。
    • 通過主備模式可以實現(xiàn)高可用。
  • 多活mds 默認
    • 用戶的請求都只會在 rank 0 上的mds些侍。
  • 多活mds 動態(tài)負載均衡 (目前12.2版本不推薦使用)
    • 測試效果多個mds負載不均衡隶症。
    • 可以通過lua靈活調(diào)節(jié)負載均衡策略。
    • 資源來回遷移等各種問題岗宣,目前感覺坑還是很大蚂会。
  • 多活mds 靜態(tài)分區(qū) (推薦使用,外界社區(qū)也有用到生產(chǎn)環(huán)境)
    • 可以實現(xiàn)不同目錄綁定到不同的mds上耗式。
    • 從而實現(xiàn)多租戶mds資源隔離胁住。
    • 隨著mds增加可以線性增加集群性能。
    • 兩個客戶端壓測結果分別是:3035 ops/s刊咳,3039 ops/s彪见。
  • 多活mds 主備模式
    • 其中一個active mds掛掉 stanbdy會立馬接替。
    • 接替過來的新主active mds 也會繼承靜態(tài)分區(qū)的關系娱挨。

12. MDS狀態(tài)說明

12.1 MDS主從切換流程圖

image.png

說明:

  1. 用戶手動發(fā)起主從切換fail余指。
  2. active mds手動信號,發(fā)起respawn重啟跷坝。
  3. standby mds收到信號酵镜,經(jīng)過分布式算法推選為新主active mds。
  4. 新主active mds 從up:boot狀態(tài)柴钻,變成up:replay狀態(tài)淮韭。日志恢復階段,他將日志內(nèi)容讀入內(nèi)存后贴届,在內(nèi)存中進行回放操作靠粪。
  5. 新主active mds 從up:replay狀態(tài)足丢,變成up:reconnect狀態(tài)”优洌恢復的mds需要與之前的客戶端重新建立連接,并且需要查詢之前客戶端發(fā)布的文件句柄绍些,重新在mds的緩存中創(chuàng)建一致性功能和鎖的狀態(tài)捞慌。
  6. 新主active mds從up:reconnect狀態(tài),變成up:rejoin狀態(tài)柬批。把客戶端的inode加載到mds cache啸澡。(耗時最多的地方)
  7. 新主active mds從up:rejoin狀態(tài),變成up:active狀態(tài)氮帐。mds狀態(tài)變成正承崧玻可用的狀態(tài)。
  8. recovery_done 遷移完畢上沐。
  9. active_start 正称し可用狀態(tài)啟動,mdcache加載相應的信息参咙。

12.2 MDS狀態(tài)

狀態(tài) 說明
up:active This is the normal operating state of the MDS. It indicates that the MDS and its rank in the file system is available.

這個狀態(tài)是正常運行的狀態(tài)龄广。 這個表明該mds在rank中是可用的狀態(tài)。
up:standby The MDS is available to takeover for a failed rank (see also :ref:mds-standby). The monitor will automatically assign an MDS in this state to a failed rank once available.

這個狀態(tài)是災備狀態(tài)蕴侧,用來接替主掛掉的情況择同。
up:standby_replay The MDS is following the journal of another up:active MDS. Should the active MDS fail, having a standby MDS in replay mode is desirable as the MDS is replaying the live journal and will more quickly takeover. A downside to having standby replay MDSs is that they are not available to takeover for any other MDS that fails, only the MDS they follow.

災備守護進程就會持續(xù)讀取某個處于 up 狀態(tài)的 rank 的元數(shù)據(jù)日志。這樣它就有元數(shù)據(jù)的熱緩存净宵,在負責這個 rank 的守護進程失效時敲才,可加速故障切換。

一個正常運行的 rank 只能有一個災備重放守護進程( standby replay daemon )择葡,如果兩個守護進程都設置成了災備重放狀態(tài)紧武,那么其中任意一個會取勝,另一個會變?yōu)槠胀ǖ牡蟀丁⒎侵胤艦膫錉顟B(tài)脏里。

一旦某個守護進程進入災備重放狀態(tài),它就只能為它那個 rank 提供災備虹曙。如果有另外一個 rank 失效了迫横,即使沒有災備可用,這個災備重放守護進程也不會去頂替那個失效的酝碳。
up:boot This state is broadcast to the Ceph monitors during startup. This state is never visible as the Monitor immediately assign the MDS to an available rank or commands the MDS to operate as a standby. The state is documented here for completeness.

此狀態(tài)在啟動期間被廣播到CEPH監(jiān)視器矾踱。這種狀態(tài)是不可見的,因為監(jiān)視器立即將MDS分配給可用的秩或命令MDS作為備用操作疏哗。這里記錄了完整性的狀態(tài)呛讲。
up:creating The MDS is creating a new rank (perhaps rank 0) by constructing some per-rank metadata (like the journal) and entering the MDS cluster.
up:starting The MDS is restarting a stopped rank. It opens associated per-rank metadata and enters the MDS cluster.
up:stopping When a rank is stopped, the monitors command an active MDS to enter the up:stopping state. In this state, the MDS accepts no new client connections, migrates all subtrees to other ranks in the file system, flush its metadata journal, and, if the last rank (0), evict all clients and shutdown (see also :ref:cephfs-administration).
up:replay The MDS taking over a failed rank. This state represents that the MDS is recovering its journal and other metadata.

日志恢復階段,他將日志內(nèi)容讀入內(nèi)存后,在內(nèi)存中進行回放操作贝搁。
up:resolve The MDS enters this state from up:replay if the Ceph file system has multiple ranks (including this one), i.e. it's not a single active MDS cluster. The MDS is resolving any uncommitted inter-MDS operations. All ranks in the file system must be in this state or later for progress to be made, i.e. no rank can be failed/damaged or up:replay.

用于解決跨多個mds出現(xiàn)權威元數(shù)據(jù)分歧的場景吗氏,對于服務端包括子樹分布、Anchor表更新等功能雷逆,客戶端包括rename弦讽、unlink等操作。
up:reconnect An MDS enters this state from up:replay or up:resolve. This state is to solicit reconnections from clients. Any client which had a session with this rank must reconnect during this time, configurable via mds_reconnect_timeout.

恢復的mds需要與之前的客戶端重新建立連接膀哲,并且需要查詢之前客戶端發(fā)布的文件句柄往产,重新在mds的緩存中創(chuàng)建一致性功能和鎖的狀態(tài)。mds不會同步記錄文件打開的信息某宪,原因是需要避免在訪問mds時產(chǎn)生多余的延遲仿村,并且大多數(shù)文件是以只讀方式打開。
up:rejoin The MDS enters this state from up:reconnect. In this state, the MDS is rejoining the MDS cluster cache. In particular, all inter-MDS locks on metadata are reestablished.
If there are no known client requests to be replayed, the MDS directly becomes up:active from this state.

把客戶端的inode加載到mds cache
up:clientreplay The MDS may enter this state from up:rejoin. The MDS is replaying any client requests which were replied to but not yet durable (not journaled). Clients resend these requests during up:reconnect and the requests are replayed once again. The MDS enters up:active after completing replay.
down:failed No MDS actually holds this state. Instead, it is applied to the rank in the file system
down:damaged No MDS actually holds this state. Instead, it is applied to the rank in the file system
down:stopped No MDS actually holds this state. Instead, it is applied to the rank in the file system

12.3 State Diagram

This state diagram shows the possible state transitions for the MDS/rank. The legend is as follows:

Color

  • 綠色: MDS是活躍的兴喂。
  • 橙色: MDS處于過渡臨時狀態(tài)蔼囊,試圖變得活躍。
  • 紅色: MDS指示一個狀態(tài)瞻想,該狀態(tài)導致被標記為失敗压真。
  • 紫色: MDS和rank為停止。
  • 紅色: MDS指示一個狀態(tài)蘑险,該狀態(tài)導致被標記為損壞滴肿。

Shape

  • 圈:MDS保持這種狀態(tài)。
  • 六邊形:沒有MDS保持這個狀態(tài)佃迄。

Lines

  • A double-lined shape indicates the rank is "in".
image.png

13. 深入研究

image.png
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泼差,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖趣效,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吼肥,居然都是意外死亡,警方通過查閱死者的電腦和手機麻车,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門缀皱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人动猬,你說我怎么就攤上這事啤斗。” “怎么了赁咙?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵钮莲,是天一觀的道長免钻。 經(jīng)常有香客問我,道長崔拥,這世上最難降的妖魔是什么极舔? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮链瓦,結果婚禮上姆怪,老公的妹妹穿的比我還像新娘。我一直安慰自己澡绩,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布俺附。 她就那樣靜靜地躺著肥卡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪事镣。 梳的紋絲不亂的頭發(fā)上步鉴,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音璃哟,去河邊找鬼氛琢。 笑死,一個胖子當著我的面吹牛随闪,可吹牛的內(nèi)容都是我干的阳似。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铐伴,長吁一口氣:“原來是場噩夢啊……” “哼撮奏!你這毒婦竟也來了?” 一聲冷哼從身側響起当宴,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畜吊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后户矢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玲献,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年梯浪,在試婚紗的時候發(fā)現(xiàn)自己被綠了捌年。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡驱证,死狀恐怖延窜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抹锄,我是刑警寧澤逆瑞,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布荠藤,位于F島的核電站,受9級特大地震影響获高,放射性物質(zhì)發(fā)生泄漏哈肖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一念秧、第九天 我趴在偏房一處隱蔽的房頂上張望淤井。 院中可真熱鬧,春花似錦摊趾、人聲如沸币狠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漩绵。三九已至,卻和暖如春肛炮,著一層夾襖步出監(jiān)牢的瞬間止吐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工侨糟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碍扔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓秕重,卻偏偏與公主長得像不同,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子溶耘,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前幾天有幸在日知錄社區(qū)里分享了自己對CephFS的理解與CephFS的測試分析套鹅,然后把內(nèi)容整理如下,因為內(nèi)容比較多...
    ictfox閱讀 2,769評論 0 8
  • 參考文檔 https://www.linuxidc.com/Linux/2017-09/146760.htmhtt...
    三杯水Plus閱讀 4,298評論 0 8
  • 系統(tǒng)環(huán)境: centos73.10.0-514.26.2.el7.x86_64 機器數(shù)量:五臺 硬盤:四塊一塊為系...
    think_lonely閱讀 4,683評論 0 5
  • Ceph概述 [toc] 分布式文件系統(tǒng) 分布式文件系統(tǒng)( Distributed File Syste ) 是指...
    Kokoronashi閱讀 2,374評論 0 0
  • 一汰具、概述 Ceph是一個分布式存儲系統(tǒng)卓鹿,誕生于2004年,最早致力于開發(fā)下一代高性能分布式文件系統(tǒng)的項目留荔。隨著云計...
    魏鎮(zhèn)坪閱讀 49,418評論 3 54