集群与存储
Ceph概述
什么是分布式文件系统
1)分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
2)分布式文件系统的设计基于客户机/服务器模式
常见的分布式文件系统
1)Lustre
2)Hadoop
3)FastDFS
4)Ceph
5)GlusterFS
什么是Ceph
1)Ceph是一个分布式文件系统
2)具有高扩展、高可用、高性能的特点
3)Ceph可以提供对象存储、块存储、文件系统存储
4)Ceph可以提供PB级别的存储空间(PB→TB→GB)
1024G*1024G=1048576G=1PB
5)软件定义存储(Software Defined Storage)作为存储行业的一大发展趋势,已经越来越受到市场的认可
Ceph组件
1)OSDs:存储设备
2)Monitor:集群监控组件
3)RadosGateway(RGW):对象存储网关
4)MDSs:存放文件的元数据(对象存储和块存储不需要该组件)
5)Client:Ceph客户端
实验拓扑图
1)一台客户端虚拟机
2)3台存储集群虚拟机
物理机创建网络yum源服务器
虚拟机调用YUM源(下面以node1为例)
配置SSH五无密钥连接
1)修改主机名
2)警告:/etc/hosts解析的域名必须与本机主机名一致!!!
3)发布密钥到各个主机(包括自己)
[root@node1 ~]# for i in 10 11 12 13
do
ssh-copy-id 192.168.4.$i
done
NTP时间同步
1)真实主机是NTP服务器
2)其他所有主机与其他同步时间(下面以node1为例)
[root@node1 ~]# vim /etc/chrony.conf
…
server 192.168.4.254 iburst
…
[root@node1 ~]# systemctl restart chronyd
准备存储磁盘
1)物理机上为每个虚拟机创建三个磁盘
-----------------------++++++++++++++++++++++++++++++++++++++++++++±-----------
部署Ceph集群
准备部署环境
1)安装部署软件
2)使用node1作为部署主机
[root@node1 ~]# yum -y install ceph-deploy
ceph-deploy命令与子命令都支持–help查看帮助
[root@node1 ~]# ceph-deploy --help
3)为部署工具创建目录,存放密钥与配置文件
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster
部署存储集群
1)创建Ceph集群配置(所有节点都为mon)
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
2)给所有节点安装Ceph软件包
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i "yum -y install ceph-mon ceph-mds ceph-radosgw
done
3)初始化所有节点的mon服务(主机名解析必须对)
[root@node1 ceph-cluster]# ceph-deploy mon create-install
//这里没有指定主机,是因为第一步创建的配置文件中已经有了
//所有要求主机名解析必须对,否则连接不到对应的主机
4)初始化monitor常见错误
如果提示如下错误信息:
[root@node1 ~]# admin_socket:exception getting command description:
解决方案如下(在node1操作):
[root@node1 ceph-cluster]# vim ceph.conf #文件最后追加以下内容
public_network = 192.168.4.0/24
[root@node1 ceph-cluster]# ceph-deploy --overwrite-conf config push node1 node2 node3
创建OSD
1)所有节点准备磁盘分区(以下面node1为例)
//这两个分区用来做存储服务器的日志journal盘
2)初始化清空磁盘数据(仅node1操作即可)
验证查
1)看集群状态
[root@node1 ~]# ceph -s
2)可能出现的错误
---- osd create创建OSD存储空间,提示如下run ‘gatherkeys’
3) ceph -s 查看状态,如果失败
[root@node1 ~]# systemctl restart ceph*.service ceph*.target
//在所有节点,或仅在失败的节点重启服务
4)查看集群状态
[root@node1 ~]# ceph -s
5)可能出现的错误
–health:HEALTH_WARN
clock skew detected on node2,node3…
– clock skew(时间不同步)
解决:请先将所有主机的时间都使用NTP同步!!!
------------------------------+++++++++++++++++++++++++++++++++++++±---------------
Ceph块存储
什么是块存储
1)单机块设备:光盘、磁盘
2)分布式块存储:Ceph、Cinder
3)Ceph块设备也叫做RADOS块设备
RADOS block device :RBD
4)RBD驱动已经很好的集成在了Linux内核中
5)RBD提供了企业功能,如快照、cow克隆等等
6)RBD还支持内存缓存,从而能够大大提高性能
7)Linux内核可用直接访问Ceph块存储
8)KVM可用借助于librbd访问
块存储集群
1)查看存储池(默认有一个RDB池)
[root@node1 ~]# ceph osd lspools
0 rbd,
2)创建镜像、查看镜像
3)动态调整大小
缩小容量
[root@node1 ~]# rbd resize --size 7G image --allow-shrink
[root@node1 ~]# rbd info image
扩容容量
[root@node1 ~]# rbd resize --size 15G image
[root@node1 ~]# rbd info image
客户端通过KRBD访问
1)客户端需要安装ceph-common软件包
2)拷贝配置文件(否则不知道集群在哪了)
3)拷贝连接密钥(否则无连接权限)
4)客户端格式化、挂载分区
[root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0 /mnt
[root@client ~]# echo “test” > /mnt/test.txt
5)查看镜像快照
[root@node1 ~]# rbd snap ls image
6)创建镜像快照
[root@node1 ~]# rbd snap create image --snap image-snap1
[root@node1 ~]# rbd snap ls image
SNAPID NAME SIZE
4 image-snap1 15360MB
注意:快照使用COW技术,对大数据快照速度会很快
使用快照回复数据
1)删除客户端写入的测试文件
[root@client ~]# rm -rf /mnt/test.txt
2)还原快照
[root@node1 ~]# rbd snap rollback image --snap image-snap1
3)客户端重新挂载分区
[root@client ~]# umount /mnt
[root@client ~]# mount /dev/rbd0 /mnt
[root@client ~]# ls /mnt
快照克隆
1)如果想从快照恢复出来一个新的镜像,则可以使用克隆
2)注意,克隆前,需要对快照进行<保护>操作
3)被保护的快照无法删除,取消保护(unprotect)
4)查看克隆镜像与父镜像快照的关系
5)克隆镜像很多数据都来自于快照链
6)如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!
客户端撤销磁盘映射
1)umount 挂载点.
[root@client ~]# umount /mnt
2)取消RBD磁盘映射
删除快照与镜像
1)删除快照(确保快照未被保护)
[root@node1 ~]# rbd snap rm image --snap image-snap
2)删除镜像
[root@node1 ~]# rbd list
[root@node1 ~]# rbd rm image
-------------------+++++++++++++++++++++++++++++++±---------------------
还原快照后无法挂载
问题现象
1)创建镜像快照
2)客户端对挂载的磁盘分区卸载后,再次挂载失败
故障分析及排除
1)再次对快照还原一次即可