Ceph 是一个开源项目,它提供软件定义的、统 的存储解决方案 。ceph 是一个可大规模扩展、高性能并且无单点故障的分布式存储系统 。从一开始它就运行在通用商用硬件上,具有高度可伸缩性,容量可扩展至 EB级别,甚至更大。 Cep 因为其开放 可扩展、分布式的本质在存储领域引起了强烈反响 如今,公有云、私有云以及混合云模型是提供大规模基础设施的主流方案,而 Ceph 正变成一个流行的云存 储解决方案 云依赖于商用硬件,而 Ceph 能够充分利用商用硬件为你提供一个企业级、稳定、高度可靠的存储系统。

centos7环境下ceph nautilus版集群手动部署 #############一、部署计划############# (1)物理环境介绍: DELL x86服务搭建4 配置2路8核 256GB
SSD 500GB
1
SAS 15k 600GB*8
2路万兆网络

(2)软件环境介绍: ceph集群版本 nautilus linux系统版本 CentOS Linux release 7.5.1804

(3)部署规划: SSD 500GB 作为日志缓存 SAS*2 构建RAID1 安装CentOS操作系统

(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

(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 集群都会出现严重问题 。

OSD规划 每台机器 SAS 6 作为OSD MDS规划 运行2个MDS
Monitor规划 运行2个Monitor ,node140 node142 mgr规划 运行2个mgr ,node140=standbys node142= admin

#############二、环境准备############# (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.repo

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

#############三、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

###################################################################### #######################四、创建第一个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

######################################################################################## #######################五、创建第二个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:

#################################################################################### #####################六、创建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

############################################################################### #######################七、安装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

######################################################################### #######################八、安装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日常的管理操作