Ceph分布式文件系统集群部署
Ceph简介
Ceph 文件系统( Ceph FS )是个 POSIX 兼容的文件系统,它使用 Ceph 存储集群来存储数据。 Ceph 文件系统与 Ceph 块设备、同时提供 S3 和 Swift API 的 Ceph 对象存储、或者原生库( librados )一样,都使用着相同的 Ceph 存储集群系统。Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
Ceph特点
-
- 高性能
a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。 - 高可用性
a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。 - 高可扩展性
a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。 - 特性丰富
a. 支持三种存储接口:块存储、文件存储、对象存储。
b. 支持自定义接口,支持多种语言驱动。
- 高性能
Ceph架构
支持三种接口:
-
- Object:有原生的API,而且也兼容Swift和S3的API。
- Block:支持精简配置、快照、克隆。
- File:Posix接口,支持快照。
Ceph核心组件及概念介绍
- Monitor
一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。 - OSD
OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。 - MDS
MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。 - Object
Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。 - PG
PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。 - RADOS
RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。 - Libradio
Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。 - CRUSH
CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。 - RBD
RBD全称RADOS block device,是Ceph对外提供的块设备服务。 - RGW
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。 - CephFS
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。
Ceph集群安装部署
- 环境准备
关闭防火墙
systemctl stop firewalld systemctl disable firewalld
关闭Selinux
setenforce 0 vi /etc/selimux/config selinux=disabled
- 添加阿里云Ceph镜像源
cat >/etc/yum.repos.d/ceph.repo<<EOF [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/ gpgcheck=0 priority=1 [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/ gpgcheck=0 priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS enabled=0 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc priority=1 EOF yum makecache
- 所有node节点执行一下操作
useradd ceph-admin
echo 'ceph-admin' | passwd --stdin ceph-admin
echo "ceph-admin ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/ceph-admin
chmod 0440 /etc/sudoers.d/ceph-admin
#配置sshd可以使用password登录
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl reload sshd
#配置sudo不需要tty
sed -i 's/Default requiretty/#Default requiretty/' /etc/sudoers
#在所有节点配置hosts
cat >>/etc/hosts<<EOF
192.168.1.111 ceph1
192.168.1.112 ceph2
192.168.1.113 ceph3
EOF
#格式化需要做osd的磁盘
mkfs.xfs /dev/sdb
- 在admin节点执行
su - ceph-admin ssh-keygen ssh-copy-id ceph-admin@ceph1 ssh-copy-id ceph-admin@ceph2 ssh-copy-id ceph-admin@ceph3
- admin节点安装ceph-deploy
yum install -y ceph-deploy mkdir my-cluster cd my-cluster
- 进行节点部署
ceph-deploy new ceph1 ceph2 ceph3 #安装完之后my-cluster目录下面会生成三个文件 ceph.conf ceph-deploy-ceph.log ceph.mon.keyring #编辑ceph.conf配置文件,在最后添加一下信息 sudo vim ~/my-cluster/ceph.conf public network = 192.168.0.0/23 [osd] osd_max_object_name_len = 256 osd_max_object_namespace_len = 64 rbd_default_features = 1 osd_pool_default_size = 3 filestore_xattr_use_omap = true [mon] mon_pg_warn_max_per_osd = 1000 #在管理节点直接给各节点安装环境包 ceph-deploy install ceph1 ceph2 ceph3 #配置初始的monitor并收集所有密钥: ceph-deploy mon create-initial #把配置信息拷贝到各节点 ceph-deploy admin ceph1 ceph2 ceph3
- 各节点创建osd(需要创建的磁盘均需要执行)
ceph-deploy --overwrite-conf config push ceph{1..3} ceph-deploy disk zap ceph1 /dev/sdb ceph-deploy gatherkeys ceph{1..3} ceph-deploy osd create ceph1 --data /dev/sdb
- 启动mds、mgr
ceph-deploy mds create ceph1 ceph2 ceph3 ceph-deploy mgr create ceph1 ceph2 ceph3
- 开启dashboard模块,启用浏览器界面
#在开启dashboard模块之前要注意,因为我们是使用ceph-admin一般用户进行安装,所有无法调用/etc/ceph/下面的文件,将/etc/ceph目录下面的文件属主属组全部更改为ceph-admin sudo chown -R ceph-admin /etc/ceph #然后加载dashboard模块 ceph mgr module enable dashboard #dashboard管理页面 http://192.168.1.111:7000
- CephFS需要使用两个Pool来分别存储数据和元数据
ceph osd pool create fs_data 128 ceph osd pool create fs_metadata 128 ceph osd lspools
- 创建一个CephFS
ceph fs new cephfs fs_metadata fs_data
- 第三方客户端使用cephfs
mount -t ceph ceph1:6789,ceph2:6789,ceph3:6789:/ /mnt/mycephfs -o name=admin,secret=`ceph auth print-key client.admin`
- 卸载ceph
ceph-deploy purge ceph01 ceph-deploy purgedata ceph01 rm -rf /var/lib/ceph rm -rf /etc/ceph rm -rf /var/run/ceph/