Ceph存儲部署
一、Ceph介紹
Ceph 是一個開源的分布式存儲系統,同時支援對象存儲、塊裝置、檔案系統.。
ceph 是一個對象(object)式存儲系統,它把每一個待管理的資料流(檔案等資料)切分為一到 多個固定大小(預設 4 兆)的對象資料,并以其為原子單元(原子是構成元素的最小單元)完成 資料的讀寫。
對象資料的底層存儲服務是由多個存儲主機(host)組成的存儲叢集,該叢集也被稱之為 RADOS(reliable automatic distributed object store)存儲叢集,即可靠的、自動化的、分布 式的對象存儲系統。
librados 是 RADOS 存儲叢集的 API,支援 C/C++/JAVA/python/ruby/php/go 等程式設計語言用戶端。
二、Ceph元件
2.1 Monitor(ceph-mon) ceph 螢幕
在一個主機上運作的一個守護程序,用于維護叢集狀态映射(maintains maps of the cluster state),比如 ceph 叢集中有多少存儲池、每個存儲池有多少 PG 以及存儲池和 PG 的映射關系等, monitor map, manager map, the OSD map, the MDS map, and the CRUSH map,這些映射是 Ceph 守護程式互相協調所需的關鍵群集狀态,此外螢幕還負 責管理守護程式和用戶端之間的身份驗證(認證使用 cephX 協定)。通常至少需要三個螢幕 才能實作備援和高可用性。
2.2 Managers(ceph-mgr)的功能
在一個主機上運作的一個守護程序,Ceph Manager 守護程式(ceph-mgr)負責跟蹤 運作時名額和 Ceph 叢集的目前狀态,包括存儲使用率,目前性能名額和系統負載。Ceph Manager 守護程式還托管基于 python 的子產品來管理和公開 Ceph 叢集資訊,包括基于 Web 的 Ceph 儀表闆和 REST API。高可用性通常至少需要兩個管理器。
2.3 Ceph OSDs(對象存儲守護程式 ceph-osd)
提供存儲資料,作業系統上的一個磁盤就是一個 OSD 守護程式,OSD 用于處理 ceph 叢集資料複制,恢複,重新平衡,并通過檢查其他 Ceph OSD 守護程式的心跳來向 Ceph 螢幕和管理器提供一些監視資訊。通常至少需要 3 個 Ceph OSD 才能實作備援和高可用 性。
2.4 MDS(ceph 中繼資料伺服器 ceph-mds)
代表 ceph 檔案系統(NFS/CIFS)存儲中繼資料,(即 Ceph 塊裝置和 Ceph 對象存儲不使用 MDS)
三、ceph 邏輯組織架構
- Pool:存儲池、分區,存儲池的大小取決于底層的存儲空間。
- PG(placement group):一個 pool 内部可以有多個 PG 存在,pool 和 PG 都是抽象的邏輯概 念,一個 pool 中有多少個 PG 可以通過公式計算。
- OSD(Object Storage Daemon,對象儲存設備):每一塊磁盤都是一個 osd,一個主機由一個或 多個 osd 組成.
ceph 叢集部署好之後,要先建立存儲池才能向 ceph 寫入資料,檔案在向 ceph 儲存之前要 先進行一緻性 hash 計算,計算後會把檔案儲存在某個對應的 PG 的,此檔案一定屬于某個 pool 的一個 PG,在通過 PG 儲存在 OSD 上。 資料對象在寫到主 OSD 之後再同步對從 OSD 以實作資料的高可用。
四、使用ceph-deploy部署ceph存儲
準備
這裡使用 ceph-deploy 來部署三節點的ceph叢集,節點資訊如下:
10.200.1.100 ceph-node01
10.200.1.101 ceph-node02
10.200.1.102 ceph-node03
所有操作均在 ceph-node01 節點進行操作。
A.在每台機器上都配置hosts
# cat /etc/hosts
10.200.1.100 ceph-node01
10.200.1.101 ceph-node02
10.200.1.102 ceph-node03
B.配置互信免秘登入
ssh-keygen #生成秘鑰,一路回車
ssh-copy-id [email protected]-node01 #将公鑰拷貝到3個節點
C.安裝ansible
yum -y install ansible
cat /etc/ansible/hosts | grep -v ^# | grep -v ^$
[node]
ceph-node01
ceph-node02
ceph-node03
D.關閉SeLinux和Firewall
# ansible node -m copy -a 'src=/etc/hosts dest=/etc/'
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# ansible node -m copy -a 'src=/etc/selinux/config dest=/etc/selinux/'
# systemctl stop firewalld
# systemctl disable firewalld
# ansible node -a 'systemctl stop firewalld'
# ansible node -a 'systemctl disable firewalld'
E.安裝NTP
# yum -y install ntp ntpdate ntp-doc
# systemctl start ntpdate
# systemctl start ntpd
# systemctl enable ntpd ntpdate
# ansible node -a 'yum -y install ntp ntpdate ntp-doc'
# ansible node -a 'systemctl start ntpdate'
# ansible node -a 'systemctl start ntpd'
# ansible node -a 'systemctl enable ntpdate'
# ansible node -a 'systemctl enable ntpd'
F.安裝相應源
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo ###安裝EPEL源
# ansible node -m copy -a 'src=/etc/yum.repos.d/epel.repo dest=/etc/yum.repos.d/'
# yum -y install yum-plugin-priorities
# yum -y install snappy leveldb gdisk python-argparse gperftools-libs
# rpm --import 'https://mirrors.aliyun.com/ceph/keys/release.asc'
# vim /etc/yum.repos.d/ceph.repo ###安裝阿裡雲的ceph源
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/$basearch
enabled=1
gpgcheck=1
priority=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch
enabled=1
gpgcheck=1
priority=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/SRPMS
enabled=1
gpgcheck=1
priority=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
# yum makecache
五、部署ceph叢集
A.安裝ceph-deploy
B.啟動一個新的 ceph 叢集(官方建議建立特定使用者來部署叢集)
# mkdir /etc/ceph && cd /etc/ceph
# ceph-deploy new ceph-node{01,02,03}
# ls
ceph.conf ceph-deploy-ceph.log ceph.log ceph.mon.keyring
# ceph-deploy new --cluster-network 192.168.100.0/24 --public-network 192.168.100.0/24 ceph{01,02,03}
C.部署 octopus 版本的 ceph 叢集并檢視配置檔案
# ceph-deploy install --release octopus ceph{01,02,03}
# ceph --version
ceph version 15.2.14 (79a10589f1f80dfe21e8f9794365ed98143071c4) octopus (stable)
# ls
ceph.conf ceph-deploy-ceph.log ceph.log ceph.mon.keyring rbdmap
# cat ceph.conf
[global]
fsid = afd8b41f-f9fa-41da-85dc-e68a1612eba9
public_network = 10.200.1.0/24
cluster_network = 10.200.2.0/24
mon_initial_members = ceph-node01, ceph-noce02, ceph-node03
mon_host = 10.200.1.100,10.200.1.101,10.200.1.102
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = ceph
注:如果安裝失敗,請yum安裝
# yum -y install ceph ceph-radosgw
D.激活監控節點
# ceph-deploy mon create-initial
# ls
ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph-deploy-ceph.log ceph.mon.keyring
ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.conf ceph.log rbdmap
E.檢視健康狀況
[[email protected] ~]# ceph -s
cluster:
id: 785353d9-521f-4508-affc-fea5f2cc8f18
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03
mgr: ceph-node01(active), standbys: ceph-node02, ceph- node03
osd: 9 osds: 9 up, 9 in
rgw: 1 daemon active
data:
pools: 6 pools, 168 pgs
objects: 225 objects, 1.9 KiB
usage: 25 GiB used, 875 GiB / 900 GiB avail
pgs: 168 active+clean
F.将管理密鑰拷貝到各個節點上
# ceph-deploy admin ceph-node{01,02,03}
# ansible node -a 'ls /etc/ceph/'
10.200.1.101 | SUCCESS | rc=0 >>
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpUxAfBs
10.200.1.102 | SUCCESS | rc=0 >>
ceph.client.admin.keyring
ceph.conf
rbdmap
tmp5Sx_4n
G.建立 ceph 管理程序服務
# ceph-deploy mgr create ceph{01,02,03}
# ceph -s
cluster:
id: afd8b41f-f9fa-41da-85dc-e68a1612eba9
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph01(active), standbys: ceph02, ceph03
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
H.建立 ceph 對象網關執行個體
網關運作後,您應該能夠7480 通過未認證的請求在端口上通路它,如下所示:
http://client-node:7480
注:如果您在任何時候遇到麻煩并且想要重新開始,請執行以下操作清除配置:
ceph-deploy purge <gateway-node1> [<gateway-node2>]
ceph-deploy purgedata <gateway-node1> [<gateway-node2>]
I.啟動 osd 建立資料
# ceph-deploy osd create --data /dev/sdb ceph-node01
# ceph-deploy osd create --data /dev/sdb ceph-node02
# ceph-deploy osd create --data /dev/sdb ceph-node03
# ceph -s
cluster:
id: afd8b41f-f9fa-41da-85dc-e68a1612eba9
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph01(active), standbys: ceph02, ceph03
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs:
擦除磁盤腳本
disk=(sdc sdd sde sdf sdg sdh sdi sdj sdk sdl)
for i in `echo ${disk[@]}`;
do
parted -s /dev/$i rm {1,2}
done
for j in `echo ${disk[@]}`;
do
ceph-disk zap /dev/$j;
done