分布式文件系统--ceph

概述

ceph是一种专为高性能、高可靠性和高扩展性而设计的一种统一的分布式文件系统。随着OpenStack日渐成为开源云计算的标准软件栈,ceph也成为了OpenStack的首选后端存储,因为它支持块存储和对象存储,所以很自然地被用作云计算框架的整个存储后端,当然也可以单独作为存储,例如部署一套集群作为对象存储、共享存储等。

ceph架构

在这里插入图片描述
通过架构图可以看到ceph支持:
对象存储:RADOSGW;兼容S3接口。通过reset api上传和下载文件
文件系统:FS;兼容POSIX接口。可以将ceph集群看做一个共享文件系统挂载到本地使用。
块存储:RBD;有kernel rbd和librbd两种使用方式,支持快照、克隆。相当于一块硬盘挂载到了本地,用法和用途都跟本地磁盘一样。比如在OpenStack项目里,ceph的块设备存储可以对接OpenStack的后端存储。

ceph相比其它分布式文件系统有哪些优点呢?

  • 统一存储;ceph底层也是一个分布式文件系统(RADOS),但由于在上层开发了支持对象和块的接口,所以在开源存储软件中所占据的地位还是蛮高的。
  • 高扩展性;扩容方便、容量大。能够管理上千台服务器和EB级数据的容量。
  • 可靠性强;支持多份强 一致性副本,EC。副本能够跨主机、机架和数据中心存放,安全可靠。存储节点也可以自动管理和修复,不存在单点故障,容错性强。
  • 高性能;因为是多个副本,因此在读写操作时能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外ceph客户端读写数据直接与存储设备(OSD)交互。

各组件介绍

在这里插入图片描第三代述
OSD:ceph的守护进程,功能是存储数据和处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的心跳来向monitors提供监控信息,当 Ceph 存储集群设定为有2个副本时,至少需要2个OSD守护进程,集群才能达到active+clean状态 ,也可以在ceph.conf文件配置osd_pool_default_size = 2定义副本数,默认为3个。
Monitors:监视器(mon)。Ceph 客户端读或写数据前必须先连接到某个 Ceph 监视器、获得最新的集群运行图副本。一个 Ceph 存储集群只需要单个监视器就能运行,但它就成了单一故障点(即如果此监视器宕机, Ceph 客户端就不能读写数据了)。
MDS:元数据服务器,为ceph文件系统存储元数据(块设备和对象存储不使用MDS)。元数据服务器使得POSIX文件系统的用户们可以在不对ceph存储集群造成负担的前提下执行比如ls、find等基本命令。

集群部署实验

环境:

主机名IP描述
node1192.168.8.19/24管理、监视、osd节点
node2192.168.8.11守护进程、元数据服务器
node3192.168.8.21守护进程、元数据服务器
node4192.168.8.30ceph客户端
  • 所有主机配置免密码登录
  • OSD节点添加硬盘、格式化、挂载
  • 所有节点修改/etc/hosts文件
  • 所有主机时间同步
  • 管理节点安装ceph-deploy

所有节点增加yum配置文件ceph.repo

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
//yum clean all && yum makecache后开始安装
[root@node1]# yum install -y ceph-deploy
  • 在管理节点创建monitor服务
[root@node1]# mkdir /etc/ceph && cd /etc/ceph
[root@node1]# ceph-deploy new node1

如果报以下错误:

[ceph_deploy][ERROR ] File “/usr/lib/python2.7/site-packages/ceph_deploy/cli.py”, line 162, in _main
[ceph_deploy][ERROR ] return args.func(args)
[ceph_deploy][ERROR ] File “/usr/lib/python2.7/site-packages/ceph_deploy/new.py”, line 141, in new
[ceph_deploy][ERROR ] ssh_copy_keys(host, args.username)
[ceph_deploy][ERROR ] File “/usr/lib/python2.7/site-packages/ceph_deploy/new.py”, line 35, in ssh_copy_keys
[ceph_deploy][ERROR ] if ssh.can_connect_passwordless(hostname):
[ceph_deploy][ERROR ] File “/usr/lib/python2.7/site-packages/ceph_deploy/util/ssh.py”, line 15, in can_connect_passwordless
[ceph_deploy][ERROR ] if not remoto.connection.needs_ssh(hostname):
[ceph_deploy][ERROR ] AttributeError: ‘module’ object has no attribute ‘needs_ssh’
[ceph_deploy][ERROR ]

请检查ceph.repo文件是否无误。

执行成功后会生成以下文件:
在这里插入图片描述
修改副本数:

[root@node1]# vim ceph.conf
[global]
fsid = 13df1869-a7c2-44e4-9f1f-5e5fb4e3b2af
mon_initial_members = node1
mon_host = 192.168.8.19
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2   -------------修改默认的副本数
  • 在所有节点上安装ceph,还是在node1节点上操作:
