1- 硬件選型
- 原則:根據存儲需求和企業的使用場景
- 企業選擇:TCO低,高性能,高可靠
- ceph上線歷程:
- 硬件選型
- 部署調優
- 性能測試
- 架構災備設計
- 部分業務上線測試
- 運行維護(故障處理、預案演練等)
1.1- 企業場景
- 高性能:在低TCO下每秒擁有最高的IOPS。 一般使用更快的SSD硬盤,PCIe SSD, NVMe作數據存儲的高性能節點。用於快存儲,或者高IOPS的工作負載上。
- 通用場景:高吞吐量和單位吞吐量的低功耗。一般使用一個高帶寬、物理隔離的雙重網絡、使用SSD和PCIe SSD作OSD的日志盤。用於快存儲。也可以用於高性能的對象存儲和文件存儲。
- 大容量場景:數據中心每TB存儲的低成本,以及機架單元物理空間的低成本。也稱為經濟存儲、廉價存儲、存檔/長期存儲。一般上使用插滿機械硬盤的密集服務器,一個機架8-14台服務器,每台服務器24-72TB的物理硬盤空間。用於低功耗,大存儲容量的對象存儲和文件存儲。
1.2- 依賴因素
-
CPU:
Ceph OSD運行RADOS服務,需要通過CRUSH來計算數據的存放位置,復制數據,以及維護Cluster Map的拷貝。建議每個OSD進程至少用一個CPU核。Metadata和Monitors也用計算資源。
-
內存
OSD在日常操作時不需要過多的內存(每進程500MB);但在執行恢復操作時,就需要大量的內存(每進程每TB數據需要約1GB內存)。通常內存越多越好。
-
數據存儲
規划數據存儲時要考慮成本和性能的權衡。進行系統操作時,同時多個后台程序對單個驅動器進行讀寫操作會顯著降低性能,也有文件系統的限制考慮。例如:BTRFS對於生產環境來說不是很穩定,但有能力記錄journal和並行的寫入操作。 XFS和EXT4會更好。
-
網絡
網卡能處理所有OSD硬盤總吞吐量,推薦最少安裝兩個千兆網卡,最好時萬兆網卡。
-
硬盤
Ceph集群性能很大程度取決於存儲介質的有效選擇。應該在選擇存儲介質之前了解集群的工作負載和性能需求。
-
ceph OSD日志盤
-
建議SSD做日志盤。好處時減少訪問使勁,降低寫延遲,大幅提升吞吐量。
-
對每個物理SSD創建多個邏輯分區,每個邏輯分區映射到一個OSD數據盤。一般10-20G邏輯分區對應一個OSD.
-
使用更大的SSD時,為OSD增加filestore最大和最小的同步時間間隔。
-
SSD和OSD的比例: SATA/SAS SSD --- 1:4 PCIE/NVME -- 1:12或1:18
-
-
ceph OSD數據盤
- 接口: SATA和SAS. NL-SAS HDD 擁有雙重SAS 12G/S端口,比但端口的SATA 6GB/S 的HDD具有更高性能。同時提供冗余,允許並行讀寫。
- 穩定:SAS比SATA具有更低的URE,PG修復操作更少
- OSD節點密集度:大量的小容量節點比少亮的大容量節點好。建議單個節點的容量小於總集群容量的10%
其他注意:在存儲集群和底層基礎設施上,企業擁有完全控制權
場景驅動
2- 性能調優
2.1- 硬件參數
- BIOS設置:超線程,關閉節能
- NUMA設置:建議關閉。或者通過cgroup將ceph-osd進程與某一個CPU core和內存進行綁定
2.2- 系統
- linux kernel
- IO調度: 使用Noop調度器替代內核默認的CFQ
- 預讀:read_aheah_kb建議更大值
- 進程:pid_max設更大值
- 調整CPU頻率,使其運行在更高性能下。
- 內存:
- SMP, NUMA
- SWAP: vm.swappiness=0
- 全閃存支持:增加TCmalloc的cache大小伙子jemalloc替換TCmalloc
- Cgroup:
- 對程序做CPU綁定或者使用Cgroups進行隔離時,不要跨CPU,已便更好地命中內存和緩存。
- ceph進程和其他進程會相互搶占資源,使用cgroups做好隔離措施。
- 將ceph進程預留足夠多的cpu和內存資源,防止影響性能
2.3- 網絡
-
巨型幀
調整MTU=9000開啟巨型幀,可以極大提高性能
-
中斷親和: 2.4內核后引入將特定中斷綁定到指定到CPU。慎用irqbalance服務,根據系統規划,通過手動設置中斷親和,隔離部分CPU處理網卡中斷
-
硬件加速
- TOE網卡:將計算工作交給網卡上的協處理器完成
- RDMA:將應用程序在用戶態直接將buffer(緩沖區)中的數據寫入網卡的內存中,以網絡為載體,發送到遠程網卡,直接寫入應用緩存中。
- DPDK:拋棄傳統使用CPU中斷處理數據包的方式,采用輪詢方式實現數據處理過程,零拷貝存入用戶態內存中,類似RDMA,避免內存拷貝和上下文切換的時間。
3- ceph層面
3.1- ceph參數:filestore
參數 | 描述 | 默認值 | 建議值 |
---|---|---|---|
filestore xattr use omap | 為xattrs使用object map,ext4 文件系統時時有,xfs或者btrfs | false | true |
filestore max sync interval | 日志到數據盤最大同步間隔 | 5 | 15 |
filestore min sync interval | 日志到數據盤最小同步間隔 | 0.1 | 10 |
filestore queue max ops | 數據盤最大接受操作數 | 500 | 25000 |
filestore queue max bytes | 數據盤一次操作最大字節數 | 100<<20 | 10485760 |
filestore queue committing max ops | 數據盤能過commit的操作數 | 500 | 5000 |
filestore queue committing max bytes | 數據盤能過commit的最大字節數 | 100<<20 | 10 485 760 000 |
filestore op threads | 並發文件系統操作數 | 2 | 32 |
3.2- ceph參數:OSD優化
參數 | 描述 | 默認值 | 建議值 |
---|---|---|---|
osd max write size | OSD 一次可寫入的最大值(MB) | 90 | 512 |
osd client message size cap | 客戶端允許在內存中的最大數據(bytes) | 524 288 000 | 2147 483 648 |
osd deep scrub stride | 在deep scrub時允許讀取字節數(bytes) | 524288 | 131072 |
osd op threads | OSD進程操作的線程數 | 2 | 8 |
osd disk threads | OSD 密集型操作例如恢復和scrubbing時的線程 | 1 | 4 |
osd map cache size | 保留OSD map的緩存(MB) | 500 | 1024 |
osd map cache bi size | OSD 進程在內存中的OSD Map 緩存(MB) | 50 | 128 |
其他參數:
osd_enable_op_tracker=false #默認開啟,可以跟蹤OP執行時間
throttler_perf_counter=false #默認開啟,可以觀察閥值是否是瓶頸,在特定環境調整到最佳性能后,建議關閉,
3.3- PG number 調整
-
PG和PGP數量一定要根據OSD的數量進行調整,計算公式:
Total PGs = (Total_number_of_OSD *100)/max_replication_count
例如:OSD 15個,副本數:3. PG數目= 15*100/3 = 500 ~= 512
最后的結果要接近或者等於2的指數。增加一個集群的PG數都會導致集群重新平衡OSD負載,建議每個OSD對於的PG數目在50-100之間,減少資源消耗。tracker對性能影響較大
cephx_sign_messages=false #默認開啟,對安全要求不高時建議關閉
filestore_fd_cache_size=4096 #默認256
filestore_fd_cache_shards=256 #默認16
3.4- 其他問題
- 持續大量寫SSD到其容量95%時,既不能寫也不能讀
- 集群腦裂問題
- 監控與預警
- 寫懸崖問題
4- 高級特性
4.1- 緩存
- cache partition manager(高速緩存分區功能) 是傳統高端存儲系統中的一個關鍵特性,可確保不同應用的服務質量。將Cache分為最多16個分區。每個分區的資源訪問獨立進行,不會互相串擾。根據應用的I/O特性不同,可以用多種不同方法優化每個分區的分段大小。分段尺寸可設置為4KB,8KB,16KB,64KB,256KB,512KB等等。可調的分段尺寸將大大提高緩存訪問的命中率。
- 根據應用的可靠性要求不同,對cache的使用率要求不同,可將每個分區的緩存設為鏡像模式、無鏡像模式;每個分區對應的磁盤LUN可選擇不同的條帶大小,尺寸可由16KB,64KB,一致增長到128KB,最終實現分區緩存數據寫入磁盤的優化操作。
- QOS的控制,一般從優先級,I/O,帶寬甚至專門的緩存分區4個方面來控制。
4.2- 去重和壓縮
- 實現重復數據刪除以及壓縮,對存儲來說則是很大的挑戰
- 對應數據的備份與歸檔,使用重復數據刪除技術是非常必要的。重復數據刪除的實現,有很多種方式。例如可以后台處理方式,也可以是在線處理
- 提高來壓縮功能,就意味者后續訪問時需要解壓縮,而壓縮會帶來很多的資源開銷。
4.3- 雙活與容災
- 雙活場景下,部分主備角色,而是對稱的,兩邊會相互影響。就很可能導致兩邊一損俱損,會增加運維難度,還有腦裂問題。
- 異地容災:通過互聯網TCP/IP協議,將本地的數據實時備份到異地服務器中,可以通過異地備份數據的進行遠程恢復,也可以在異地進行數據回退。
- 傳統存儲的雙活機制利用虛擬化網關的實現起來是多一層運維比較復雜。現在的趨勢趨向存儲陣列的雙活。
5- ceph測試
- 測試對象:區分硬盤,ssd.raid,san,雲硬盤等
- 測試指標:IOPS和MBPS(吞吐率)
- 測試工具:Linux下用Fio,dd, rados bench, windows iometer
- 測試參數: IO大小,尋址空間,隊列深度,讀寫模式和隨機/順序模式
6- 補充
6.1- 存儲挑選
- 底層協議
- 兼容性
- 產品定位,功能取舍
- 針對特定市場的應用存儲
- 市場認可
- 穩定性>性能
6.2- ceph運維
-
多寫故障記錄手冊
-
預案手冊,部署手冊,擴容手冊,演練手冊
-
進行常規故障演練