ceph簡介html
Ceph是一個具備高擴展、高可用、高性能的分佈式存儲系統,根據場景劃分能夠將Ceph分爲對象存儲、塊設備存儲和文件系統服務。在虛擬化領域裏,比較經常使用到的是Ceph的塊設備存儲,好比在OpenStack項目裏,Ceph的塊設備存儲能夠對接OpenStack的cinder後端存儲、Glance的鏡像存儲和虛擬機的數據存儲。比較直觀的是Ceph集羣能夠提供一個raw格式的塊存儲來做爲虛擬機實例的硬盤。
Ceph相比其它存儲的優點點在於它不僅僅是存儲,同時還充分利用了存儲節點上的計算能力,在存儲每個數據時,都會經過計算得出該數據存儲的位置,儘可能將數據分佈均衡。同時因爲Ceph自己的良好設計,採用了CRUSH算法、HASH環等方法,使得它不存在傳統的單點故障的問題,且隨着規模的擴大性能並不會受到影響。node
ceph 目前提供對象存儲(RADOSGW)、塊存儲RDB以及 CephFS 文件系統這 3 種功能。對於這3種功能介紹,分別以下:python
1.對象存儲,也就是一般意義的鍵值存儲,其接口就是簡單的GET、PUT、DEL 和其餘擴展,表明主要有 Swift 、S3 以及 Gluster 等;linux
2.塊存儲,這種接口一般以 QEMU Driver 或者 Kernel Module 的方式存在,這種接口須要實現 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,×××的雲硬盤和阿里雲的盤古系統,還有 Ceph 的 RBD(RBD是Ceph面向塊存儲的接口)。在常見的存儲中 DAS、SAN 提供的也是塊存儲;算法
3.文件存儲,一般意義是支持 POSIX 接口,它跟傳統的文件系統如 Ext4 是一個類型的,但區別在於分佈式存儲提供了並行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存儲的接口),可是有時候又會把 GlusterFS ,HDFS 這種非POSIX接口的類文件存儲接口納入此類。固然 NFS、NAS也是屬於文件系統存儲;bootstrap
ceph組件介紹vim
Ceph的核心構成包括:Ceph OSD(對象存出設備)、Ceph Monitor(監視器) 、Ceph MSD(元數據服務器)、Object、PG、RADOS、Libradio、CRUSH、RDB、RGW、CephFS後端
OSD:全稱 Object Storage Device,真正存儲數據的組件,通常來講每塊參與存儲的磁盤都須要一個 OSD 進程,若是一臺服務器上又 10 塊硬盤,那麼該服務器上就會有 10 個 OSD 進程。centos
MON:MON經過保存一系列集羣狀態 map 來監視集羣的組件,使用 map 保存集羣的狀態,爲了防止單點故障,所以 monitor 的服務器須要奇數臺(大於等於 3 臺),若是出現意見分歧,採用投票機制,少數服從多數。bash
MDS:全稱 Ceph Metadata Server,元數據服務器,只有 Ceph FS 須要它。
Object:Ceph 最底層的存儲單元是 Object 對象,每一個 Object 包含元數據和原始數據。
PG:全稱 Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層實際上是爲了更好的分配數據和定位數據。
RADOS:全稱Reliable Autonomic Distributed Object Store,是Ceph集羣的精華,可靠自主分佈式對象存儲,它是 Ceph 存儲的基礎,保證一切都以對象形式存儲。
Libradio:Librados是Rados提供庫,由於RADOS是協議很難直接訪問,所以上層的RBD、RGW和CephFS都是經過librados訪問的,目前僅提供PHP、Ruby、Java、Python、C和C++支持。
CRUSH:是Ceph使用的數據分佈算法,相似一致性哈希,讓數據分配到預期的地方。
RBD:全稱 RADOS block device,它是 RADOS 塊設備,對外提供塊存儲服務。
RGW:全稱 RADOS gateway,RADOS網關,提供對象存儲,接口與 S3 和 Swift 兼容。
CephFS:提供文件系統級別的存儲。
ceph集羣服務器規劃
名稱 | ip | 系統 |
硬盤 | 角色 |
node1 | 192.168.0.198 | centos7.2(最小化)2核2G | sda系統盤30G,sdb20G,sdc20G | mon,osd,mgr,deploy |
node2 | 192.168.0.199 | centos7.2(最小化)2核2G | sda系統盤30G,sdb20G,sdc20G | mon,osd,mgr |
node3 | 192.168.0.200 | centos7.2(最小化)2核2G | sda系統盤30G,sdb20G,sdc20G | mon,osd,mgr |
服務器環境準備(三臺機器)
安裝centos7.2系統,最小化安裝
設置好網絡和防火牆 網絡須要能訪問外網,
ip 192.168.0.198
下面關閉防火牆
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux
設置yum源
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install epel-release
yum -y install vim wget lrzsz net-tools
而後清理掉其餘yum源文件
ceph源
/etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
配置主機名
hostnamectl set-hostname node1
hostname node1 ##198機器
hostnamectl set-hostname node2
hostname node2 ##199機器
hostnamectl set-hostname node3
hostname node3 ##200機器
增長hosts解析
vi /etc/hosts
192.168.0.198 node1
192.168.0.199 node2
192.168.0.200 node3
時間同步
yum install ntpdate -y
ntpdate 0.asia.pool.ntp.org
crontab -e
*/5 * * * * ntpdate 0.asia.pool.ntp.org
配置python2.7環境
cd /tmp
unzip setuptools-41.0.0.zip
cd setuptools-41.0.0
python setup.py install
tar zxf pip-19.0.3.tar.gz
cd pip-19.0.3
python setup.py install
配置免密登陸
ssh-keygen -t rsa -P ""
ssh-copy-id 192.168.0.198
ssh-copy-id 192.168.0.199
ssh-copy-id 192.168.0.200
ssh node1
ssh node2
ssh node3
=================================================
安裝ceph
yum -y install ceph-deploy (node1上)
查看版本
ceph-deploy --version
建立安裝目錄
mkdir /ceph-install && cd /ceph-install
建立ceph集羣
ceph-deploy new node1 node2 node3
所有節點安裝ceph (時間會比較長)
ceph-deploy install node1 node2 node3
或在節點上手動執行 yum install -y ceph
安裝mon監控(會生成祕鑰文件)
ceph-deploy mon create-initial
監控在/ceph-install 目錄下執行,祕鑰文件也會保存在這個目錄
須要把祕鑰文件複製到/etc/ceph/目錄,才能正常執行ceph集羣命令 如ceph -s
cp *.keyring /etc/ceph/
[root@localhost ceph-install]# ll 總用量 476 -rw------- 1 root root 71 4月 22 14:56 ceph.bootstrap-mds.keyring -rw------- 1 root root 71 4月 22 14:56 ceph.bootstrap-mgr.keyring -rw------- 1 root root 71 4月 22 14:56 ceph.bootstrap-osd.keyring -rw------- 1 root root 71 4月 22 14:56 ceph.bootstrap-rgw.keyring -rw------- 1 root root 63 4月 22 14:56 ceph.client.admin.keyring -rw-r--r-- 1 root root 238 4月 22 14:24 ceph.conf -rw-r--r-- 1 root root 434608 4月 22 14:56 ceph-deploy-ceph.log -rw------- 1 root root 73 4月 22 14:24 ceph.mon.keyring
查看集羣 ceph -s
[root@localhost ceph-install]# ceph -s cluster: id: ed5d45f5-d722-4a3d-970b-d5936617919c health: HEALTH_OK services: mon: 3 daemons, quorum node1,node2,node3 mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0B usage: 0B used, 0B / 0B avail pgs:
建立OSD
ceph-deploy osd create node1 --data /dev/sdb
ceph-deploy osd create node1 --data /dev/sdc
ceph-deploy osd create node2 --data /dev/sdb
ceph-deploy osd create node2 --data /dev/sdc
ceph-deploy osd create node3 --data /dev/sdb
ceph-deploy osd create node3 --data /dev/sdc
把配置及admin祕鑰放到各個節點
ceph-deploy --overwrite-conf admin node1 node2 node3
部署mgr
ceph-deploy mgr create node1 node2 node3
查看ceph狀態
[root@localhost ceph-install]# ceph -s cluster: id: ed5d45f5-d722-4a3d-970b-d5936617919c health: HEALTH_OK services: mon: 3 daemons, quorum node1,node2,node3 mgr: node1(active), standbys: node3, node2 osd: 6 osds: 6 up, 6 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0B usage: 6.02GiB used, 114GiB / 120GiB avail pgs:
查看osd狀態
[root@localhost ceph-install]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.11691 root default -3 0.03897 host node1 0 hdd 0.01949 osd.0 up 1.00000 1.00000 1 hdd 0.01949 osd.1 up 1.00000 1.00000 -5 0.03897 host node2 2 hdd 0.01949 osd.2 up 1.00000 1.00000 3 hdd 0.01949 osd.3 up 1.00000 1.00000 -7 0.03897 host node3 4 hdd 0.01949 osd.4 up 1.00000 1.00000 5 hdd 0.01949 osd.5 up 1.00000 1.00000
cephFS 建立存儲池與文件系統
ceph-fs須要元數據mds服務
全部osd上都建立mds服務
ceph-deploy mds create node1 node2 node3
接着建立poll存儲池和名爲data的文件系統
ceph osd pool create data_data 32
ceph osd pool create data_metadata 32
ceph fs new data data_metadata data_data
查看存儲池和文件系統
ceph osd pool ls
ceph fs ls
客戶端掛載
找一個客戶機器,安裝ceph-fuse掛載文件系統
mkdir /guazai
首先安裝 yum install -y ceph-fuse
而後將ceph集羣的配置文件和ceph.client.admin.keyring認證文件複製過來,注意keyring名稱變化
scp 192.168.0.198:/etc/ceph/ceph.conf /etc/ceph/
scp 192.168.0.198:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.keyring
執行掛載
ceph-fuse -m 192.168.0.198,192.168.0.199,192.168.0.200:6789 /guazai
[root@node1 ceph]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 28G 3.6G 25G 13% / devtmpfs 904M 0 904M 0% /dev tmpfs 913M 0 913M 0% /dev/shm tmpfs 913M 8.7M 904M 1% /run tmpfs 913M 0 913M 0% /sys/fs/cgroup /dev/sda1 297M 109M 189M 37% /boot tmpfs 913M 24K 913M 1% /var/lib/ceph/osd/ceph-1 tmpfs 913M 24K 913M 1% /var/lib/ceph/osd/ceph-0 tmpfs 183M 0 183M 0% /run/user/0 ceph-fuse 36G 0 36G 0% /guazai
RDB塊存儲方式
查看存儲池
ceph osd pool ls
建立存儲池
ceph osd pool create cephrbd 256
建立名爲image的鏡像大小10G
rbd create cephrbd/image --image-feature layering --size 10G
查看池中鏡像及信息
rbd ls cephrbd
rbd info cephrbd/image
[root@node1 ~]# rbd ls cephrbd image [root@node1 ~]# rbd info cephrbd/image rbd image 'image': size 10GiB in 2560 objects order 22 (4MiB objects) block_name_prefix: rbd_data.111e6b8b4567 format: 2 features: layering flags: create_timestamp: Mon Apr 22 17:51:43 2019
鏡像擴容
rbd resize --size 15G cephrbd/image
[root@node1 ~]# rbd resize --size 15G cephrbd/image Resizing image: 100% complete...done.
鏡像縮容
rbd resize --size 12G cephrbd/image --allow-shrink
[root@node1 ~]# rbd resize --size 12G cephrbd/image --allow-shrink Resizing image: 100% complete...done.
刪除鏡像
rbd rm cephrbd/demo-img
客戶端掛載使用磁盤鏡像
到客戶機上安裝ceph-common
yum install ceph-common -y
將ceph.conf 和 ceph.client.admin.keyring 拷貝到客戶端機器上
scp 192.168.0.198:/etc/ceph/ceph.conf /etc/ceph/
scp 192.168.0.198:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
而後用ceph -s 客戶機上查看集羣
接着執行ceph osd crush tunables hammer ##防止掛載鏡像missing required protocol features失敗
執行掛載鏡像
rbd map cephrbd/image
[root@node1 ~]# rbd map cephrbd/image /dev/rbd0 [root@node1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 30G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 27.7G 0 part / sdb 8:16 0 20G 0 disk └─ceph--94d4a7fb--5998--42d2--8420--c8486f5f6ed9-osd--block--39bf5af2--aefa--4e1c--881e--7535f273f588 253:0 0 20G 0 lvm sdc 8:32 0 20G 0 disk └─ceph--a76198d8--61d8--4c1a--84d1--c9a0ef0dd806-osd--block--3baaa769--1396--4d2f--8692--189fd23cc68e 253:1 0 20G 0 lvm sr0 11:0 1 4G 0 rom rbd0 252:0 0 12G 0 disk
查看磁盤映射信息
rbd showmapped
[root@node1 ~]# rbd showmapped id pool image snap device 0 cephrbd image - /dev/rbd0
格式化、掛載 /dev/rbd0
mkfs.ext4 /dev/rbd0
[root@node1 ~]# mkdir /image
[root@node1 ~]# mount /dev/rbd0 /image
[root@node1 ~]# echo -e "/dev/rbd0 /image ext4 defaults 0 0" >> /etc/fstab
[root@node1 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 28G 3.6G 25G 13% / devtmpfs 904M 0 904M 0% /dev tmpfs 913M 0 913M 0% /dev/shm tmpfs 913M 8.7M 904M 1% /run tmpfs 913M 0 913M 0% /sys/fs/cgroup /dev/sda1 297M 109M 189M 37% /boot tmpfs 913M 24K 913M 1% /var/lib/ceph/osd/ceph-1 tmpfs 913M 24K 913M 1% /var/lib/ceph/osd/ceph-0 tmpfs 183M 0 183M 0% /run/user/0 /dev/rbd0 12G 41M 12G 1% /image
爲鏡像建立快照
rbd snap create cephrbd/image --snap image-sn1
查看快照
rbd snap ls cephrbd/image
[root@node1 image]# rbd snap ls cephrbd/image SNAPID NAME SIZE TIMESTAMP 4 image-sn1 12GiB Mon Apr 22 19:24:50 2019
刪除快照
rbd snap remove cephrbd/image@image-sn1
[root@node1 ~]# rbd snap remove cephrbd/image@image-sn1 Removing snap: 100% complete...done.
rdb在線擴容
查看設備
[root@node1 image]# rbd showmapped id pool image snap device 0 cephrbd image - /dev/rbd0 [root@node1 image]# rbd info cephrbd/image rbd image 'image': size 12GiB in 3072 objects order 22 (4MiB objects) block_name_prefix: rbd_data.111e6b8b4567 format: 2 features: layering flags: create_timestamp: Mon Apr 22 17:51:43 2019
12G擴容到20G
rbd resize --size 20480 cephrbd/image
[root@node1 image]# rbd resize --size 20480 cephrbd/image Resizing image: 100% complete...done.
擴容格式化
resize2fs /dev/rbd0
[root@node1 image]# resize2fs /dev/rbd0 resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/rbd0 is mounted on /image; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 3 The filesystem on /dev/rbd0 is now 5242880 blocks long. [root@node1 image]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 28G 3.6G 25G 13% / devtmpfs 904M 0 904M 0% /dev tmpfs 913M 0 913M 0% /dev/shm tmpfs 913M 8.7M 904M 1% /run tmpfs 913M 0 913M 0% /sys/fs/cgroup /dev/sda1 297M 109M 189M 37% /boot tmpfs 913M 24K 913M 1% /var/lib/ceph/osd/ceph-1 tmpfs 913M 24K 913M 1% /var/lib/ceph/osd/ceph-0 tmpfs 183M 0 183M 0% /run/user/0 /dev/rbd0 20G 44M 19G 1% /image
上面是ext4 格式操做。對於XFS格式要執行 xfs_growfs -d /image 進行格式化擴容
測試參考
http://www.javashuo.com/article/p-ghmqdwwp-cq.html
https://www.cnblogs.com/zhangzihong/p/9771035.html
http://www.javashuo.com/article/p-yhbhmekt-gg.html