什么是分布式文件系统
常用分布式文件系统
Lustre
Hadoop
FastDFS
Ceph
GlusterFS
什么是Ceph
Ceph 组件
实验拓扑图
什么是块储存
单机块设备
-光盘
-磁盘
分布式块储存
-Ceph
-Cinder
一、
创建一台虚拟机的步骤 《文件》–《新建虚拟机》—《自定义》----《稍后安装操作系统》—
安装时内存稍微大一点(1.5G 左右)—《网络类型》使用默认直接下一步 剩下的步骤都使用默认值(直接点击下一步)
二、
给虚拟机安装操作系统 《编辑虚拟机设置》----《CD|DVD》----《使用 iso》----浏览选择光盘 iso 按照第一阶段牛老师的步骤安装 Linux 操作系统。
三、
在 VMware 中创建虚拟网络 《编辑》----《虚拟网络编辑器》----《更改设置》----《添加网络》
添加一个 vmnet4,确定,确定
修改 windows 虚拟网络的 IP,《网络和 intenet 设置》----《网络和共享中心》----《更改 设配器设置》,双击 vmnet4,—《设置》----双击《tcp/ipv4》,设置 IP 地址:192.168.4.254, 子网掩码:255.255.255.0,确定即可
四、
给所有虚拟机设置网络连接方式(我们需要 4 台虚拟机,4 台虚拟机都做一样的操作)
打开虚拟机----编辑虚拟机设置------《网络适配器》----《自定义》连接到《vmnet4》确 定即可,接下来就可以进入虚拟机系统,通过 nmcli 设置网卡 IP。
五、
给所有虚拟机配置 YUM 源 已经启动的虚拟机,右击虚拟机,选《设置》 没有启动的虚拟机,可以点击《编辑虚拟机设置》 确保每个虚拟机都加载了 CentOS 系统光盘的 ISO
还需要让所有虚拟机再多加载一个 ceph.iso 光盘,给所有虚拟机添加一个光驱 《设置》虚拟机,-----《添加》-----《CD/DVD 驱动器》—使用 ISO,选择 ceph10.iso 光 盘
最好重启一下 修改/etc/fstab 实现光盘的永久挂载 # vi /etc/fstab /dev/sr0 /media iso9660 defaults 0 0 /dev/sr1 /mnt iso9660 defaults 0 0 # mount -a
#vi /etc/yum.repos.d/dvd.repo [dvd] name=centos baseurl=file:///mn
t #不要照抄,需要各位同学 ls 查看下对应目录的内容 gpgcheck=0
提示:最小化安装,没有 vim 软件,不提供命令自动补齐 # yum -y install vim bash-completion
给所有虚拟机配置 IP 和主机名(这里仅以 node1 为例) #ip a s #查看 vmware 虚拟机中网卡的名称(可能每个人不一样) # nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.4.11/24 connection.autoconnect yes # nmcli connection up ens33 # hostnamect set-hostname node1
共享存储的常见类型: 1)块存储(iSCSI、ceph) 客户端多了一个磁盘 2)文件系统(NFS、ceph) 客户端直接 mount 3)对象存储(ceph)
Ceph 组件 OSD 提供共享磁盘(默认 3 副本) MON 提供监控和集群地图 要求:MON 至少 3 台,因为有过半原则
Ceph 实验的环境准备: 1.配置 YUM 源(ceph 光盘) 2.SSH 密钥(免密码登陆) 3.修改 hosts 解析 4.NTP 时间同步 5.node1、node2、node3 每台虚拟机添加 2 块磁盘(20G)
(1)
配置 YUM 源(ceph 光盘)【所有主机都需要操作】 # vim /etc/yum.repos.d/ceph.repo [mon] name=mon baseurl=file:///media/MON gpgcheck=0 [osd] name=osd baseurl=file:///media/OSD gpgcheck=0 [tools] name=tools baseurl=file:///media/Tools gpgcheck=0
2)
SSH 密钥(免密码登陆)【我们使用 node1 配置 ssh 密钥】 [root@node1 ~]# ssh-keygen [root@node1 ~]# for i in 10 11 12 13 do ssh-copy-id 192.168.4.$i done
3)
修改 hosts 解析(解析的域名必须跟主机名一致) [root@node1 ~]# vim /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 client node2 node3 do scp /etc/hosts $i:/etc/ done
4)
配置 NTP 时间同步(client 做服务器,所有 node 节点与 client 同步时间) [root@client ~]# vim /etc/chrony.conf allow 192.168.4.0/24 #26 行 local stratum 10 #29 行 [root@client ~]# systemctl restart chronyd.service [root@client ~]# firewall-cmd --set-default-zone=trusted [root@client ~]# vim /etc/sysconfig/selinux SELINUX=permissive [root@client ~]# setenforce 0
所有 node 节点与 client 同步时间 [root@node1 ~]# vim /etc/chrony.conf server 192.168.4.10 iburst #第 3 行 [root@node1 ~]# for i in node1 node2 node3 do scp /etc/chrony.conf $i:/etc/ ssh $i "systemctl restart chronyd" done
5)
开打 vmware 给 node1、node2、node3 每台虚拟机添加 2 块磁盘 右击虚拟机----《设置》----《添加》----《硬盘》,按提示点击下一步即可 添加完毕后需要重启虚拟机(node1,node2,node3) 重启系统后,使用#lsblk 命令可以查看磁盘是否添加成功!
推荐:给 vmware 可以做一个快照
部署 Ceph 集群 [root@node1 ~]# yum -y install ceph-deploy #一定要在有 ssh 密钥的主机上安装 [root@node1 ~]# mkdir ceph-cluster #但凡执行 ceph-deploy 脚本,必须在该目录下,否则会出错 [root@node1 ~]# cd ceph-cluster/ [root@node1 ceph-cluster]# for i in node1 node2 node3 do ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw" done
关闭所有节点的防火墙和 SELinux [root@node1 ~]# firewall-cmd --set-default-zone=trusted [root@node1 ~]# vim /etc/sysconfig/selinux SELINUX=permissive [root@node1 ~]# setenforce 0 [root@node2 ~]# firewall-cmd --set-default-zone=trusted [root@node2 ~]# vim /etc/sysconfig/selinux SELINUX=permissive [root@node2 ~]# setenforce 0 [root@node3 ~]# firewall-cmd --set-default-zone=trusted [root@node3 ~]# vim /etc/sysconfig/selinux SELINUX=permissive [root@node3 ~]# setenforce 0
部署 MON 集群 [root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3 #测试所有 node 节点状态,创建了 ceph 的配置文件 ceph.conf(在当前目录下)
[root@node1 ceph-cluster]# ls ceph.conf
[root@node1 ceph-cluster]# ls /etc/ceph/ #/etc/ceph 是启动 ceph 需要读取配置文件的地方
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#把当前目录下的 ceph 配置文件远程拷贝到目标主机(node1,node2,node3)放到/etc/ceph 目录,并且启动 ceph-mon 服务(服务名称为 ceph-mon@主机名)
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1.service 确认服务是否启动 [root@node1 ceph-cluster]# ceph -s
部署 OSD 集群 每台虚拟机都添加了 2 块磁盘(/dev/sdb、/dev/sdc) sdb 用来做缓存盘,sdc 做数据盘 读写操作 缓存 数据 client<---------->ceph 集群[sdb]<----->[sdc] 硬盘分:传统磁盘[容量大、性能差]和固态盘[容量小、性能高] 可以使用固态盘做缓存,磁盘做数据盘 假设每个磁盘是 20G,最终我们的 ceph 集群提供多大的容量?答案是 60G node1[sdb]+[sdc]20G node2[sdb]+[sdc]20G = 20+20+20=60G node3[sdb]+[sdc]20G
1)
把所有的磁盘初始化(仅在 node1 操作) [root@node1 ~]# cd ceph-cluster/
#必须的操作
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc [root@node1 ceph-cluster]# ceph-deploy disk zap node2:sdb node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:sdb node3:sdc
2)
启动 OSD 服务共享这些磁盘 [root@node1 ceph-cluster]# ceph-deploy osd create node1:sdc:/dev/sdb
远程 node1 启动 osd 服务把/dev/sdc 共享给用户,/dev/sdb 作为缓存盘(允许一次性启动多 台主机的服务)并且把 sdc 挂载到了/var/lib/ceph/xxx 目录 常见错误及解决方法(非必须操作)。 使用 osd create 创建 OSD 存储空间时,如提示下面的错误提示:
[ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run ‘gatherkeys’ 可以使用如下命令修复文件,重新配置 ceph 的密钥文件: [root@node1 ceph-cluster]# ceph-deploy gatherkeys node1 node2 node3
[root@node1 ceph-cluster]# ceph-deploy osd create node2:sdc:/dev/sdb
[root@node1 ceph-cluster]# ceph-deploy osd create node3:sdc:/dev/sdb
验证:OSD 的服务名称 ceph-osd@数字 [root@node1 ceph-cluster]# df -h /dev/sdc1
20G 34M 20G 1% /var/lib/ceph/osd/ceph-0
[root@node1 ceph-cluster]# systemctl status ceph-osd 键两下
[root@node1 ceph-cluster]# systemctl status ceph-osd@0.service [root@node1 ceph-cluster]# ceph osd tree
块共享实验:ceph 总容量是 60G 在服务端我们就可以任意个创建共享镜像 image(共享盘),大小可以任意 创建一个 5G 共享盘----》用户访问 /dev/rbd0 创建 10G 共享盘 ----》 存储池(默认有一个名称为 rbd 的池)
[root@node1 ~]# ceph osd lspools
#查看共享池
[root@node1 ~]# rbd create jacob --image-feature layering --size 5G
#创建共享镜像,名称为 jacob,开启功能:支持 cow,共享大小为 5G
[root@node1 ~]# rbd list
#列出所有共享镜像 jacob
[root@node1 ~]# rbd info jacob
#查看某个镜像的详细信息
[root@node1 ~]# rbd resize --size 10G jacob
#扩容容量
[root@node1 ~]# rbd resize --size 5G jacob --allow-shrink
#缩减容量
客户端访问共享:(client 做客户端主机) [root@client ~]# yum -y install ceph-common
[root@client ~]# scp node1:/etc/ceph/ceph.conf /etc/ceph/
#拷贝配置文件,配置文件中记录的有 ceph 集群服务器的 IP 信息
[root@client ~]# scp node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
#拷贝访问 ceph 集群的密钥文件,有了密钥才有权限访问集群
[root@client ~]# lsblk
[root@client ~]# rbd map jacob /dev/rbd0 [root@client ~]# rbd map test /dev/rbd1
[root@client ~]# lsblk
客户端进行快照还原数据的实验: 副本:写数据,可以自动备份 3 份;删数据时,删除 3 份 快照:写数据;快照;模拟认为误操作;还原快照
1)
格式化、挂载、写数据
[root@client ~]# mkfs.xfs /dev/rbd0 [root@client ~]# mkdir /data
[root@client ~]# mount /dev/rbd0 /data/
[root@client ~]# echo "abc hello world" > /data/test.txt
回到 node 集群(给 jacob 共享盘创建快照)
[root@node1 ~]# rbd snap ls jacob #默认该镜像盘没有快照
[root@node1 ~]# rbd snap create jacob --snap jacob-snap1 #给 jacob 镜像盘创建快照,快照名称为 jacob-snap1 到 client 模拟数据被误操作删除(ceph 不支持在线还原快照)
[root@client ~]# rm -rf /data/test.txt
[root@client ~]# umount /data/
到 node 集群还原快照
[root@node1 ~]# rbd snap rollback jacob --snap jacob-snap1 客户端再次挂载访问共享
[root@client ~]# mount /dev/rbd0 /data/
[root@client ~]# cat /data/test.txt
使用快照克隆一个新的镜像盘 image Jacob—3G 数据(快照)----》创建新的共享 创建一个新的共享 1)保护快照(防止快照被删除)
[root@node1 ~]# rbd snap protect jacob --snap jacob-snap1
[root@node1 ~]# rbd clone jacob --snap jacob-snap1 jacob-clone \ --image-feature layering
#使用现有 jacob 镜像盘的 jacob-snap1 这个快照,克隆一个新的共享镜像盘,名称为 jacobclone
[root@node1 ~]# rbd ls
[root@node1 ~]# rbd info jacob-clone
[root@node1 ~]# rbd flatten jacob-clone
[root@node1 ~]# rbd info jacob-clone
#克隆镜像很多数据都来自于快照链 #如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!
[root@node1 ~]# rbd snap unprotect jacob --snap jacob-snap1
#取消快照保护
[root@node1 ~]# rbd snap rm jacob --snap jacob-snap1
#删除快照
客户端取消对 ceph 共享盘的挂载实验:
[root@client ~]# umount /data/
[root@client ~]# rbd showmapped
[root@client ~]# rbd unmap jacob
[root@client ~]# rbd unmap /dev/rbd1
真机安装的 CentOS,创建 KVM 虚拟机 node1(10G 磁盘)
/var/lib/libvirt/images/a.qcow2(10G) node2(10G 磁盘)
/var/lib/libvirt/images/b.qcow2(10G) ceph 集群(10T)20G
默认新建虚拟机(虚拟磁盘使用的是本地磁盘) 真机创建虚拟机(虚拟机调用 ceph 网络磁盘)云盘 真机坏了 换一台其他主机(调用云盘)
Ceph 可以提供块共享、文件系统共享、对象存储
ceph-mon
ceph-osd
ceph-mds
ceph-radosgw
创建Ceph块储存(知识点)
- 创建块储存镜像
- 客户端映射镜像
- 创建镜像快照
- 使用快照还原数据
- 使用快照克隆镜像
- 删除快照与镜像
补充 手动添加网关完以后
命令行加入(添加网关)
nmcli connection add con-name ens37 ifname ens37 type ethernet