ceph是一個Linux PB級別的分布式存儲系統,ceph的目標簡單地定義為:
可輕松擴展到PB容量
對多種工作負載的高性能(每秒輸入/輸出操作[IOPS]和帶寬)
高可靠性
與常見的集中式存儲不同,分布式存儲技術並不是將數據存儲在某個或多個特定的節點上,而是通過網絡使用多台機器上的磁盤空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散地存儲在這些機器的各個磁盤上
ceph架構大概可以劃分為四部分:客戶端(數據用戶)、元數據服務器(緩存和同步分布式元數據)、一個對象存儲集群(將數據和元數據作為對象存儲)、集群監視器(執行監視功能)
ceph客戶端
Linux顯示文件系統的一個公共界面(通過虛擬文件系統VFS),ceph的用戶視圖就是透明的。管理員的視圖肯定是不同的,考慮到很多服務器會包含存儲系統這一潛在因素。從用戶的角度看,他們訪問大容量的存儲系統,卻不知道下面聚合成一個大容量的存儲池的元數據服務器,監視器還有獨立的對象存儲設備。用戶只是簡單地看到一個安裝點,在這個點上可以執行標准文件I/O
ceph元數據服務器
元數據服務器(cmds)的工作就是管理文件系統的名稱空間(pools)。雖然元數據和數據兩者都存儲在對象存儲集群,但兩者分別管理,支持可擴展性。事實上,元數據在一個元數據服務器集群上被進一步拆分,元數據服務器能夠自適應地復制和分配名稱空間,避免出現熱點。元數據服務器管理名稱空間部分,可以(為冗余和性能)進行重疊。元數據服務器到名稱空間的映射在 Ceph 中使用動態子樹邏輯分區執行,它允許 Ceph 對變化的工作負載進行調整(在元數據服務器之間遷移名稱空間)同時保留性能的位置
元數據服務器管理 inode 空間,將文件名轉變為元數據。元數據服務器將文件名轉變為索引節點,文件大小,和 Ceph 客戶端用於文件 I/O 的分段數據(布局)
ceph監視器
ceph包含實施集群映射管理的監視器,但是故障管理的一些要素是在對象存儲本身中執行的。當對象存儲設備發生故障或者新設備添加時,監視器就檢測和維護一個有效的集群映射。這個功能按一種分布的方式執行,這種方式中映射升級可以和當前的流量通信。Ceph 使用 Paxos,它是一系列分布式共識算法
ceph對象存儲集群
和傳統的對象存儲類似,Ceph 存儲節點不僅包括存儲,還包括智能。傳統的驅動是只響應來自啟動者的命令的簡單目標。但是對象存儲設備是智能設備,它能作為目標和啟動者,支持與其他對象存儲設備的通信和合作
從存儲角度來看,Ceph 對象存儲設備執行從對象到塊的映射(在客戶端的文件系統層中常常執行的任務)。這個動作允許本地實體以最佳方式決定怎樣存儲一個對象。Ceph 的早期版本在一個名為 EBOFS 的本地存儲器上實現一個自定義低級文件系統。這個系統實現一個到底層存儲的非標准接口,這個底層存儲已針對對象語義和其他特性(例如對磁盤提交的異步通知)調優。今天,B-tree 文件系統(BTRFS)可以被用於存儲節點,它已經實了部分必要功能(例如嵌入式完整性)
因為 Ceph 客戶實現 CRUSH,而且對磁盤上的文件映射塊一無所知,下面的存儲設備就能安全地管理對象到塊的映射。這允許存儲節點復制數據(當發現一個設備出現故障時)。分配故障恢復也允許存儲系統擴展,因為故障檢測和恢復跨生態系統分配。Ceph 稱其為 RADOS
ceph的一個好處就是沒有中心節點,這樣以來任何兩個節點在存儲系統中都是對等的。官方文檔的介紹是使用一個admin節點來部署monitor和osds,如下圖
vcq9o6xhZG1pbr3atePTw21vbml0b3K92rXjwLS0+szmoaM8L3A+DQo8aDMgaWQ9"11-環境准備">1.1 環境准備
(1)准備3台Centos7服務器:
ceph-mon:192.168.123.202
ceph-osd0:192.168.123.203
ceph-osd1:192.168.123.204
(2)軟件環境:
# service firewalld stop
# chkconfig firewalld off
# setenforce 0
# vim /etc/selinux/config
修改為:SELINUX=disabled
更新centos的yum源
# rm -rf /etc/yum.repos.d/*.repo
# wget http://mirrors.aliyun.com/repo/Centos-7.repo
# wget http://mirrors.aliyun.com/repo/epel-7.repo
手動添加ceph的安裝源
# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://download.ceph.com/rpm-hammer/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://download.ceph.com/rpm-hammer/el7/noarch/
gpgcheck=0
執行更新yum源
# yum clean all ; yum makecache
1.2 安裝前的准備
(1)為每個節點添加磁盤用於對象存儲集群
$ parted /dev/sdb
(parted) mklable gpt #使用gpt分區表
(parted) mkpart primary xfs 0 100%
(parted) quit
$ mkfs.xfs /dev/sdb1 #使用xfs文件系統,單個文件大小沒有上限
(2)安裝ceph部署工具
# yum install -y ceph-deploy
(3)添加hosts信息
在所有節點hosts文件中添加如下信息
# vim /etc/hosts
192.168.123.202 ceph-mon
192.168.123.203 ceph-osd0
192.168.123.204 ceph-osd1
(4)同步時間
在管理節點admin(mon)上安裝ntp服務器 ,更新本地時間,啟動ntp服務
# yum install -y ntpdate ntp
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# ntpdate 0.centos.pool.ntp.org
# service ntpd start
設定其他節點與管理節點admin(mon)進行時間同步
# ntpdate ceph-mon
(5)在所有節點添加ceph專用用戶
# useradd ceph
# passwd ceph
(6)添加sudo權限
# echo "ceph ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/ceph
# chmod 0440 /etc/sudoers.d/ceph
# visudo
修改Defaults requiretty 為Defaults:ceph !requiretty
(7)設置管理節點admin(mon)與osds節點ssh互通
# su - ceph
# ssh-keygen
# ssh-copy-id ceph@ceph-osd0
# ssh-copy-id ceph@ceph-osd1
(8)配置ssh的config文件
編輯管理節點admin(mon)的 /home/ceph/.ssh/config文件添加如下信息
# vim /home/ceph/.ssh/config
Host ceph-mon
Hostname ceph-mon
User ceph
Host ceph-osd0
Hostname ceph-osd0
User ceph
Host ceph-osd1
Hostname ceph-osd1
User ceph
如果不添加此文件,每次在執行ceph-deploye命令的時候需要指定 –username選項
修改文件權限
# chown 600 /home/ceph/.ssh/config
1.3 部署對象存儲集群
在這個過程中,我們創建一個對象存儲集群,包括一個ceph monitor和三個ceph osd daemon。
當這個集群達到 active+clean 的狀態時,再擴展這個集群,添加一個元數據服務器(metadate server)和更多的ceph monitor
ceph-deploy命令會輸出文件到當前目錄下,並且會利用輸出的文件。在整個執行的過程中,我們都是用ceph用戶
(1)切換到ceph 用戶
# su – ceph
(2)創建命令執行目錄並授權給ceph
$ sudo mkdir /my-cluster
$ sudo chown ceph:ceph /my-cluster
$ cd /my-cluster
(3)創建集群
$ ceph-deploy new ceph-mon
(4)為所有節點安裝部署ceph
$ ceph-deploy install ceph-mon ceph-osd0 ceph-osd1
此步驟可以所有節點單獨離線安裝:
# yum install -y redhat-lsb
# yum -y install ceph ceph-radosgw
(5)添加ceph monitor
$ ceph-deploy mon create-initial
(6)添加osds
$ ceph-deploy osd prepare ceph-mon:/dev/sdb1 ceph-osd0:/dev/sdb1 ceph-osd1:/dev/sdb1
$ ceph-deploy osd activate ceph-mon:/dev/sdb1 ceph-osd0:/dev/sdb1 ceph-osd1:/dev/sdb1
(7)拷貝配置文件和admin key到admin節點和其他節點
$ ceph-deploy admin ceph-mon ceph-osd0 ceph-osd1
$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
拷貝之後可以使用ceph命令行而不用指定monitor地址和ceph.client.admin.keyring
(8)查看ceph狀態
$ ceph health
$ ceph status (或者$ ceph -s)
(9)添加元數據服務器(mds)
$ ceph-deploy mds create ceph-mon
接下來就可以使用ceph了
1.4 添加存儲
ceph可以用作文件存儲、塊存儲、對象存儲。這裡以塊存儲來演示ceph的使用
(1)創建存儲池(pools)
[ceph@ceph-osd1 ~]$ ceph osd pool create ceph-pool 256 256
(2)創建塊存儲設備
[ceph@ceph-osd1 ~]$ rbd create ceph-block --size 200 --pool ceph-pool
(3)將塊存儲設備映射到本地並掛載使用
[ceph@ceph-osd1 ~]$ sudo modprobe rbd [ceph@ceph-osd1 ~]$ sudo rbd map ceph-block --pool ceph-pool /dev/rbd0 [ceph@ceph-osd1 ~]$ rbd showmapped id pool image snap device 0 ceph-pool ceph-block - /dev/rbd0
(4)格式化存儲設備,並掛載
[ceph@ceph-osd1 ~]$ sudo mkfs.ext4 /dev/rbd0 mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=4096 blocks, Stripe width=4096 blocks 51200 inodes, 204800 blocks 10240 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=33816576 25 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done [ceph@ceph-osd1 ~]$ sudo mount /dev/rbd0 /mnt [ceph@ceph-osd1 ~]$ ls /mnt lost+found