1.概述
隨著OpenStack日漸成為開源云計算的標準軟件棧,Ceph也已經(jīng)成為OpenStack的首選后端存儲爱沟。Ceph是一種為優(yōu)秀的性能、可靠性和可擴展性而設(shè)計的統(tǒng)一的赎瑰、分布式文件系統(tǒng)锡垄。
- ceph官方文檔 http://docs.ceph.org.cn/
- ceph中文開源社區(qū) http://ceph.org.cn/
Ceph是一個開源的分布式文件系統(tǒng)。因為它還支持塊存儲来破、對象存儲篮灼,所以很自然的被用做云計算框架openstack或cloudstack整個存儲后端。當然也可以單獨作為存儲徘禁,例如部署一套集群作為對象存儲诅诱、SAN存儲、NAS存儲等送朱。
1.1 ceph支持
- 對象存儲:即RADOSGW,兼容S3接口娘荡。通過REST API上傳、下載文件驶沼。
- 文件系統(tǒng):POSIX接口炮沐。可以將CEPH集群看做一個共享文件系統(tǒng)掛載到本地回怜。
- 塊存儲:即RBD大年。有KERNEL RBD和LIBRBD兩種使用方式。支持快照、克隆鲜戒。相當于一塊硬盤掛到本地,用法和用途和硬盤一樣抹凳。比如在OPENSTACK項目里遏餐,CEPH的塊設(shè)備存儲可以對接OPENSTACK的后端存儲。
1.2 Ceph相比其它分布式存儲有哪些優(yōu)點赢底?
- 統(tǒng)一存儲
- 雖然ceph底層是一個分布式文件系統(tǒng)失都,但由于在上層開發(fā)了支持對象和塊的接口。所以在開源存儲軟件中幸冻,能夠一統(tǒng)江湖粹庞。至于能不能千秋萬代,就不知了洽损。
- 高擴展性
- 擴容方便庞溜、容量大。能夠管理上千臺服務(wù)器碑定、EB級的容量流码。
- 可靠性強
- 支持多份強一致性副本,EC延刘。副本能夠垮主機漫试、機架、機房碘赖、數(shù)據(jù)中心存放驾荣。所以安全可靠。存儲節(jié)點可以自管理普泡、自動修復(fù)播掷。無單點故障,容錯性強劫哼。
- 高性能
- 因為是多個副本叮趴,因此在讀寫操作時候能夠做到高度并行化。理論上权烧,節(jié)點越多眯亦,整個集群的IOPS和吞吐量越高。另外一點ceph客戶端讀寫數(shù)據(jù)直接與存儲設(shè)備(osd) 交互般码。
1.3 Ceph各組件介紹
- Ceph OSDs: Ceph OSD 守護進程( Ceph OSD )的功能是存儲數(shù)據(jù)妻率,處理數(shù)據(jù)的復(fù)制、恢復(fù)板祝、回填宫静、再均衡,并通過檢查其他OSD 守護進程的心跳來向 Ceph Monitors 提供一些監(jiān)控信息。當 Ceph 存儲集群設(shè)定為有2個副本時孤里,至少需要2個 OSD 守護進程伏伯,集群才能達到 active+clean 狀態(tài)( Ceph 默認有3個副本,但你可以調(diào)整副本數(shù))捌袜。
- Monitors: Ceph Monitor維護著展示集群狀態(tài)的各種圖表说搅,包括監(jiān)視器圖、 OSD 圖虏等、歸置組( PG )圖弄唧、和 CRUSH 圖。 Ceph 保存著發(fā)生在Monitors 霍衫、 OSD 和 PG上的每一次狀態(tài)變更的歷史信息(稱為 epoch 候引。
- MDSs: Ceph 元數(shù)據(jù)服務(wù)器( MDS )為 Ceph 文件系統(tǒng)存儲元數(shù)據(jù)(也就是說,Ceph 塊設(shè)備和 Ceph 對象存儲不使用MDS )敦跌。元數(shù)據(jù)服務(wù)器使得 POSIX 文件系統(tǒng)的用戶們澄干,可以在不對 Ceph 存儲集群造成負擔的前提下,執(zhí)行諸如 ls柠傍、find 等基本命令傻寂。
2.Ceph實驗集群部署
2.1 主機準備 (禁用selinux, 關(guān)閉防火墻)
192.168.20.19 ceph1 admin,osd, mon 作為管理和監(jiān)控節(jié)點
192.168.20.21 ceph2 osd,mds
192.168.20.22 ceph3 osd,mds
192.168.20.23 ceph-client client
- ceph1作管理. osd. mon節(jié)點;
- ceph2和ceph3作osd mds;
- ceph-client客戶端;
前三臺服務(wù)器增加一塊硬盤/dev/sdb實驗, 創(chuàng)建目錄并掛載到/var/local/osd{1,2,3};
[root@ceph1 ~]#mkfs.xfs /dev/sdb
[root@ceph1 ~]#mkdir -p /var/local/osd1
[root@ceph1 ~]#mount /dev/sdb /var/local/osd1/
[root@ceph1 ~]#chown -R ceph:ceph /var/local/osd*
[root@ceph2 ~]#mkfs.xfs /dev/sdb
[root@ceph2 ~]#mkdir -p /var/local/osd2
[root@ceph2 ~]#mount /dev/sdb /var/local/osd2/
[root@ceph2 ~]#chown -R ceph:ceph /var/local/osd*
[root@ceph3 ~]#mkfs.xfs /dev/sdb
[root@ceph3 ~]#mkdir -p /var/local/osd3
[root@ceph3 ~]#mount /dev/sdb /var/local/osd3/
[root@ceph3 ~]#chown -R ceph:ceph /var/local/osd*
systemctl stop firewalld > /dev/null 2>&1
systemctl disable firewalld > /dev/null 2>&1
setenforce 0 > /dev/null 2>&1
sed -i '/^SELINUX=/s/=.*/=disabled/' /etc/selinux/config
2.2 編輯hosts文件
規(guī)范系統(tǒng)主機名添加hosts文件實現(xiàn)集群主機名與主機名之間相互能夠解析(host 文件添加主機名不要使用fqdn方式)可用hostnamectl set-hostname [name]
設(shè)置分別打開各節(jié)點的/etc/hosts
文件,加入這四個節(jié)點ip與名稱的對應(yīng)關(guān)系:
# cat /etc/hosts
192.168.20.19 ceph1
192.168.20.21 ceph2
192.168.20.22 ceph3
192.168.20.23 ceph-client
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
SSH免密碼登錄
在管理節(jié)點使用ssh-keygen 生成ssh keys 發(fā)布到各節(jié)點
ssh-keygen #所有的輸入選項都直接回車生成携兵。
ssh-copy-id ceph1
ssh-copy-id ceph2
ssh-copy-id ceph3
ssh-copy-id ceph-client
2.3 管理節(jié)點安裝ceph-deploy工具
第一步:增加 yum配置文件(各個節(jié)點都需要增加yum源)vim /etc/yum.repos.d/ceph.repo
[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源
# cat /etc/yum.repos.d/Aliyun-ceph.repo
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
復(fù)制配置文件到其它節(jié)點和客戶端
scp /etc/yum.repos.d/ceph.repo ceph2:/etc/yum.repos.d/
scp /etc/yum.repos.d/ceph.repo ceph3:/etc/yum.repos.d/
scp /etc/yum.repos.d/ceph.repo ceph-client:/etc/yum.repos.d/
在ceph1更新軟件源并安裝ceph-deploy 管理工具
yum clean all &&yum -y install ceph-deploy
2.4 創(chuàng)建monitor服務(wù)
mkdir /etc/ceph && cd /etc/ceph
ceph-deploy new xuegod67
ls
#mon安裝在xuegod67節(jié)點
#生成配置文件在當前目錄下
ceph.conf ceph.log ceph.mon.keyring
Ceph配置文件疾掰、一個monitor密鑰環(huán)和一個日志文件
2.5 修改副本數(shù)
配置文件的默認副本數(shù)從3改成2,這樣只有兩個osd也能達到active+clean
狀態(tài)徐紧,添加行osd_pool_default_size = 2
[root@ceph1 ceph]# cat ceph.conf
[global]
fsid = 1523cad7-6f0e-4901-91b1-5f7aa173ec4f
mon_initial_members = ceph1
mon_host = 192.168.20.19
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2
2.6 在所有節(jié)點安裝ceph
(如果網(wǎng)絡(luò)源安裝失敗静檬,手工安裝epel-release 然后安裝yum –yinstall cep-release再yum –y install ceph ceph-radosgw)
錯誤參考:https://blog.csdn.net/yenai2008/article/details/72457463
# 以下都在ceph1操作
ceph-deploy install ceph1 ceph2 ceph3 ceph-client
# 安裝ceph monitor
ceph-deploy mon create ceph1
# 收集節(jié)點的keyring文件
ceph-deploy gatherkeys ceph1
2.7 部署osd服務(wù)
添加osd節(jié)點 (所有osd節(jié)點執(zhí)行)
我們實驗準備時已經(jīng)創(chuàng)建目錄/var/local/osd{id}
2.8 創(chuàng)建激活osd(ceph1上執(zhí)行)
# 創(chuàng)建osd
ceph-deploy osd prepare ceph1:/var/local/osd1 ceph2:/var/local/osd2 ceph3:/var/local/osd3
# 激活osd
ceph-deploy osd activate ceph1:/var/local/osd1 ceph2:/var/local/osd2 ceph3:/var/local/osd3
#chown -R ceph:ceph /var/local/osd* 有些同學(xué)可能會忘記配置目錄權(quán)限引起激活osd失敗
# 查看狀態(tài)
ceph-deploy osd list ceph1 ceph2 ceph3
2.9 統(tǒng)一配置
(用ceph-deploy把配置文件和admin密鑰拷貝到所有節(jié)點,這樣每次執(zhí)行Ceph命令行時就無需指定monitor地址和ceph.client.admin.keyring了)
# 以下都在ceph1執(zhí)行
[root@ceph1 ceph]# ceph-deploy admin ceph1 ceph2 ceph3 ceph-client
# 會在4臺主機的/etc/ceph目錄下生成文件
[root@ceph1 ceph]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQBz9NdcgCunEhAAMPkfoZaaIpljaA7viB2TEg==
# 各節(jié)點修改ceph.client.admin.keyring權(quán)限:
[root@ceph1 ceph] chmod +r /etc/ceph/ceph.client.admin.keyring
2.10 查看osd狀態(tài) ceph -s 或 ceph health
[root@ceph1 ceph]# ceph -s
cluster 1523cad7-6f0e-4901-91b1-5f7aa173ec4f
health HEALTH_OK
monmap e1: 1 mons at {ceph1=192.168.20.19:6789/0}
election epoch 3, quorum 0 ceph1
fsmap e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
osdmap e20: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v67: 320 pgs, 3 pools, 7110 bytes data, 20 objects
15682 MB used, 33439 MB / 49122 MB avail
320 active+clean
2.11 部署mds服務(wù)
[root@ceph1 ceph]# ceph-deploy mds create ceph2 ceph3#我們MDS安裝2臺
[root@ceph1 ceph]# ceph mds stat #查看狀態(tài)
[root@ceph1 ceph]# ceph mds stat
e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
2.12 集群狀態(tài)
[root@ceph1 ceph]# ceph -s
cluster 1523cad7-6f0e-4901-91b1-5f7aa173ec4f
health HEALTH_OK
monmap e1: 1 mons at {ceph1=192.168.20.19:6789/0}
election epoch 3, quorum 0 ceph1
fsmap e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
osdmap e20: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v67: 320 pgs, 3 pools, 7110 bytes data, 20 objects
15682 MB used, 33439 MB / 49122 MB avail
320 active+clean
以上基本上完成了ceph存儲集群的搭建并级。
3. 創(chuàng)建ceph文件系統(tǒng)
[root@ceph1 ceph]# ceph fs ls #創(chuàng)建之前
No filesystems enabled
創(chuàng)建存儲池
[root@ceph1 ceph]# ceph osd pool create cephfs_data <pg_num>
[root@ceph1 ceph]# ceph osd pool create cephfs_metadata <pg_num>
[root@ceph1 ceph]# ceph osd pool create cephfs_data 128
[root@ceph1 ceph]# ceph osd pool create cephfs_metadata 128
其中:<pg_num> = 128 ,
關(guān)于創(chuàng)建存儲池
確定 pg_num 取值是強制性的拂檩,因為不能自動計算。下面是幾個常用的值:
- 少于 5 個 OSD 時可把 pg_num 設(shè)置為 128
- OSD 數(shù)量在 5 到 10 個時嘲碧,可把 pg_num 設(shè)置為 512
- OSD 數(shù)量在 10 到 50 個時稻励,可把 pg_num 設(shè)置為 4096
- OSD 數(shù)量大于 50 時,你得理解權(quán)衡方法愈涩、以及如何自己計算 pg_num 取值
- 自己計算 pg_num 取值時可借助 pgcalc 工具
隨著 OSD 數(shù)量的增加望抽,正確的 pg_num 取值變得更加重要,因為它顯著地影響著集群的行為履婉、以及出錯時的數(shù)據(jù)持久性(即災(zāi)難性事件導(dǎo)致數(shù)據(jù)丟失的概率)煤篙。
3.1 創(chuàng)建文件系統(tǒng)
創(chuàng)建好存儲池后,你就可以用 fs new 命令創(chuàng)建文件系統(tǒng)了
ceph fs new <fs_name> cephfs_metadata cephfs_data
其中:<fs_name> = cephfs
可自定義
[root@ceph1 ceph]# ceph fs new cephfs cephfs_metadata cephfs_data
[root@ceph1 ceph]# ceph fs ls #查看創(chuàng)建后的cephfs
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@ceph1 ceph]# ceph mds stat #查看mds節(jié)點狀態(tài)
e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
#active是活躍的毁腿,另1個是處于熱備份的狀態(tài)
3.2 掛載Ceph文件系統(tǒng)
#在ceph-client執(zhí)行
[root@ceph-client ceph]# mkdir /ceph
[root@ceph-client ceph]# yum install -y ceph-fuse
[root@ceph-client ceph]# ceph-fuse -m 192.168.20.19:6789/ /ceph
[root@ceph-client ceph]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 96G 4.1G 92G 5% /
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 232M 783M 23% /boot
tmpfs tmpfs 182M 28K 182M 1% /run/user/0
ceph-fuse fuse.ceph-fuse 48G 16G 33G 32% /ceph
取消掛載
[root@ceph-client ceph]# fusermount -u /ceph
在這里想起沒在/etc/fstab配置ceph1辑奈、ceph2苛茂、ceph3的sdb自動掛載。
ceph在開源社區(qū)還是比較熱門的鸠窗,但是更多的是應(yīng)用于云計算的后端存儲妓羊。所以大多數(shù)在生產(chǎn)環(huán)境中使用ceph的公司都會有專門的團隊對ceph進行二次開發(fā),ceph的運維難度也比較大稍计。但是經(jīng)過合理的優(yōu)化之后侍瑟,ceph的性能和穩(wěn)定性都是值得期待的。
3.關(guān)于其他
清理機器上的ceph相關(guān)配置
- 停止所有進程: stop ceph-all
- 卸載所有ceph程序:ceph-deploy uninstall [{ceph-node}]
- 刪除ceph相關(guān)的安裝包:ceph-deploy purge {ceph-node} [{ceph-data}]
- 刪除ceph相關(guān)的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]
- 刪除key:ceph-deploy forgetkeys
- 卸載ceph-deploy管理:yum -y remove ceph-deploy
可以參考內(nèi)容:http://blog.51cto.com/12270625/1887648