ceph
快照:可用做备份
• 分布式文件系统(Distributed File System)是指文
件系统管理的物理存储资源不一定直接连接在本地节
点上,而是通过计算机网络与节点相连
• 分布式文件系统的设计基于客户机/服务器模式
• Lustre
• Hadoop
• FastDFS
• Ceph
• GlusterFS
• ceph是一个分布式文件系统
• 具有高扩展、高可用、高性能的特点
• ceph可以提供对象存储、块存储、文件系统存储
• ceph可以提供PB级别的存储空间(PBàTBàGB)
– 1024G*1024G=1048576G
• 软件定义存储(Software Defined Storage)作为存储
行业的一大发展趋势,已经越来越受到市场的认可
• OSDs [有几个OSD就有几个ceph-osd进程 ]
– 存储设备
• Monitors [存储集群的入口]
– 集群监控组件
• MDSs
– 存放文件系统的元数据(对象存储和块存储不需要该组件)
• Client
– ceph客户端 [需要拷贝服务端存储的配置文件,和验证文件]
• 1台客户端虚拟机
• 3台存储集群虚拟机
[root@root9pc01 ~]# yum -y install vsftpd
[root@root9pc01 ~]# mkdir /var/vsftp/ceph
[root@root9pc01 ~]# mount -o loop \
rhcs2.0-rhosp9-20161113-x86_64.iso /var/vsftp/ceph
[root@root9pc01 ~]# systemctl restart vsfpd
[root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools
gpgcheck=0
[root@node1 ~]# cat /etc/hosts
... ...
192.168.4.10 client
192.168.4.11
node1
192.168.4.12
node2
192.168.4.13
node3
[root@node1 ~]# for i in 10 11 12 13
> do
> scp /etc/hosts 192.168.2.$i:/etc/
> done
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@node1 ~]# for i in 10 11 12 13
> do
> ssh-copy-id 192.168.4.$i
> done
[root@client ~]# yum -y install chrony
[root@client ~]# cat /etc/chrony.conf
server 0.rhel.pool.ntp.org iburst
allow 192.168.4.0/24
local stratum 10
[root@client ~]# systemctl restart chronyd
[root@node1 ~]# cat /etc/chrony.conf
server 192.168.4.10 iburst
[root@node1 ~]# systemctl restart chronyd
[root@root9pc01 ~]# virt-manager
• 使用node1作为部署主机
[root@node1 ~]# yum -y install ceph-deploy
• ceph-deploy命令与子命令都支持--help查看帮助
[root@node1 ~]# ceph-deploy --help
• 为部署工具创建目录,存放密钥与配置文件
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster/
3.2.1 创建ceph集群
• 创建ceph集群配置(所有节点都为mon)
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
• 给所有节点安装ceph软件包
[root@node1 ceph-cluster]# ceph-deploy install node1 node2 node3
• 初始化所有节点的mon服务(主机名解析必须对)
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
//这里没有指定主机,是因为第一步创建的配置文件中已经有了,所以要求主机名解析必须对,否则连接不到对应的主机
1. 所有节点准备磁盘分区(下面以node1为例)
[root@node1 ~]# parted /dev/vdb mklabel gpt
[root@node1 ~]# parted /dev/vdb mkpart primary 1M 50%
[root@node1 ~]# parted /dev/vdb mkpart primary 50% 100%
//这两个分区用来做存储服务器的日志journal盘
vim /etc/udev/rules.d/100-ceph.rules //通过udev管理日志磁盘权限,采用这种方式可以在重启机器之后,集群状态正常
ACTION=="add", KERNEL=="vdb?",SUBSYSTEM=="block", OWNER="ceph",GROUP="ceph"
[root@node2 rules.d]# systemctl restart systemd-udev-trigger.service
//通过命令行修改日志磁盘,这种方式临时修改的,重启机器集群状态不正常.[]
[root@node1 ~]# chown ceph.ceph /dev/vdb1
[root@node1 ~]# chown ceph.ceph /dev/vdb2
2. 初始化清空磁盘数据(仅node1操作即可)
[root@node1 ~]# ceph-deploy disk zap node1:vdc node1:vdd
[root@node1 ~]# ceph-deploy disk zap node2:vdc node2:vdd
[root@node1 ~]# ceph-deploy disk zap node3:vdc node3:vdd
3. 创建OSD存储空间(仅node1操作即可)
[root@node1 ~]# ceph-deploy osd create node1:vdc:/dev/vdb1 node1:vdd:/
dev/vdb2
//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL
日志,一个存储设备对应一个日志设备,日志需要SSD,不需要很大
[root@node1 ~]# ceph-deploy osd create node2:vdc:/dev/vdb1 node2:vdd:/
dev/vdb2
[root@node1 ~]# ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/
dev/vdb2
[root@node1 ~]# ceph -s
– osd create创建OSD存储空间,如提示run
'gatherkeys’
[root@node1 ~]# ceph-deploy gatherkeys node1 node2 node3
– ceph -s查看状态,如果失败
[root@node1 ~]# systemctl restart ceph\*.service ceph\*.target
//在所有节点,或仅在失败的节点重启服务
-- 时间同步失败
~] # vim /etc/ceph/ceph.conf
vim /etc/ceph/ceph.conf
mon clock drift allowed = 2
mon clock drift warn backoff = 30
cp /etc/ceph/ceph.conf /root/ceph-cluster
cd /root/ceph-cluster
ceph-deploy --overwrite-conf admin node2 node3 //同步配置文件
在所有monitor主机上重启ceph-mon@\*服务
systemctl restart ceph-mon@node1
systemctl restart ceph-mon@node2
systemctl restart ceph-mon@node3
什么是块存储
• 单机块设备
– 光盘
– 磁盘
• 分布式块存储
– Ceph
– Cinder
• Ceph块设备也叫做RADOS块设备
– RADOS block device:RBD
• RBD驱动已经很好的集成在了Linux内核中
• RBD提供了企业功能,如快照、COW克隆等等
• RBD还支持内存缓存,从而能够大大提高性能
• Linux内核可用直接访问Ceph块存储
• KVM可用借助于librbd访问
• 查看存储池(默认有一个rbd池)
[root@node1 ~]# ceph osd lspools
0 rbd,
• 创建镜像、查看镜像
[root@node1 ~]# rbd create demo-image --image-feature layering --size 10G
[root@node1 ~]# rbd create rbd/image --image-feature layering --size 10G
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info demo-image
rbd image 'demo-image':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.d3aa2ae8944a
format: 2
features: layering
• 缩小容量
[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
• 将镜像映射为本地磁盘
[root@node1 ~]# rbd map demo-image
/dev/rbd0
[root@node1 ~]# lsblk
... ...
rbd0 251:0 0 10G 0 disk
• 接下来,格式化了!
[root@node1 ~]# mkfs.xfs /dev/rbd0
[root@node1 ~]# mount /dev/rbd0 /mnt
• 客户端需要安装ceph-common软件包
• 拷贝配置文件(否则不知道集群在哪)
• 拷贝连接密钥(否则无连接权限)
[root@client ~]# yum -y install ceph-common
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \
/etc/ceph/
• 映射镜像到本地磁盘
[root@client ~]# rbd map image
[root@client ~]# lsblk
[root@client ~]# rbd showmapped
id pool image snap device
0 rbd image - /dev/rbd0
• 客户端格式化、挂载分区
[root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# echo "test" > /mnt/test.txt
• 查看镜像快照
[root@node1 ~]# rbd snap ls image
• 创建镜像快照
[root@node1 ~]# rbd snap create image --snap image-snap1
[root@node1 ~]# rbd snap ls image
SNAPID NAME SIZE
4 image-snap1 15360 MB
• 注意:快照使用COW技术,对大数据快照速度会很快!
• 删除客户端写入的测试文件
[root@client ~]# rm -rf /mnt/test.txt
• 还原快照
[root@node1 ~]# rbd snap rollback image --snap image-snap1
• 客户端重新挂载分区
[root@client ~]# umount /mnt
[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls /mnt
• 如果想从快照恢复出来一个新的镜像,则可以使用克隆
• 注意,克隆前,需要对快照进行<保护>操作
• 被保护的快照无法删除,取消保护(unprotect)
[root@node1 ~]# rbd snap protect image --snap image-snap1
[root@node1 ~]# rbd snap rm image --snap image-snap1 //会失败
[root@node1 ~]# rbd clone \
image --snap image-snap1 image-clone --image-feature layering
//使用image的快照image-snap1克隆一个新的image-clone镜像
• 查看克隆镜像与父镜像快照的关系
[root@node1 ~]# rbd info image-clone
rbd image 'image-clone':
size 15360 MB in 3840 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.d3f53d1b58ba
format: 2
features: layering
flags:
parent: rbd/image@image-snap1
• 克隆镜像很多数据都来自于快照链
• 如果希望克隆镜像可以独立工作,就需要将父快照中
的数据,全部拷贝一份,但比较耗时!!!
[root@node1 ~]# rbd flamen image-clone
[root@node1 ~]# rbd info image-clone
rbd image 'image-clone':
size 15360 MB in 3840 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.d3f53d1b58ba
format: 2
features: layering
flags:
//注意,父快照信息没了!
• umount挂载点
[root@client ~]# umount /mnt
• 取消RBD磁盘映射
[root@client ~]# rbd showmapped
id pool image snap device
0 rbd image - /dev/rbd0
//语法格式:
[root@client ~]# rbd unmap /dev/rbd/{poolname}/{imagename}
[root@client ~]# rbd unmap /dev/rbd/rbd/image
• 删除快照(确保快照未被保护)
[root@node1 ~]# rbd snap rm image --snap image-snap
• 删除镜像
[root@node1 ~]# rbd list
[root@node1 ~]# rbd rm image
ceph FS 提供共享文件夹,不是很成熟 ceph组件 搭建流程
对象存储 需要专门的客户端,了解
node1-3 mon/osd
node4: mds CEPH FS需要
node5: RADOS 对象存储需要
node6: 客户端
dump2fs -h /dev/vde1
?表示任意一个字符
ext4 比较适合存放小文件 网页文件
xfs比较适合存放大文件 视频
搭建类:如ceph/openstack/elk
配置类:zabbix配置,自动发现,监控模板
应用类:ansible
losetup -a //查看镜像所在目录
virsh secret-list //查看生成的secret
virsh secret-undefine uuid
ntpdate IP 手动同步时间
ceph auth list 查看认证的key
[root@node1 ceph]# ceph auth list
[root@node1 ceph-cluster]# cat /root/ceph-cluster/ceph.bootstrap-mds.keyring //这里面的key值要和ceph auth list查看到的值是一样的,如果不一样,需要手动将ceph.bootstrap-mds.keyring的值改成和ceph auth list查看到的值一致。
在部署节点上 /var/lib/ceph/bootstrap-rgw目录下的ceph.keyring里面的key要和管理节点上查看到的key值一样