Ceph 是一個開源項目,它提供軟件定義的、統 的存儲解決方案 。ceph 是一個可大規模擴展、高性能而且無單點故障的分佈式存儲系統 。從一開始它就運行在通用商用硬件上,具備高度可伸縮性,容量可擴展至 EB級別,甚至更大。
Cep 由於其開放 可擴展、分佈式的本質在存儲領域引發了強烈反響 現在,公有云、私有云以及混合雲模型是提供大規模基礎設施的主流方案,而 Ceph 正變成一個流行的雲存
儲解決方案 雲依賴於商用硬件,而 Ceph 可以充分利用商用硬件爲你提供一個企業級、穩定、高度可靠的存儲系統。node
centos7環境下ceph nautilus版集羣手動部署
#############1、部署計劃#############
(1)物理環境介紹:
DELL x86服務搭建4
配置2路8核 256GB
SSD 500GB1
SAS 15k 600GB*8
2路萬兆網絡linux
(2)軟件環境介紹:
ceph集羣版本 nautilus
linux系統版本 CentOS Linux release 7.5.1804shell
(3)部署規劃:
SSD 500GB 做爲日誌緩存
SAS*2 構建RAID1 安裝CentOS操做系統bootstrap
(4)網絡規劃:
業務網絡 10.10.202.140 10.10.202.141 10.10.202.142 10.10.202.143
集羣網絡 172.16.200.140 172.16.200.141 172.16.200.142 172.16.200.143
主機名 node140 node141 node142 node143 vim
(5)ceph集羣規劃
Ceph各組件介紹:
•Ceph OSD: Ceph OSD 守護進程( Ceph OSD )的功能是存儲數據,處理數據的複製、恢復、回填、再均衡,並經過檢查其餘OSD 守護進程的心跳來向 Ceph Monitors 提供一些監控信息。當 Ceph 存儲集羣設定爲有2個副本時,至少須要2個 OSD 守護進程,集羣才能達到 active+clean 狀態( Ceph 默認有3個副本,但你能夠調整副本數)。
•Monitor: Ceph Monitor維護着展現集羣狀態的各類圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 保存着發生在Monitors 、 OSD 和 PG上的每一次狀態變動的歷史信息(稱爲 epoch )。
•MDS: Ceph 元數據服務器( MDS )爲 Ceph wen件系統存儲元數據(也就是說,Ceph 塊設備和 Ceph 對象存儲不使用MDS )。元數據服務器使得 POSIX 文件系統的用戶們,能夠在不對 Ceph 存儲集羣形成負擔的前提下,執行諸如 ls、find 等基本命令。
•MGR: ceph luminous版本新增長了不少有意思的功能,主要用於管理 pg map 做用 當 ceph-mgr 發生故障, 至關於整個 ceph 集羣都會出現嚴重問題 。centos
OSD規劃 每臺機器 SAS 6 做爲OSD
MDS規劃 運行2個MDS
Monitor規劃 運行2個Monitor ,node140 node142
mgr規劃 運行2個mgr ,node140=standbys node142= admin緩存
#############2、環境準備#############
(1)每臺服務器更新系統,安裝開發組件
shell>yum -y groupinstall "Development tools"
shell>yum -y update
shell>yum -y upgrade服務器
(2)每臺服務器添加國內源,先備份
shell>cd /etc/yum.repos.d/
shell>rename .repo .repo.bak *.repo網絡
添加源,阿里的
shell>rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
shell>wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repossh
shell>vi /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
gpgcheck=0
(3)添加hosts解析
shell>vim /etc/hosts
10.10.202.140 node140
10.10.202.141 node141
10.10.202.142 node142
10.10.202.143 node143
#172.16.200.140 node140
#172.16.200.141 node141
#172.16.200.142 node142
#172.16.200.143 node143
(4)安裝ntp
shell>yum -y install ntp*
shell>systemctl start ntpd
shell>systemctl enable ntpd
shell>ntpdate ntp1.aliyun.com
(5)安裝配置,停用防火牆
shell>sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
shell>setenforce 0
shell>systemctl stop firewalld
shell>systemctl disable firewalld
(6)免密配置,使用140做爲部署節點
[root@node140 cluster]# ssh-keygen
[root@node140 cluster]# ssh-copy-id node141
[root@node140 cluster]# ssh-copy-id node142
[root@node140 cluster]# ssh-copy-id node143
#############3、ceph集羣安裝#############
(1)#手動yum集羣部署
[全部節點安裝ceph]#yum -y install ceph ceph-radosgw
(2)#檢查安裝的包
[全部節點安裝ceph]rpm -qa | egrep -i "ceph|rados|rbd"
(3)#檢查ceph 安裝本版,須要統一版本
[全部節點安裝ceph]#ceph -v 所有都是(nautilus版本)
ceph version 14.2.2 (4f8fa0a0024755aae7d95567c63f11d6862d55be) nautilus (stable)
(4)發現有一個版本是m版本,全部就升級了一會兒
[ceph版本不一致的節點]#yum -y upgrade ceph ceph-radosgw
######################################################################
#######################4、建立第一個monitor_node140#####################
######################################################################
(0)添加配置文件
[root@node140 /]# uuidgen 生成密鑰串
58a12719-a5ed-4f95-b312-6efd6e34e558
[root@node140 /]# vim /etc/ceph/ceph.conf
[global]
public network = 10.10.202.0/24
cluster network = 172.16.200.0/24
fsid = 58a12719-a5ed-4f95-b312-6efd6e34e558
mon initial members = node140,node142
mon host = 10.10.202.140,10.10.202.142
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd journal size = 10240
osd pool default size = 3
osd pool default min size = 1
osd pool default pg num = 64
osd pool default pgp num = 64
osd crush chooseleaf type = 1
osd_mkfs_type = xfs
max mds = 5
mds max file size = 100000000000000
mds cache size = 1000000
mon osd down out interval = 900
[mon]
mon clock drift allowed = .50
mon allow pool delete = true
(1)爲集羣建立密鑰換,並使用以下命令生成Monitor的密鑰
[root@node140 ceph]# ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
creating /tmp/ceph.mon.keyring
(2)建立一個client.admin 用戶 ,並將其添加到密鑰中
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow ' --cap osd 'allow ' --cap mds 'allow ' --cap mgr 'allow '
(4)生產一個引導osd密鑰環,生產一個client.bootstrap-osd用戶並將用戶添加到密鑰環中
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'
creating /var/lib/ceph/bootstrap-osd/ceph.keyring
(5)將密鑰添加到 /tmp/ceph.mon.keyring
[root@node140 ceph]# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
[root@node140 ceph]# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
(6)使用主機名、主機IP地址和FSID生成monmap,把它保存成/tmp/monmap
[root@node140 ceph]# monmaptool --create --add node140 10.10.202.140 --fsid 58a12719-a5ed-4f95-b312-6efd6e34e558 /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: set fsid to 58a12719-a5ed-4f95-b312-6efd6e34e558
monmaptool: writing epoch 0 to /tmp/monmap (1 monitors)
(7)爲 monitor 建立相似 /path/cluster_ name-mon itor l1 ode 式的目錄:
[root@node140 system]# mkdir /var/lib/ceph/mon/ceph-node140
[root@node140 system]# chown ceph.ceph /tmp/ceph.mon.keyring*
(8)初始化mon
[root@node140 system]# ceph-mon --mkfs -i node140 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
[root@node140 system]# ll /var/lib/ceph/mon/ceph-node140/
total 12
-rw-r--r--. 1 ceph ceph 0 Aug 24 15:34 done
-rw-------. 1 ceph ceph 77 Aug 24 15:33 keyring
-rw-r--r--. 1 ceph ceph 8 Aug 24 15:33 kv_backend
-rw-r--r--. 1 ceph ceph 3 Aug 24 15:53 min_mon_release
drwxr-xr-x. 2 ceph ceph 170 Aug 24 16:31 store.db
(9)防止刪除,建立一個文件
[root@node140 system]# touch /var/lib/ceph/mon/ceph-node140/done
(10)啓動mon,設置開機啓動
[root@node140 system]# systemctl start ceph-mon@node140.service
出現告警:
[root@node140 system]# systemctl start ceph-mon@node140
Job for ceph-mon@node140.service failed because start of the service was attempted too often. See "systemctl status ceph-mon@node140.service" and "journalctl -xe" for details.
To force a start use "systemctl reset-failed ceph-mon@node140.service" followed by "systemctl start ceph-mon@node140.service" again.
解決辦法:檢車全部生成的文件,賦予chown ceph.ceph 權限
按照提示強制狀態爲active:systemctl reset-failed ceph-mon@node140.service
[root@node140 system]# systemctl status ceph-mon@node140
[root@node140 system]# systemctl enable ceph-mon@node140
(11)查看集羣狀態,一個monitor告警
[root@node140 system]# ceph status
cluster:
id: 58a12719-a5ed-4f95-b312-6efd6e34e558
health: HEALTH_WARN
1 monitors have not enabled msgr2
services:
mon: 1 daemons, quorum node140 (age 2m)
mgr: no daemons active
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:
(12)啓動mgsr2 告警就消失了
[root@node140 system]# ceph mon enable-msgr2
########################################################################################
#######################5、建立第二個monitor——node142,新增monitor操做相似##################
########################################################################################
(1)把node140生成的文件拷貝到node141,node142, node143,全部主機有了密鑰就能夠加入集羣
[root@node140 system]#scp /etc/ceph/* root@node142:/etc/ceph/
[root@node140 system]#scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node142:/var/lib/ceph/bootstrap-osd/
[root@node140 system]#scp /tmp/ceph.mon.keyring root@node142:/tmp/ceph.mon.keyring
(2)修改配置文件:
[root@node142 ceph]# vim /etc/ceph/ceph.conf
[global]
public network = 10.10.202.0/24
cluster network = 172.16.200.0/24
fsid = 58a12719-a5ed-4f95-b312-6efd6e34e558
mon initial members = node142,node140
mon host = 10.10.202.142,10,.10.202.140
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd journal size = 10240
osd pool default size = 3
osd pool default min size = 1
osd pool default pg num = 64
osd pool default pgp num = 64
osd crush chooseleaf type = 1
osd_mkfs_type = xfs
max mds = 5
mds max file size = 100000000000000
mds cache size = 1000000
mon osd down out interval = 900
[mon]
mon clock drift allowed = .50
(3)必定要注意權限,大部分錯誤都是權限問題
[root@node142 ceph]# chown ceph.ceph /etc/ceph/
[root@node142 ceph]# chown ceph.ceph /var/lib/ceph/bootstrap-osd/
[root@node142 ceph]# chown ceph.ceph /tmp/ceph.mon.keyring
(4)添加數據目錄
[root@node142 ceph]# mkdir /var/lib/ceph/mon/ceph-node142
[root@node142 ceph]# chown -R ceph.ceph /var/lib/ceph/mon/*
(5)獲取密鑰信息
[root@node142 ceph-node142]# ceph auth get mon. -o /tmp/ceph-node142/monkeyring
exported keyring for mon.
[root@node142 ceph-node142]# ceph mon getmap -o /tmp/ceph.mon.map
got monmap epoch 1
(6)初始化mon
[root@node142 ceph-node142]# ceph-mon --mkfs -i node142 --monmap /tmp/ceph.mon.map --keyring /tmp/ceph.mon.keyring
[root@node142 ceph-node142]# ll /var/lib/ceph/mon/ceph-node142/
總用量 8
-rw-------. 1 ceph ceph 77 8月 24 16:47 keyring
-rw-r--r--. 1 ceph ceph 8 8月 24 16:47 kv_backend
drwxr-xr-x. 2 ceph ceph 112 8月 24 16:47 store.db
(7)防止刪除
[root@node142 ceph-node142]# touch /var/lib/ceph/mon/ceph-node142/done
(8)將新的mon 節點添加至ceph集羣的mon列表
[root@node142 ceph]# ceph mon add node142 10.10.202.142:6789
adding mon.node142 at [v2:10.10.202.142:3300/0,v1:10.10.202.142:6789/0]
(9)啓動新的mon
[root@node142 ceph]# systemctl start ceph-mon@node142
[root@node142 ceph]# systemctl status ceph-mon@node142
[root@node142 ceph]# systemctl enable ceph-mon@node142
[root@node142 journal]# netstat -tunlp | grep mon
tcp 0 0 10.10.202.142:3300 0.0.0.0: LISTEN 27642/ceph-mon #3300是mgr端口
tcp 0 0 10.10.202.142:6789 0.0.0.0: LISTEN 27642/ceph-mon #6789 是monitor端口
#建立完成查看ceph -s集羣狀態
[root@node140 system]# ceph -s
如存在警告1 monitors have not enabled msgr2,則:
#ceph mon stat
會看到node01沒有啓用v2,
登陸到node01上運行:
#ceph mon enable-msgr2
而後重啓服務
#systemctl restart ceph-mon@node01
[root@node140 system]# ceph -s
cluster:
id: 58a12719-a5ed-4f95-b312-6efd6e34e558
health: HEALTH_OK
services:
mon: 2 daemons, quorum node140,node142 (age 9m)
mgr: no daemons active
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:
####################################################################################
#####################6、建立OSD--node140,其餘3臺主機操做相似#########################
####################################################################################
(0)#列出盤 ,sdb sdc sdd sde sdf sdg ,就是須要添加的osd
[root@node140 ]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 557.9G 0 disk
├─sda1 8:1 0 200M 0 part /boot
└─sda2 8:2 0 519.4G 0 part
└─centos-root 253:0 0 519.4G 0 lvm /
sdb 8:16 0 558.9G 0 disk
sdc 8:32 0 558.9G 0 disk
sdd 8:48 0 558.9G 0 disk
sde 8:64 0 558.9G 0 disk
sdf 8:80 0 558.9G 0 disk
sdg 8:96 0 558.9G 0 disk
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 465.8G 0 disk
├─nvme0n1p1 259:1 0 16.7G 0 part
├─nvme0n1p2 259:2 0 18.6G 0 part
├─nvme0n1p3 259:3 0 18.6G 0 part
├─nvme0n1p4 259:4 0 18.6G 0 part
├─nvme0n1p5 259:5 0 18.6G 0 part
└─nvme0n1p6 259:6 0 18.6G 0 part
(1)#將4臺服務器做爲osd磁盤標記爲GPT格式
[root@node140 ]# parted /dev/sdc mklabel GPT
[root@node140 ]# parted /dev/sdd mklabel GPT
[root@node140 ]# parted /dev/sdf mklabel GPT
[root@node140 ]#parted /dev/sdg mklabel GPT
[root@node140 ]# parted /dev/sde mklabel GPT
(2)#格式化成爲xfs文件系統
[root@node140 ]# mkfs.xfs -f /dev/sdc
[root@node140 ]# mkfs.xfs -f /dev/sdd
[root@node140 ]# mkfs.xfs -f /dev/sde
[root@node140 ]# mkfs.xfs -f /dev/sdf
[root@node140 ]# mkfs.xfs -f /dev/sdg
(3)#建立osd
[root@node140 ~]# ceph-volume lvm create --data /dev/sdb
--> ceph-volume lvm activate successful for osd ID: 0
--> ceph-volume lvm create successful for: /dev/sdb
[root@node140 ~]# ceph-volume lvm create --data /dev/sdc
[root@node140 ~]# ceph-volume lvm create --data /dev/sdd
[root@node140 ~]# ceph-volume lvm create --data /dev/sde
[root@node140 ~]# ceph-volume lvm create --data /dev/sdf
[root@node140 ~]# ceph-volume lvm create --data /dev/sdg
[root@node140 ~]# ceph-volume lvm create --data /dev/sde
(4)#查看建立osd
[root@node140 ~]# ceph-volume lvm list
[root@node140 ~]# lsblk
(5)#OSD會自動啓動
[root@node140 ~]# ceph-volume lvm list
====== osd.0 =======
顯示osd.num,num後面會用到。
[root@node140 ~]# systemctl start ceph-osd@1
[root@node140 ~]# systemctl status ceph-osd@1
[root@node140 ~]# systemctl enable ceph-osd@1
(6)#查看全部的osd,已經完成了3臺主機的操做,node143操做相似
[root@node140 /]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 9.80804 root default
-2 3.26935 host node140
0 hdd 0.54489 osd.0 up 1.00000 1.00000
1 hdd 0.54489 osd.1 up 1.00000 1.00000
2 hdd 0.54489 osd.2 up 1.00000 1.00000
3 hdd 0.54489 osd.3 up 1.00000 1.00000
4 hdd 0.54489 osd.4 up 1.00000 1.00000
5 hdd 0.54489 osd.5 up 1.00000 1.00000
-3 3.26935 host node141
12 hdd 0.54489 osd.12 up 1.00000 1.00000
13 hdd 0.54489 osd.13 up 1.00000 1.00000
14 hdd 0.54489 osd.14 up 1.00000 1.00000
15 hdd 0.54489 osd.15 up 1.00000 1.00000
16 hdd 0.54489 osd.16 up 1.00000 1.00000
17 hdd 0.54489 osd.17 up 1.00000 1.00000
-4 3.26935 host node142
6 hdd 0.54489 osd.6 up 1.00000 1.00000
7 hdd 0.54489 osd.7 down 1.00000 1.00000
8 hdd 0.54489 osd.8 down 1.00000 1.00000
9 hdd 0.54489 osd.9 up 1.00000 1.00000
10 hdd 0.54489 osd.10 up 1.00000 1.00000
11 hdd 0.54489 osd.11 up 1.00000 1.00000
###############################################################################
#######################7、安裝mgr——node142做爲admin###########################
###############################################################################
(1)#建立認證key
[root@node142 ~]# ceph auth get-or-create mgr.admin mon 'allow profile mgr' osd 'allow ' mds 'allow '
[mgr.admin]
key = AQA+MmFd8RR/GxAAFIoz61DzAJqxsRJblJSIRA==
(2)#建立目錄
[root@node142 ~]# mkdir /var/lib/ceph/mgr/ceph-admin/
(3)#將建立的key導出到指定目錄
[root@node142 ~]# ceph auth get mgr.admin -o /var/lib/ceph/mgr/ceph-admin/keyring
(4)#修改權限 ceph
[root@node142 ~]# chown -R ceph.ceph /var/lib/ceph/mgr/ceph-admin/*
(5)#啓動服務
[root@node142 ~]#systemctl start ceph-mgr@admin
[root@node142 ~]# systemctl status ceph-mgr@admin
[root@node142 ~]# systemctl enable ceph-mgr@admin
#########################################################################
#######################8、安裝mgr——node140,做爲備節點###################
#########################################################################
(1)#建立認證key
[root@node140 mgr]# ceph auth get-or-create mgr.node140 mon 'allow profile mgr' osd 'allow ' mds 'allow '
[mgr.node140]
key = AQBjNWFdexEhNxAAH58VlpUlaX1SC/t4jzMApA==
(2)#建立目錄
[root@node140 mgr]# mkdir /var/lib/ceph/mgr/ceph-node140/
(3)#導出key到指定目錄
[root@node140 ceph-node140]# ceph auth get mgr.node140 -o /var/lib/ceph/mgr/ceph-node140/keyring
exported keyring for mgr.node140
(4)#修改權限
[root@node140 ceph-node140]# chown -R ceph.ceph /var/lib/ceph/mgr/ceph-node140/*
(5)#啓動mgr服務
[root@node140 ceph-node140]# systemctl status ceph-mgr@node140
[root@node140 ceph-node140]# systemctl status ceph-mgr@node140
[root@node140 ceph-node140]# systemctl enable ceph-mgr@node140
(6)集羣檢查
[root@node140 /]# ceph -s
cluster:
id: 58a12719-a5ed-4f95-b312-6efd6e34e558
health: HEALTH_WARN
noout flag(s) set
2 osds down
Degraded data redundancy: 820/7737 objects degraded (10.598%), 43 pgs degraded, 81 pgs undersized
services:
mon: 2 daemons, quorum node140,node142 (age 17h)
mgr: admin(active, since 2d), standbys: node140
osd: 18 osds: 16 up (since 16h), 18 in (since 2d)
flags noout
到這裏,整個集羣就建立完成了,接下來就是要怎麼去使用ceph存儲資源了。
包括:
塊設備的使用:
(1)客戶端使用塊設備
(2)塊設備的在線擴容
(3)塊設備的快照
(4)塊設備的複製
ceph fs的使用:
(1)使用內核無底洞掛在cephfs
(2)經過fuse方式掛在cephfs
ceph RADOS網關的對象存儲ceph平常的管理操做