一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统
Ceph OSD守护进程(Ceph OSD)的功能是存储数据.处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向Ceph Monitors提供一些监控信息。当Ceph存储集群设定为有2个副本时,至少需要2个OSD守护进程,集群才能达到active+clean状态(Ceph默认有3个副本,但你可以调整副本数)。
Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、OSD图、归置组(PG)图、和CRUSH图。Ceph保存着发生在Monitors 、OSD和PG上的每一次状态变更的历史信息(称为Epoch,Epoch 是一个通用的实时的图表库,用于构建漂亮、平滑和高性能的可视化图形图表。)。
Ceph元数据服务器(MDS)为Ceph文件系统存储元数据(也就是说,Ceph块设备和Ceph对象存储不使用MDS)。元数据服务器使得POSIX文件系统的用户们,可以在不对Ceph存储集群造成负担的前提下,执行诸如ls、find等基本命令。MDS能够控制Client和OSD的交互,还可以管理限额控制、目录和文件的创建与删除,以及访问控制权限等。
PG (放置组)是 OSD之上的一层逻辑,可视其为一个逻辑概念。Ceph 把对象OBJECT映射到PG中。
从名字可理解PG是一个放置策略组,很多个对象一起组团,然后再存入OSD 中,用来方便定位和追踪对象。因为一个拥有数百万对象的系统,不可能在对象这一级追踪位置。可以把 PG 看做一个对象集合,该集合里的所有对象都具有相同的放置策略:对象的副本都分布在相同的OSD列表上。
PG 减少了各对象存入对应 OSD 时的元数据数量,更多的 PG 使得均衡更好。PG有主从之分,对于多副本而言,一个PG的主从副本分布在不同的OSD上;一个对象只能属于一个PG,一个PG包含很多个对象,一个PG对应于一个OSD列表,PG的所有对象对存放在对应的OSD列表上。
Pool 是一个抽象的存储池,它是 PG 之上的一层逻辑。所有的对象都必须存在存储池中。存储池管理着归置组数量、副本数量、和存储池规则集。要往存储池里存数据,用户必须通过认证、且权限合适,存储池可做快照。
如果把整个 Ceph 存储系统看做是一个数据库的话,那么 Pool 的角色可以看做是数据表。用户可能需要根据不同的需求把对象存储在不同的存储池中。 一个 Pool 由多个 PG 构成,一个 PG 只能属于一个Pool。同一个 Pool 中的 PG 具有相同的类型,比如,如 Pool 为副本类型,则 Pool 中所有的 PG 都是多副本的。
PGP是PG的归置组,PGP 起到对 PG 进行归置的作用,PGP的取值应该与PG相同,在PG的值增大的同时,也要增大PGP的值以保持二者的值相同。 当一个 Pool 的 PG 增大后,Ceph 并不会开始进行 rebalancing,只有在 PGP 的值增大后, PG才会开始迁移至其他的OSD上,并且开始 rebalancing。
环境
node0 192.168.0.47 osd,mds,admin,monitor
node1 192.168.0.33 osd,mds
node2 192.168.0.37 osd,mds
node3 192.168.0.59 client
node0、node1、node2节点进行如下配置:
#添加hosts解析;
cat >/etc/hosts<<EOF
127.0.0.1 localhost localhost.localdomain
192.168.0.47 node0
192.168.0.33 node1
192.168.0.37 node2
EOF
#临时关闭selinux和防火墙;
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/sysconfig/selinux
setenforce 0
systemctl stop firewalld.service
systemctl disable firewalld.service
sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config ;setenforce 0
#同步节点时间;
yum install ntpdate -y
ntpdate pool.ntp.org
#修改对应节点主机名;
hostname `cat /etc/hosts |grep $(ifconfig|grep broadcast|awk '{print $2}'|grep -E '192.168')|awk '{print $2}'`;su
在node0管理节点上使用阿里Yum源,操作命令如下所示:
yum install wget -y
rm -rf /etc/yum.repos.d/*
cd /etc/yum.repos.d/
wget -c http://mirrors.aliyun.com/repo/Centos-7.repo
wget -c http://mirrors.aliyun.com/repo/epel-7.repo
cat>/etc/yum.repos.d/ceph.repo<
以上,在每个节点都执行,以下,在node0节点执行即可
ceph-deploy是Ceph官方提供的部署工具,基于ssh远程登录其它各个节点上执行命令完成部署过程,通常在node节点上安装此工具。
ceph-deploy工具默认使用root用户SSH到各Ceph节点执行命令。为了方便,需求提前设置免密码登陆各个节点。如果ceph-deploy以某个普通用户登陆,那么这个用户必须有无密码使用sudo的权限。
yum -y install ceph-deploy
#创建Monitor服务
mkdir /etc/ceph
cd /etc/ceph/
ceph-deploy new node0
#执行如上指令会创建对应ceph的配置文件、日志文件和Monitor密钥文件:
ceph.conf
ceph-deploy-ceph.log
ceph.mon.keyring
#如果想要修改守护进程数,也就是副本数,可以在ceph.conf配置文件中添加如下:
cat>>ceph.conf<<EOF
osd_pool_default_size = 2
EOF
#在node0节点生成公钥和私钥;
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q
-t:指定要创建的密钥的类型;
-N:是指密码为空;
-f:id_rsa是指保存文件为~/.ssh/id_rsa和~/.ssh/id_rsa.pub;
-q:指静默模式, 不输出显示;
#将公钥拷贝至各个节点;
for i in `seq 0 2`;do ssh-copy-id -i ~/.ssh/id_rsa.pub node$i ;done
#每个节点安装Ceph
ceph-deploy install node0 node1 node2
#创建Monitor(监控);
ceph-deploy mon create node0
#收集keyring(密钥环)信息;
ceph-deploy gatherkeys node0
#查看生成的配置文件和秘钥;
ls
ceph.bootstrap-mds.keyring ceph.bootstrap-rgw.keyring ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring ceph.client.admin.keyring ceph.mon.keyring
ceph.bootstrap-osd.keyring ceph.conf rbdmap
#分别在每个节点创建ceph存储目录:/data/,指令如下;
for i in $(seq 0 2);do ssh -l root node$i "mkdir -p /data/" ;done
#创建osd节点,命令如下:
ceph-deploy osd prepare node0:/data/ node1:/data/ node2:/data/
#在不同的主机上可以看到,对应的节点会生成文件,命令如下:
ls -l /data/
ceph_fsid fsid magic
#管理节点node0上激活各节点的osd
ceph-deploy osd activate node0:/data/ node1:/data/ node2:/data/
#如果报提示没有权限的错误,需要给三个节点的/data/读写、执行权限
for i in $(seq 0 2);do ssh -l root node$i "chmod 777 -R /data/" ;done
#然后重新执行;
ceph-deploy osd activate node0:/data/ node1:/data/ node2:/data/
激活完成后可以使用命令查看osd状态;
ceph-deploy osd list node0
#使用如下命令将配置文件和admin密钥同步到各个节点,以便各个节点使用ceph命令时无需指定Monitor地址和ceph.client.admin.keyring密钥。
#注意:还需要修改各个节点ceph.client.admin.keyring密钥的权限
ceph-deploy admin node0 node1 node2
ceph health
HEALTH_OK
ceph-deploy mds create node0 node1 node2
ceph mds stat
e4:, 3 up:standby
#查看Ceph集群状态;
ceph -s
#查看Ceph文件系统;
ceph fs ls
No filesystems enabled
#创建存储池;
ceph osd pool create cephfs_data 128
#创建存储池元数据;
ceph osd pool create cephfs_metadata 128
#解析:参数后面的128数字为指定pg_num的值,这个值是不能自动计算的,需要手动赋予。一般来说,少于5个osd时,pg_num可以设置为128;osd在5到10个之间,pg_num可以设置为512;osd在10到50个之间,pg_num可以设置为4096;Osd一旦超过50个,那么就得自己计算pg_num的取值,也可以借助工具pgcalc计算,网址是https://ceph.com/pgcalc/。随着osd数量的增加,正确的pg_num取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
#创建Ceph文件系统;
ceph fs new 128 cephfs_metadata cephfs_data
#查看Ceph文件系统;
ceph fs ls
#查看MDS状态;
ceph mds stat
ceph osd pool get [存储池名称] size //查看存储池副本数
ceph osd pool set [存储池名称] size 3 //修改存储池副本数
ceph osd lspools //打印存储池列表
ceph osd pool create [存储池名称] [pg_num的取值] //创建存储池
ceph osd pool rename [旧的存储池名称] [新的存储池名称] //存储池重命名
ceph osd pool get [存储池名称] pg_num //查看存储池的pg_num
ceph osd pool get [存储池名称] pgp_num //查看存储池的pgp_num
ceph osd pool set [存储池名称] pg_num [pg_num的取值] //修改存储池的pg_num值
ceph osd pool set [存储池名称] pgp_num [pgp_num的取值] //修改存储池的pgp_num值
ceph osd pool get-quota cephfs_metadata //查看存储池配额
quotas for pool 'cephfs_metadata':
max objects: N/A
max bytes : N/A
ceph osd tree
[root@node0 ceph]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.22458 root default
-2 0.07419 host node0
0 0.07419 osd.0 up 1.00000 1.00000
-3 0.07520 host node1
1 0.07520 osd.1 up 1.00000 1.00000
-4 0.07520 host node2
2 0.07520 osd.2 up 1.00000 1.00000
ceph -s
cluster 2735b13e-fc74-4eb5-9ae1-f5211c154b36
health HEALTH_OK
monmap e1: 1 mons at {node0=192.168.0.47:6789/0}
election epoch 3, quorum 0 node0
fsmap e7: 1/1/1 up {0=node2=up:active}, 2 up:standby
osdmap e22: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v867: 320 pgs, 3 pools, 2068 bytes data, 20 objects
23387 MB used, 207 GB / 229 GB avail
320 active+clean
[root@node0 ceph]# ps -ef|grep ceph
ceph 2601 1 0 16:09 ? 00:00:06 /usr/bin/ceph-mon -f --cluster ceph --id node0 --setuser ceph --setgroup ceph
ceph 3364 1 0 16:11 ? 00:00:07 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph 3724 1 0 16:11 ? 00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node0 --setuser ceph --setgroup ceph
root 19462 2020 0 17:22 pts/0 00:00:00 grep --color=auto ceph
[root@node1 ~]# ps -ef|grep ceph
ceph 2666 1 0 16:11 ? 00:00:07 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
ceph 2891 1 0 16:11 ? 00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node1 --setuser ceph --setgroup ceph
root 18201 2015 0 17:23 pts/0 00:00:00 grep --color=auto ceph
如此,ceph集群部署完毕
环境安装及查看key值
yum install ceph-common -y
mkdir -p /app /etc/ceph/
scp 192.168.0.47:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==
mount
mount -t ceph 192.168.0.47:6789:/ /app/ -o name=admin,secret=AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==
#在客户端主机部署ceph-fuse,命令操作如下;
scp -r root@192.168.0.47:/etc/yum.repos.d/ceph.repo /etc/yum.repos.d/
yum install -y ceph-fuse
#添加客户端KEY,可以从node0节点/etc/ceph/目录拷贝;
scp 192.168.0.47:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==
#使用如下指令挂载Ceph目录即可;
[root@localhost ~]# ceph-fuse -m 192.168.0.47:6789 /app
2021-06-28 18:18:07.600287 7fba23495f00 -1 did not load config file, using default settings.
ceph-fuse[12012]: starting ceph client
2021-06-28 18:18:07.627873 7fba23495f00 -1 init, newargv = 0x56044d0326c0 newargc=11
ceph-fuse[12012]: starting fuse
[root@localhost ~]#
[root@localhost ~]# df -Th|grep ceph
ceph-fuse fuse.ceph-fuse 230G 23G 208G 10% /app
#注:如果需要卸载,命令如下;
fusermount -u /data
开机挂载 - 添加rc.local或fstab文件 (略)
CEPH集群配置成功之后,随着数据量不断的增长,后期如果资源池满了,作为运维人员需要向集群中增加存储节点,以应对企业数据飞速的增长。如果集群已经在运行,我们可以在集群运行时添加或删除OSD节点。
要向CEPH集群中增加一个或者多个OSD节点,要依次做如下操作:
增加Linux服务器;
创建OSD数据目录;
把硬盘挂载到数据目录;
把 OSD节点数据目录加入集群;
将OS节点加入 CRUSH Map。
#添加hosts解析;
cat >/etc/hosts<<EOF
127.0.0.1 localhost localhost.localdomain
192.168.0.47 node0
192.168.0.33 node1
192.168.0.37 node2
192.168.0.59 node3
EOF
#临时关闭selinux和防火墙;
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/sysconfig/selinux
setenforce 0
systemctl stop firewalld.service
systemctl disable firewalld.service
#同步节点时间;
yum install ntpdate -y
ntpdate pool.ntp.org
#修改对应节点主机名;
hostname `cat /etc/hosts|grep $(ifconfig|grep broadcast|awk '{print $2}')|awk '{print $2}'`;su
2、在node0管理节点上使用阿里Yum源,操作命令如下所示:(如果已经操作,可以忽略)
yum install wget -y
rm -rf /etc/yum.repos.d/*
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
cat>/etc/yum.repos.d/ceph.repo<
3、在Ceph新增节点上安装CEPH软件服务;
#在node0节点生成公钥和私钥;
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q
-t:指定要创建的密钥的类型;
-N:是指密码为空;
-f:id_rsa是指保存文件为~/.ssh/id_rsa和~/.ssh/id_rsa.pub;
-q:指静默模式, 不输出显示;
#将公钥拷贝至各个节点;
ssh-copy-id -i ~/.ssh/id_rsa.pub node3
#在新节点安装Ceph服务;
ceph-deploy install node3
4、创建OSD存储节点;
#在新增的节点创建ceph存储目录:/data/,指令如下;
ssh -l root node3 "mkdir -p /data/"
#创建osd节点,命令如下:
ceph-deploy osd prepare node3:/data/
#在新节点的主机上可以看到,对应的节点会生成文件,命令如下:
ls -l /data/
ceph_fsid fsid magic
5、激活OSD存储节点,在管理节点node0上激活新增节点的osd数据存储,命令操作如下;
ceph-deploy osd activate node3:/data/
如果报提示没有权限的错误,需要给三个节点的/data/读写、执行权限
ssh -l root node3 "chmod 777 -R /data/"
然后重新执行;
ceph-deploy osd activate node3:/data/
激活完成后可以使用命令查看osd状态;
ceph-deploy osd list node3
使用如下命令将配置文件和admin密钥同步到各个节点,以便各个节点使用ceph命令时无需指定Monitor地址和ceph.client.admin.keyring密钥。注意:还需要修改各个节点ceph.client.admin.keyring密钥的权限
ceph-deploy admin node3
6、添加新节点node3的/data/目录加入到存储池中;
ceph-deploy osd create node3:/data/
7、OSD节点部署完成之后,接下来部署MDS服务,命令操作如下;
ceph-deploy mds create node3
8、检查新增节点服务进程和端口信息,命令操作如下;
[root@node3 ~]# ps -ef|grep ceph
root 11715 2 0 Jun28 ? 00:00:00 [ceph-msgr]
root 12012 1 0 Jun28 pts/0 00:00:46 ceph-fuse -m 192.168.0.47:6789 /app
ceph 14333 1 3 20:11 ? 00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph
ceph 14707 1 0 20:12 ? 00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node3 --setuser ceph --setgroup ceph
root 14741 13302 0 20:12 pts/0 00:00:00 grep --color=auto ceph
[root@node3 ~]# netstat -tnlp|grep ceph
tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 14333/ceph-osd
tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 14333/ceph-osd
tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 14333/ceph-osd
tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 14333/ceph-osd
tcp 0 0 0.0.0.0:6804 0.0.0.0:* LISTEN 14707/ceph-mds
[root@node3 ~]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.31717 root default
-2 0.07419 host node0
0 0.07419 osd.0 up 1.00000 1.00000
-3 0.07520 host node1
1 0.07520 osd.1 up 1.00000 1.00000
-4 0.07520 host node2
2 0.07520 osd.2 up 1.00000 1.00000
-5 0.09259 host node3
3 0.09259 osd.3 up 1.00000 1.00000
CEPH集群配置成功之后,随着数据量不断的增长,后期如果资源池满了,作为运维人员需要向集群中增加存储节点,以应对企业数据飞速的增长。如果集群已经在运行,我们可以在集群运行时添加或删除OSD节点。
1)将node3节点的osd.3从Crush中删除,并删除对应的OSD和AUTH,HOST,在node0管理节点上执行如下指令:
ceph osd crush rm osd.3
ceph osd rm 3
ceph auth del osd.3
ceph osd crush rm node3
ceph osd tree
[root@node0 ceph]# ceph osd crush rm osd.3
removed item id 3 name 'osd.3' from crush map
[root@node0 ceph]# ceph osd rm 3
Error EBUSY: osd.3 is still up; must be down before removal.
[root@node0 ceph]# ceph auth del osd.3
updated
[root@node0 ceph]# ceph osd crush rm node3
removed item id -5 name 'node3' from crush map
[root@node0 ceph]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.22458 root default
-2 0.07419 host node0
0 0.07419 osd.0 up 1.00000 1.00000
-3 0.07520 host node1
1 0.07520 osd.1 up 1.00000 1.00000
-4 0.07520 host node2
2 0.07520 osd.2 up 1.00000 1.00000
3 0 osd.3 up 1.00000 1.00000
2)根据如上指令,将故障节点和OSD从集群中删除了,同时可以停止node3节点CEPH相关的服务进程,命令操作如下:
systemctl stop ceph.target
ps -ef|grep ceph
3)卸载Ceph服务,同时将相关数据删除,命令操作如下:
yum remove ceph* -y
yum remove libcephfs* python-cephfs* -y
find / -name "*ceph*" -exec rm -rf {} \;
------------------------------------end