隨着OpenStack日漸成爲開源雲計算的標準軟件棧,Ceph也已經成爲OpenStack的首選後端存儲。Ceph是一種爲優秀的性能、可靠性和可擴展性而設計的統一的、分佈式文件系統。
ceph官方文檔 http://docs.ceph.org.cn/
ceph中文開源社區 http://ceph.org.cn/node
Ceph是一個開源的分佈式文件系統。由於它還支持塊存儲、對象存儲,因此很天然的被用作雲計算框架openstack或cloudstack整個存儲後端。固然也能夠單獨做爲存儲,例如部署一套集羣做爲對象存儲、SAN存儲、NAS存儲等。linux
ceph支持
一、對象存儲:即radosgw,兼容S3接口。經過rest api上傳、下載文件。vim
二、文件系統:posix接口。能夠將ceph集羣看作一個共享文件系統掛載到本地。後端
三、塊存儲:即rbd。有kernel rbd和librbd兩種使用方式。支持快照、克隆。至關於一塊硬盤掛到本地,用法和用途和硬盤同樣。好比在OpenStack項目裏,Ceph的塊設備存儲能夠對接OpenStack的後端存儲api
Ceph相比其它分佈式存儲有哪些優勢?安全
一、統一存儲
雖然ceph底層是一個分佈式文件系統,但因爲在上層開發了支持對象和塊的接口。因此在開源存儲軟件中,可以一統江湖。至於能不能千秋萬代,就不知了。服務器
二、高擴展性
擴容方便、容量大。可以管理上千臺服務器、EB級的容量。網絡
三、可靠性強
支持多份強一致性副本,EC。副本可以垮主機、機架、機房、數據中心存放。因此安全可靠。存儲節點能夠自管理、自動修復。無單點故障,容錯性強。框架
四、高性能
由於是多個副本,所以在讀寫操做時候可以作到高度並行化。理論上,節點越多,整個集羣的IOPS和吞吐量越高。另一點ceph客戶端讀寫數據直接與存儲設備(osd) 交互。運維
Ceph各組件介紹:
•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 等基本命令。
xuegod67 10.10.10.67 admin,osd, mon 做爲管理和監控節點
xuegod68 10.10.10.68 osd,mds
xuegod69 10.10.10.69 osd,mds
xuegod70 10.10.10.70 client
#xuegod67做管理. osd. mon節點; xuegod68和69做osd mds; xuegod70客戶端
前三臺服務器增長一塊硬盤/dev/sdb實驗, 建立目錄並掛載到/var/local/osd{0,1,2}
[root@xuegod67 ~]# mkfs.xfs /dev/sdb [root@xuegod67 ~]# mkdir -p /var/local/osd0 [root@xuegod67 ~]# mount /dev/sdb /var/local/osd0/ [root@xuegod68 ~]# mkfs.xfs /dev/sdb [root@xuegod68 ~]# mount /dev/sdb /var/local/osd1/ [root@xuegod69 ~]# mkfs.xfs /dev/sdb [root@xuegod69 ~]# mount /dev/sdb /var/local/osd2/
(規範系統主機名添加hosts文件實現集羣主機名與主機名之間相互可以解析(host 文件添加主機名不要使用fqdn方式)可用hostnamectl set-hostname name設置
分別打開各節點的/etc/hosts文件,加入這四個節點ip與名稱的對應關係
10.10.10.67 xuegod67
10.10.10.68 xuegod68
10.10.10.69 xuegod69
10.10.10.70 xuegod70
SSH免密碼登陸
在管理節點使用ssh-keygen 生成ssh keys 發佈到各節點
[root@xuegod67 ~]# ssh-keygen #全部的輸入選項都直接回車生成。 [root@xuegod67 ~]# ssh-copy-id xuegod67 [root@xuegod67 ~]# ssh-copy-id xuegod68 [root@xuegod67 ~]# ssh-copy-id xuegod69 [root@xuegod67 ~]# ssh-copy-id xuegod70
第一步:增長 yum配置文件(各個節點都須要增長yum源)
[root@xuegod67 ~]#vim /etc/yum.repos.d/ceph.repo 添加如下內容:(ceph國內163源) [Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/x86_64 enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.163.com/ceph/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.163.com/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.163.com/ceph/keys/release.asc priority=1 第二步:更新軟件源並安裝ceph-deploy 管理工具 [root@xuegod67 ~]# yum clean all && yum list [root@xuegod67 ~]# yum -y install ceph-deploy
[root@xuegod67 ~]# mkdir /etc/ceph && cd /etc/ceph [root@xuegod67 ceph]# ceph-deploy new xuegod67 #mon安裝在xuegod67節點 [root@xuegod67 ceph]# ls #生成配置文件在當前目錄下 ceph.conf ceph.log ceph.mon.keyring Ceph配置文件、一個monitor密鑰環和一個日誌文件
[root@xuegod67 ceph]# vim ceph.conf 配置文件的默認副本數從3改爲2,這樣只有兩個osd也能達到active+clean狀態,把下面這行加入到[global]段(可選配置) [global] fsid = 92f5581d-79d2-4c9f-a523-4965eedc846b mon_initial_members = xuegod67 mon_host = 10.10.10.67 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd_pool_default_size = 2
(若是網絡源安裝失敗,手工安裝epel-release 而後安裝yum –yinstall cep-release再yum –y install ceph ceph-radosgw)
[root@xuegod67 ceph]# ceph-deploy install xuegod67 xuegod68 xuegod69 xuegod70 安裝ceph monitor [root@xuegod67 ceph]# ceph-deploy mon create xuegod67 收集節點的keyring文件 [root@xuegod67 ceph]# ceph-deploy gatherkeys xuegod67
添加osd節點 (全部osd節點執行)
咱們實驗準備時已經建立目錄/var/local/osd{id}
#建立osd [root@xuegod67 ceph]# ceph-deploy osd prepare xuegod67:/var/local/osd0 xuegod68:/var/local/osd1 xuegod69:/var/local/osd2 #激活osd [root@xuegod67 ceph]# ceph-deploy osd activate xuegod67:/var/local/osd0 xuegod68:/var/local/osd1 xuegod69:/var/local/osd2
若是報錯
解決:在各個節點上給/var/local/osd1/和/var/local/osd2/添加權限
以下:
chmod 777 -R /var/local/osd1/
chmod 777 -R /var/local/osd2/*
查看狀態:
[root@xuegod67 ceph]# ceph-deploy osd list xuegod67 xuegod68 xuegod69
(用ceph-deploy把配置文件和admin密鑰拷貝到全部節點,這樣每次執行Ceph命令行時就無需指定monitor地址和ceph.client.admin.keyring了) [root@xuegod67 ceph]# ceph-deploy admin xuegod67 xuegod68 xuegod69 各節點修改ceph.client.admin.keyring權限: [root@xuegod67 ceph]#chmod +r /etc/ceph/ceph.client.admin.keyring
[root@xuegod67 ceph]# ceph health 或 ceph -s
HEALTH_OK
[root@xuegod67 ceph]# ceph-deploy mds create xuegod68 xuegod69 #咱們MDS安裝2臺 [root@xuegod67 ceph]# ceph mds stat #查看狀態
[root@xuegod67 ceph]# ceph -s
以上基本上完成了ceph存儲集羣的搭建。
[root@xuegod67 ceph]# ceph fs ls #建立以前 No filesystems enabled 建立存儲池 [root@xuegod67 ceph]# ceph osd pool create cephfs_data <pg_num> [root@xuegod67 ceph]# ceph osd pool create cephfs_metadata <pg_num>
其中:<pg_num> = 128 ,
關於建立存儲池
肯定 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 取值變得更加劇要,由於它顯著地影響着集羣的行爲、以及出錯時的數據持久性(即災難性事件致使數據丟失的機率)。
建立好存儲池後,你就能夠用 fs new 命令建立文件系統了
[root@xuegod67 ceph]# ceph fs new <fs_name> cephfs_metadata cephfs_data 其中:<fs_name> = cephfs 可自定義 [root@xuegod67 ceph]# ceph fs ls #查看建立後的cephfs [root@xuegod67 ceph]# ceph mds stat #查看mds節點狀態 e6: 1/1/1 up {0=xuegod69=up:active}, 1 up:standby active是活躍的,另1個是處於熱備份的狀態
有不一樣掛載方式
[root@xuegod70 ceph]# mkdir /opt #建立掛載點 存儲密鑰(若是沒有在管理節點使用ceph-deploy拷貝ceph配置文件) cat /etc/ceph/ceph.client.admin.keyring 將key對應的值複製下來保存到文件:/etc/ceph/admin.secret中。 掛載 [root@xuegod70 ceph]# mount -t ceph 10.10.10.67:6789:/ /opt -o name=admin,secretfile=/etc/ceph/admin.secret 取消掛載 [root@xuegod70 ceph]# umount /opt
安裝ceph-fuse [root@xuegod70 ceph]# yum install -y ceph-fuse 掛載 [root@xuegod70 ceph]# ceph-fuse -m 10.10.10.67:6789 /opt 取消掛載 [root@xuegod70 ceph]# fusermount -u /opt
ceph在開源社區仍是比較熱門的,可是更多的是應用於雲計算的後端存儲。因此大多數在生產環境中使用ceph的公司都會有專門的團隊對ceph進行二次開發,ceph的運維難度也比較大。可是通過合理的優化以後,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