[root@node1]# ceph-deploy install node1 node2 node3 node4
//如果网络的原因安装失败=手动执行:
yum install -y epel-release
yum install -y ceph-release
yum install -y install -y ceph ceph-radosgw
  • 在管理节点安装ceph monitor
[root@node1:/etc/ceph]# ceph-deploy mon create node1
//收集节点的keyring文件
[root@node1:/etc/ceph]#  ceph-deploy  gatherkeys node1
  • 所有osd节点部署osd服务
[root@node1:/etc/ceph]#  ceph-deploy osd prepare node1:/var/local/osd0 node2:/var/local/osd1 node3:/var/local/osd2
//给所有osd节点挂载目录授权
chown -R ceph.ceph /var/local/osd*
//激活osd
[root@node1:/etc/ceph]#  ceph-deploy osd activate node1:/var/local/osd0 node2:/var/local/osd1 node3:/var/local/osd2
//把配置文件和admin 密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了
[root@node1:/etc/ceph]#  ceph-deploy admin node1 node2 node3
//各节点修改权限
[root@node1:/etc/ceph]#  chmod +r /etc/ceph/ceph.client.admin.keyring 

查看osd状态:
在这里插入图片描述
问题原因为集群osd 数量较少,测试过程中建立了大量的pool,每个pool要咋用一些pg_num 和pgs ,ceph集群默认每块磁盘都有默认值,好像每个osd 为128个pgs,默认值可以调整,调整过大或者过小都会对集群性能优影响,此为测试环境以快速解决问题为目的,解决此报错的方法就是,调大集群的此选项的告警阀值;方法如下,在mon节点的ceph.conf 配置文件中添加:

mon_pg_warn_max_per_osd = 1000
//重启
[root@node1:/etc/ceph]# systemctl restart ceph-mon@node1

在这里插入图片描述

  • 部署mds服务
[root@node1:/etc/ceph]# ceph-deploy mds create node2 node3
//查看mds状态
[root@node1:/etc/ceph]#  cdph mds stat

在这里插入图片描述

  • 创建ceph文件系统

创建存储池:

[root@node1:/etc/ceph]# ceph osd pool create cephfs_data 128 
[root@node1:/etc/ceph]# ceph osd pool create cephfs_metadata 128 

128什么意思:
128为pg_num,在ceph中取该值是强制性的,因为不能自动计算,常用配置方法如下:
少于 5 个 OSD 时可把 pg_num 设置为 128
OSD 数量在 5~10 个时,可把 pg_num 设置为 512
OSD 数量在 10~50 个时,可把 pg_num 设置为 4096
OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值 自己计算 pg_num 取值时可借助 pgcalc 工具

  • 创建文件系统
[root@node1:/etc/ceph]# ceph fs new 128 cephfs_metadata cephfs_data 
//查看创建后的ceph fs
[root@node1:/etc/ceph]# ceph fs
//查看mds状态
[root@node1:/etc/ceph]# ceph mds stat

在这里插入图片描述

  • 客户端节点挂载ceph文件系统
//创建挂载点
[root@node4:/etc/ceph]# mkdir /cephdata
//复制其中一个mds节点/ceph.client.admin.keyring中的秘钥保存到本地的admin.secret文件中
[root@node4:/etc/ceph]# vim /etc/ceph/admin.secret
//挂载
mount -t ceph 192.168.8.19:6789:/ /opt  -o name=admin,secretfile=/etc/ceph/admin.secret 
//卸载
umount /cephdata
//第二种挂载方法
yum install -y fuse
 ceph-fuse -m 192.168.8.19(管理节点ip地址):6789 /ceph(挂载点) 
//卸载
 fusermount -u /cephdata

在这里插入图片描述
挂载成功后能在挂载点目录下写入文件表示挂载成功

注意事项

  1. 磁盘挂载的目录必须有权限(chown)
  2. 设置开机自动挂载磁盘(fstab)
  3. 客户端的挂载点建议是空目录
  4. 确保工作目录为/etc/ceph/

处理down状态的osd节点

  1. ceph osd tree|grep down|awk '{print$1}

  2. ceph osd out osd.ID
    ceph osd rm osd.ID
    ceph osd crush rm osd.ID
    ceph auth del osd.ID
    umount /var/lib/ceph/osd/ceph-$ID

    $ID 为down状态的ID

  3. 在管理节点重建down掉的OSD
    ceph-deploy osd create node3:/var/local/osd2

  4. 激活集群中dwon状态的osd
    ceph-deploy osd activate node1:/var/local/osd0 node2:/var/local/osd1 node3:/var/local/osd2

  5. 查看一下
    ceph osd tree

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值