COSCon'19 | 如何設計新一代的圖數據庫 Nebula
947
2025-03-31
一 概述
1.1 背景
近期進行公司業務容器化改造,在為kubernetes提供存儲選型方面,在選型中本地存儲不可跨node,NFS共享存儲不好做高可用,因此選型Ceph來為k8s提供存儲類。特此筆記以備后用。
1.2 概述
Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統。Ceph是一個開源的分布式文件系統。因為它還支持塊存儲、對象存儲,所以很自然的被用做云計算框架openstack或cloudstack整個存儲后端。當然也可以單獨作為存儲,例如部署一套集群作為對象存儲、SAN存儲、NAS存儲等。可以作為k8s的存儲類,來方便容器持久化存儲。
1.3 支持格式
對象存儲:即radosgw,兼容S3接口。通過rest api上傳、下載文件。
文件系統:posix接口。可以將ceph集群看做一個共享文件系統掛載到本地。
塊存儲:即rbd。有kernel rbd和librbd兩種使用方式。支持快照、克隆。相當于一塊硬盤掛到本地,用法和用途和硬盤一樣。比如在OpenStack項目里,Ceph的塊設備存儲可以對接OpenStack的后端存儲
1.4 優勢
統一存儲:雖然ceph底層是一個分布式文件系統,但由于在上層開發了支持對象和塊的接口
高擴展性:擴容方便、容量大。能夠管理上千臺服務器、EB級的容量。
高可靠性:支持多份強一致性副本,EC。副本能夠垮主機、機架、機房、數據中心存放。所以安全可靠。存儲節點可以自管理、自動修復。無單點故障,容錯性強。
高性能:因為是多個副本,因此在讀寫操作時候能夠做到高度并行化。理論上,節點越多,整個集群的IOPS和吞吐量越高。另外一點ceph客戶端讀寫數據直接與存儲設備(osd) 交互。
1.5 核心組件
Ceph OSDs:Ceph OSD 守護進程( Ceph OSD )的功能是存儲數據,處理數據的復制、恢復、回填、再均衡,并通過檢查其他OSD 守護進程的心跳來向 Ceph Monitors 提供一些監控信息。當 Ceph 存儲集群設定為有2個副本時,至少需要2個 OSD 守護進程,集群才能達到 active+clean 狀態( Ceph 默認有3個副本,但你可以調整副本數)。
Monitors: ?Ceph Monitor維護著展示集群狀態的各種圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 保存著發生在Monitors 、 OSD 和 PG上的每一次狀態變更的歷史信息(稱為 epoch )。
MDSs: ?Ceph 元數據服務器( MDS )為 Ceph 文件系統存儲元數據(也就是說,Ceph 塊設備和 Ceph 對象存儲不使用MDS )。元數據服務器使得 POSIX 文件系統的用戶們,可以在不對 Ceph 存儲集群造成負擔的前提下,執行諸如 ls、find 等基本命令。
二 安裝部署
2.1 主機信息
2.2 磁盤準備
需要在三臺主機創建磁盤,并掛載到主機的/var/local/osd{0,1,2}
[root@master?~]#?mkfs.xfs?/dev/vdc?[root@master?~]#?mkdir?-p?/var/local/osd0?[root@master?~]#?mount?/dev/vdc?/var/local/osd0/?[root@node01?~]#?mkfs.xfs?/dev/vdc?[root@node01?~]#?mkdir?-p?/var/local/osd1?[root@node01?~]#?mount?/dev/vdc?/var/local/osd1/?[root@node02?~]#?mkfs.xfs?/dev/vdc??[root@node02?~]#?mkdir?-p?/var/local/osd2?[root@node02?~]#?mount?/dev/vdc?/var/local/osd2/?將磁盤添加進入fstab中,確保開機自動掛載?復制代碼
2.3 配置各主機hosts文件
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4?::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6?172.16.60.2?master?172.16.60.3?node01?172.16.60.4?node02?復制代碼
2.4 管理節點ssh免密鑰登錄node1/node2
[root@master?~]#?ssh-keygen?-t?rsa?[root@master?~]#?ssh-copy-id?-i?/root/.ssh/id_rsa.pub?root@node01?[root@master?~]#?ssh-copy-id?-i?/root/.ssh/id_rsa.pub?root@node02?復制代碼
2.5 master節點安裝ceph-deploy工具
#?各節點均更新ceph的yum源?vim?/etc/yum.repos.d/ceph.repo??[ceph]?name=ceph?baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/?gpgcheck=0?priority?=1?[ceph-noarch]?name=cephnoarch?baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/?gpgcheck=0?priority?=1?[ceph-source]?name=Ceph?source?packages?baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS?gpgcheck=0?priority=1??#?安裝ceph-deploy工具?yum?clean?all?&&?yum?makecache?yum?-y?install?ceph-deploy?復制代碼
2.6 創建monitor服務
創建monitor服務,指定master節點的hostname
[root@master?~]#?mkdir?/etc/ceph?&&?cd?/etc/ceph?[root@master?ceph]#?ceph-deploy?new?master?[root@master?ceph]#?ll?total?12?-rw-r--r--?1?root?root??195?Sep??3?10:56?ceph.conf?-rw-r--r--?1?root?root?2915?Sep??3?10:56?ceph-deploy-ceph.log?-rw-------?1?root?root???73?Sep??3?10:56?ceph.mon.keyring?[root@master?ceph]#?cat?ceph.conf??[global]?fsid?=?5b9eb8d2-1c12-4f6d-ae9c-85078795794b?mon_initial_members?=?master?mon_host?=?172.16.60.2?auth_cluster_required?=?cephx?auth_service_required?=?cephx?auth_client_required?=?cephx?osd_pool_default_size?=?2?配置文件的默認副本數從3改成2,這樣只有兩個osd也能達到active+clean狀態,把下面這行加入到[global]段(可選配置)?復制代碼
2.7 所有節點安裝ceph
#?各節點安裝軟件包?yum?-y?install?yum-plugin-priorities?epel-release?#?master節點利用ceph-deply?部署ceph?[root@master?ceph]#?ceph-deploy?install?master?node01?node02?[root@master?ceph]#?ceph?--version?ceph?version?10.2.11?(e4b061b47f07f583c92a050d9e84b1813a35671e)?復制代碼
2.8 部署相關服務
#?安裝ceph?monitor?[root@master?ceph]#?ceph-deploy?mon?create?master??#?收集節點的keyring文件?[root@master?ceph]#?ceph-deploy??gatherkeys?master??#?創建osd?[root@master?ceph]#?ceph-deploy?osd?prepare?master:/var/local/osd0?node01:/var/local/osd1?node02:/var/local/osd2??#?權限修改?[root@master?ceph]#?chmod?777?-R?/var/local/osd{0..2}?[root@master?ceph]#?chmod?777?-R?/var/local/osd{0..2}/*??#?激活osd?[root@master?ceph]#?ceph-deploy?osd?activate?master:/var/local/osd0?node01:/var/local/osd1?node02:/var/local/osd2??#?查看狀態?[root@master?ceph]#?ceph-deploy?osd?list?master?node01?node02?復制代碼
2.9 統一配置
用ceph-deploy把配置文件和admin密鑰拷貝到所有節點,這樣每次執行Ceph命令行時就無需指定monitor地址和ceph.client.admin.keyring了
[root@master?ceph]#?ceph-deploy?admin?master?node01?node02??#?各節點修改ceph.client.admin.keyring權限:?[root@master?ceph]#?chmod?+r?/etc/ceph/ceph.client.admin.keyring??#?查看狀態?[root@master?ceph]#?ceph?health?HEALTH_OK?[root@master?ceph]#?ceph?-s?????cluster?5b9eb8d2-1c12-4f6d-ae9c-85078795794b??????health?HEALTH_OK??????monmap?e1:?1?mons?at?{master=172.16.60.2:6789/0}?????????????election?epoch?3,?quorum?0?master??????osdmap?e15:?3?osds:?3?up,?3?in?????????????flags?sortbitwise,require_jewel_osds???????pgmap?v27:?64?pgs,?1?pools,?0?bytes?data,?0?objects?????????????15681?MB?used,?1483?GB?/?1499?GB?avail???????????????????64?active+clean????????????????????????復制代碼
2.10 部署MDS服務
我們在node01/node02上安裝部署MDS服務
[root@master?ceph]#?ceph-deploy?mds?create?node01?node02??#?查看狀態?[root@master?ceph]#?ceph?mds?stat?e3:,?2?up:standby?[root@master?~]#?ceph?mon?stat?e1:?1?mons?at?{master=172.16.60.2:6789/0},?election?epoch?4,?quorum?0?master??#?查看服務?[root@master?ceph]#?systemctl?list-unit-files?|grep?ceph?ceph-create-keys@.service?????????????????????static???ceph-disk@.service????????????????????????????static???ceph-mds@.service?????????????????????????????disabled?ceph-mon@.service?????????????????????????????enabled??ceph-osd@.service?????????????????????????????enabled??ceph-radosgw@.service?????????????????????????disabled?ceph-mds.target???????????????????????????????enabled??ceph-mon.target???????????????????????????????enabled??ceph-osd.target???????????????????????????????enabled??ceph-radosgw.target???????????????????????????enabled??ceph.target???????????????????????????????????enabled??復制代碼
至此,基本上完成了ceph存儲集群的搭建。
三 創建ceph文件系統
3.1 創建文件系統
關于創建存儲池 確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:
少于 5 個 OSD 時可把 pg_num 設置為 128
OSD 數量在 5 到 10 個時,可把 pg_num 設置為 512
OSD 數量在 10 到 50 個時,可把 pg_num 設置為 4096
OSD 數量大于 50 時,你得理解權衡方法、以及如何自己計算 pg_num 取值
自己計算 pg_num 取值時可借助 pgcalc 工具 ??隨著 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯著地影響著集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。
[root@master?ceph]#?ceph?osd?pool?create?cephfs_data?
3.2 創建客戶端密鑰
#?創建keyring?[root@master?~]#?ceph?auth?get-or-create?client.kube?mon?'allow?r'?osd?'allow?rwx?pool=kube'?-o?/etc/ceph/ceph.client.kube.keyring?[root@master?~]#?ceph?auth?list??#?將密鑰拷貝到node1和node2?[root@master?ceph]#?scp?ceph.client.kube.keyring?root@node01:/etc/ceph/?復制代碼
四 卸載
清理機器上的ceph相關配置:?停止所有進程:?stop?ceph-all?卸載所有ceph程序:ceph-deploy?uninstall?[{ceph-node}]?刪除ceph相關的安裝包:ceph-deploy?purge?{ceph-node}?[{ceph-data}]?刪除ceph相關的配置:ceph-deploy?purgedata?{ceph-node}?[{ceph-data}]?刪除key:ceph-deploy?forgetkeys?卸載ceph-deploy管理:yum?-y?remove?ceph-deploy?復制代碼
參考鏈接
ceph官方文檔
ceph中文開源社區
CentOS 7部署 Ceph分布式存儲架構
存儲
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。