Ceph V9.2.0版本(代號INFERNALIS)已發布
本文由Ceph中國社區-AmosG翻譯,Thomas校稿
英文出處:官網releases欄
此次的主發版本將是Ceph下一個穩定系列的基石。自Hammer v0.94.x發布后,我們做了重大修改,這個更新過程很不簡單。請仔細閱讀以下的發行說明。
自Hammer版本以來所做的重要修改
-
General
-
Ceph的守護進程現已通過systemd來管理(Ubuntu Trusty是個例外,仍沿用upstart來管理)。
-
Ceph的守護進程以ceph用戶而非root運行。
-
在Red Hat的發行版本中,也存在SeLinux Policy。
-
RADOS
-
RADOS的cache層現在可通過代理將寫操作發送到持久層(base tier),允許直接處理寫操作無需先強制將對象移至cache層。
-
對SHEC 糾刪碼的支持已不再標記為實驗性的。SHEC通過消耗一些額外的存儲空間來換取更快的修復速度。
-
為(優化)客戶端IO、數據恢復、數據清理、快照裁剪提供統一的隊列。
-
對低層級的修復工具(ceph-objectstore-tool)做了許多改進。
-
為方便使用新的存儲后端(如NewStore),內部ObjectStore API已做了重大的修改。
-
RGW
-
Swift API現已支持對象過期機制
-
Swift API的兼容性得到了很大的改善
-
RBD
-
通過rbd du命令顯示實際的使用(容量)信息(當object-map處于enabled狀態時該操作很快)
-
對object-map特性的穩定性做了許多改善。
-
object-map和exclusive-lock特性可動態的開啟或者關閉。
-
現在你可以依據個體鏡像(individual image)來存儲用戶的元數據并設置持久的librbd選項。
-
新的深度扁平(deep-flatten)特性允許對一個克隆及其所有的快照進行扁平化處理(在此之前快照不能被扁平化。)
-
更快的export-diff命令(使用了aio)。另外新增了fast-diff特性。
-
可通過單位后綴指定-size參數大小(如—size 64G)。
-
有一個新的rbd status命令,現在可通過該命令來顯示誰打開/映射了某個鏡像。
-
CephFS
發行版的兼容性
我們已決定放棄對多個舊的Linux發行版的支持,這樣一來我們就可以轉用更新的編譯器工具鏈(如C++11)。 盡管通過安裝向后兼容的開發工具來在舊版本中生成Ceph還是可能的,但我們不會在ceph.com上為這些發行版生成并發布release版本的安裝包。
我們現在為以下的版本構建安裝包:
-
現已可對快照進行重命名操作。
-
在管理、診斷、檢查和修復工具上已作出了持續的改善。
-
由未使用inode引發的client端cache狀態的緩存和撤回問題已經得到極大的改善。
-
32位主機上,ceph-fuse客戶端表現得更好。
-
CentOS 7或后續版本。我們已放棄對CentOS 6的支持(以及RHEL 6其它的衍生系列,如Scientific Linux 6)。
-
Debian Jessie 8.x或后續版本。 Debian Wheezy 7.x的g++對C++11的支持并不完整(而且沒有systemd)。
-
Ubuntu Trusty 14.04或后續版本。 Ubuntu Precise 12.04已不再被支持。
-
Fedora 22或后續版本。
從Firefly更新至Infernalis
我們不推薦從Firefly v0.80.z直接更新。雖然直接更新是可能的,但會存在停機時間。我們推薦先更新至Hammer v0.94.4或之后的v0.94.z的發行版,只有這樣之后才能做到線上更新至Infernalis 9.2.z(見下文)。
若需線下直接從Firefly更新至Infernalis,那么在任一Infernalis OSD允許啟動之前,必須停止所有的Firefly OSD并將其標記為down狀態。通過Infernalis的監控器來保證這種隔離機制,因此,使用類似如下的升級步驟:
-
在monitor主機上更新Ceph
-
重啟所有的ceph-mon守護進程
-
在所有的OSD主機上更新Ceph
-
停止所有的ceph-osd守護進程
-
將所有的OSD標記為down,所用的執行命令類似于:ceph osd down seq 0 1000
-
啟動所有的ceph-osd守護進程
-
升級并重啟余下的守護進程(ceph-mds, radosgw)
從Hammer更新至Infernalis
-
對于支持systemd(CentOS 7, Fedora, Debian Jessie 8.x, OpenSUSE)的所有Linux發行版,Ceph守護進程現在使用原生的systemd文件而不是遺留的sysvinit腳本來進行管理。比如:
systemctl start ceph.target # start all daemons
systemctl status ceph-osd@12 # check status of osd 12
主流的發行版中,Ubuntu trusty 14.04還未使用systemd。(下一個Ubuntu LTS,16.04,將會使用systemd替換upstart)。
-
現 在,默認情況下,Ceph守護進程將以ceph用戶和組的身份運行。 在Fedora和Debian(以及其他諸如RHEL/CentOS和Ubuntu等衍生發行版)中ceph用戶被賦予了一個靜態UID。在SUSE中 ceph用戶會在其創建的時候被動態的賦予一個UID。
如果你的系統中已有ceph用戶,那么升級安裝包的過程中將會出現問題。我們建議在升級前,先移除或重命名已有的ceph用戶或ceph組。
升級過程中,管理員有兩個選擇:
-
將如下行添加至所有主機的ceph.conf中:
setuser match path = /var/lib/ceph/
這將使得Ceph的守護進程以root身份運行(即:未放棄特權及切換至ceph用戶),如果Ceph守護進程的數據目錄的所有者仍是root。 新部署的守護進程將以ceph用戶來創建數據目錄,并以非特權運行,但升級的守護進程仍以root身份運行。
-
升級過程中修復數據的所有權。這是我們所偏好的選擇,但這需要做更多工作而且耗時。對每個主機,需做如下步驟的操作:
a.升級ceph安裝包。這就創建了ceph用戶和組。如:
ceph-deploy install —stable infernalis HOST
-
處于實驗階段的KeyValueStore OSD后端所采用的磁盤格式(on-disk format)已發生了變化。如果你所要升級的測試集群中用到了它,那么你需要移除所有用到該后端的OSD。
-
與 集群滿一樣,當達到存儲池的配額時,librados操作將會無限期阻塞。(而之前的版本中會返回-ENOSPC)。默認狀態下,當一個集群或pool滿 了,就會發生阻塞。如果你的librados應用能優雅地處理ENOSPC或EDQUOT等錯誤,那么你可以通過使用lirados中新的 OPERATION_FULL_TRY標記來獲取錯誤返回碼。
-
librbd的rbd_aio_read和Image::aio_read API方法在成功時將不再返回已讀的字節數,而是在成功時返回0,失敗時返回一個負值。
-
‘ceph scrub’, ‘ceph compact’ 和 ‘ceph sync force’ 已棄用,取而代之的是 ‘ceph mon scrub’, ‘ceph mon compact’ 和 ‘ceph mon sync force’。
-
‘ceph mon_metadata’ 現在應寫成 ‘ceph mon metadata’。沒有必要棄用這個命令(自引入以來一直存在)。
-
osdmaptool命令的–dump-json已由–dump json替換。
-
pg ls-by-{pool,primary,osd} 和 pg ls 這兩命令中的recovery參數改為了recovering, 用來包含所列出的pg中正處于recovering狀態的pg。
-
…
更多變化內容請詳見發行說明
b.停止守護進程
service ceph stop # fedora, centos, rhel, debian
stop ceph-all # ubuntu
c.修復所有權
chown -R ceph:ceph /var/lib/ceph/$type/$cluster-$id
d.重啟守護進程
start ceph-all # ubuntu
systemctl start ceph.target # debian, centos, fedora, rhel
可選的,相同的過程可以用單一的守護進程類型來完成,比如:只停止監控器并改變/var/lib/ceph/mon的所有者。