CEPH的搭建与注意事项
一、ceph实验前提准备
1.1、Ceph组件
1.OSDs 存储设备
2.Monitors 集群监控软件
3.RadosGateway(RGW) 对象存储网关
4.MDSs 存放文件系统的元数据(对象存储和 块存储不需要该组件)
5.Client ceph客户端
产品特色
每个组件皆可扩展:集群管理节点可以扩展,集群存储节点可以扩展
可以到达EB及存储
基于软件实现,可以使用现有设备
默认三副本,自动复制,平衡数据
其中MDSs是不怎么消耗资源的
共享存储的常见类型:
1)块存储(iSCSI、ceph) 客户端多了一个磁盘(同一时间只能供一个客户 端使用)
2)文件系统(NFS、ceph) 客户端直接 mount
3)对象存储(ceph)
1.2、搭建ceph的前提条件
1.配置 YUM 源(ceph 光盘)
2.SSH **(免密码登陆)
3.修改 hosts 解析
4.NTP 时间同步
5.node1、node2、node3 每台虚拟机添加 2 块磁盘(20G)
二、ceph实验搭建
2.1、部署 Ceph 集群
[aaa@qq.com ~]# yum -y install ceph-deploy #一定要在有 ssh **的主机上安装
[aaa@qq.com ~]# mkdir ceph-cluster #但凡执行 ceph-deploy 脚本,必须在该目录下,否则会出错
[aaa@qq.com ~]# cd ceph-cluster/
[aaa@qq.com ceph-cluster]# for i in node1 node2 node3
do
ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
done
关闭所有节点的防火墙和 SELinux
2.2、部署 MON 集群
[aaa@qq.com ceph-cluster]# ceph-deploy new node1 node2 node3 #测试所有 node 节点状态,创建了 ceph 的配置文件 ceph.conf(在当前目录下)
[aaa@qq.com ceph-cluster]# ls ceph.conf [aaa@qq.com ceph-cluster]# ls /etc/ceph/ #/etc/ceph 是启动 ceph 需要读取配置文件的地方
[aaa@qq.com ceph-cluster]# ceph-deploy mon create-initial #把当前目录下的 ceph 配置文件远程拷贝到目标主机(node1,node2,node3)放到/etc/ceph 目录,并且启动 ceph-mon 服务(服务名称为 aaa@qq.com主机名)
[aaa@qq.com ceph-cluster]# systemctl status aaa@qq.com 确认服务是否启动(建议用tab键)
[aaa@qq.com ceph-cluster]# ceph -s
注意mon有过半原则,需要最少3个做mon才有备份的作用
2.3、 部署 OSD 集群
每台虚拟机都添加了 2 块磁盘(/dev/sdb、/dev/sdc)
sdb 用来做缓存盘,sdc 做数据盘
1)把所有的磁盘初始化(仅在 node1 操作)
[aaa@qq.com ~]# cd ceph-cluster/ #必须的操作
[aaa@qq.com ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc node2:sdb node2:sdc node3:sdb node3:sdc #可以分开写
注意:如果只有一块盘,就直接zap整块盘,启动osd时不要指定缓存盘,只提供数据盘,不能对分区做zap;当zap整块盘时,它会自动把盘分区,一部分做缓存,一部分做数据盘,但因为实际是一个磁盘,对性能不会有帮助。
另外OSD有3副本的原则,需要最少3个OSD时运行的,整个cpeh才是好的
2)启动 OSD 服务共享这些磁盘
[aaa@qq.com ceph-cluster]# ceph-deploy osd create node1:sdc:/dev/sdb node2:sdc:/dev/sdb node3:sdc:/dev/sdb #可以分开来写
[aaa@qq.com ceph-cluster]# systemctl status aaa@qq.com #确认服务是否启动(建议用tab键)
[aaa@qq.com ceph-cluster]# ceph osd tree
远程 node1 启动 osd 服务把/dev/sdc 共享给用户,/dev/sdb 作为缓存盘(允许一次性启动多 台主机的服务)并且把 sdc 挂载到了/var/lib/ceph/xxx 目录 ,可以用df来查看
2.4、不同类型共享存储
2.4.1、块共享实验
服务端
[aaa@qq.com ~]# ceph osd lspools #查看共享池
[aaa@qq.com ~]# rbd create jacob --image-feature layering --size 5G #创建共享镜像,名称为 jacob,开启功能:支持 cow,共享大小为 5G
[aaa@qq.com ~]# rbd list #列出所有共享镜像 jacob
[aaa@qq.com ~]# rbd info jacob #查看某个镜像的详细信息
[aaa@qq.com ~]# rbd resize --size 10G jacob #扩容容量 [aaa@qq.com ~]# rbd resize --size 5G jacob --allow-shrink #缩减容量
客户端访问共享
[aaa@qq.com ~]# yum -y install ceph-common [aaa@qq.com ~]# scp node1:/etc/ceph/ceph.conf /etc/ceph/ #拷贝配置文件,配置文件中记录的有 ceph 集群服务器的 IP 信息
[aaa@qq.com ~]# scp node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ #拷贝访问 ceph 集群的**文件,有了**才有权限访问集群
[aaa@qq.com ~]# lsblk
[aaa@qq.com ~]# rbd map jacob
/dev/rbd0
[aaa@qq.com ~]# rbd map test
/dev/rbd1
[aaa@qq.com ~]# lsblk
客户端进行快照还原数据的实验:
1)客户端格式化、挂载、写数据
[aaa@qq.com ~]# mkfs.xfs /dev/rbd0
[aaa@qq.com ~]# mkdir /data
[aaa@qq.com ~]# mount /dev/rbd0 /data/
[aaa@qq.com ~]# echo "abc hello world" > /data/test.txt
2)回到 node 集群(给 jacob 共享盘创建快照)
[aaa@qq.com ~]# rbd snap ls jacob #默认该镜像盘没有快照
[aaa@qq.com ~]# rbd snap create jacob --snap jacob-snap1 #给 jacob 镜像盘创建快照,快照名称为 jacob-snap1 到 client 模拟数据被误操作删除(ceph 不支持在线还原快照)
3)客户端删除数据/data/test.txt ,并取消挂载
4)到 node 集群还原快照
[aaa@qq.com ~]# rbd snap rollback jacob --snap jacob-snap1 客户端再次挂载访问共享
[aaa@qq.com ~]# mount /dev/rbd0 /data/ [aaa@qq.com ~]# cat /data/test.txt
使用快照克隆一个新的镜像盘 image
1)创建一个新的共享 ,保护快照(防止快照被删除)
[aaa@qq.com ~]# rbd snap protect jacob --snap jacob-snap1
[aaa@qq.com ~]# rbd clone jacob --snap jacob-snap1 jacob-clone \ --image-feature layering #使用现有 jacob 镜像盘的 jacob-snap1 这个快照,克隆一个新的共享镜像盘,名称为 jacobclone
[aaa@qq.com ~]# rbd ls
[aaa@qq.com ~]# rbd info jacob-clone [aaa@qq.com ~]# rbd flatten jacob-clone [aaa@qq.com ~]# rbd info jacob-clone #克隆镜像很多数据都来自于快照链 #如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!
[aaa@qq.com ~]# rbd snap unprotect jacob --snap jacob-snap1 #取消快照保护 [aaa@qq.com ~]# rbd snap rm jacob --snap jacob-snap1 #删除快照
2)客户端取消对 ceph 共享盘的挂载实验
[aaa@qq.com ~]# umount /data/
[aaa@qq.com ~]# rbd showmapped
[aaa@qq.com ~]# rbd unmap jacob
[aaa@qq.com ~]# rbd unmap /dev/rbd1
2.4.2、文件系统共享实验
写数据时,数据会被写到 block 中(4M 的 a.mp4,占用多个 block)【 block 中存数据】 Inode 中存储元数据(metadata)【元数据是数据的数据、描述数据的数据,比如一个文件, 有文件名,时间,权限,大小… …文件数据的地址】
服务端
(使用 node3 做 ceph-mds 服务,操作指令在 node1 执行)
[aaa@qq.com ~]# cd ceph-cluster/ [aaa@qq.com ceph-cluster]# ceph-deploy mds create node3
[aaa@qq.com ~]# ceph osd pool create cephfs_data 128 #创建一个新的共享池,名称为 cephfs_data
[aaa@qq.com ~]# ceph osd pool create cephfs_metadata 128 #创建一个新的共享池,名称为 cephfs_metadata
cephfs_metadata 做 inode,cephfs_data 做 block
[aaa@qq.com ~]# ceph osd lspools #查看共享池
[aaa@qq.com ~]# ceph fs new myfs1 cephfs_metadata cephfs_data #创建一个文件系统,这个文件系统由 inode 和 block 组成 cephfs_metadata 做 inode,存元数据 cephfs_data 做 block,存数据 文件系统的名称是 myfs1
[aaa@qq.com ~]# ceph fs ls #查看文件系统
客户端 mount 访问
[aaa@qq.com ~]# mkdir /cephfs 查看 cat /etc/ceph/ceph.client.admin.keyring 找用户名和密码
[aaa@qq.com ~]# mount -t ceph 192.168.4.11:6789:/ /cephfs \ -o name=admin,secret=密码
#客户端 mount 访问共享,-t 访问的服务类型是 ceph,(nfs,cifs),服务 IP 是 192.168.4.11,端 口是 6789,ceph 仅支持一个文件系统共享,只能写访问/,把共享挂载到/cephfs 目录, name 指定用户名,secret 指定密码(因为 ceph 集群需要验证用户和密码才能访问)
2.4.3、Ceph 对象存储的实验
对象存储:基于 kv 的存储,通过 API 接口访问,对象存储中所有的数据都被认为是一个对 象。基于对象的存储就是对象存储。
运维:部署集群,维护集群,故障排错
开发:写程序,基于程序中的指令连接 ceph 服务器,上传下载数据
百度云盘就属于对象存储(不能直接 mount,不是在客户端多一个磁盘)
百度云盘,客户端访问需要下载他的客户端软件(网页也是软件)
登陆 node1 使用 ceph-deploy 远程启动 RGW 服务(radosgw)
[aaa@qq.com ~]# cd ceph-cluster/
[aaa@qq.com ceph-cluster]# ceph-deploy rgw create node3
可以修改配置文件,修改服务的端口(非必须的操作)【在 node3 操作】
[aaa@qq.com ~]# vim /etc/ceph/ceph.conf 手动加入下面三行 [client.rgw.node3] host = node3 rgw_frontends = "civetweb port=8000"
[aaa@qq.com ~]# systemctl restart aaa@qq.com [aaa@qq.com ~]# ss -ntulp |grep radosgw
注意:当ceph.conf配置文件修改后,需要重新加载,需要启动ceph.target服务