Ceph存储集群实验---VMware版本42-47
一、创建一台虚拟机的步骤《文件》–《新建虚拟机》—《自定义》----《稍后安装操作系统》—安装时内存稍微大一点(1.5G 左右)—《网络类型》使用默认直接下一步剩下的步骤都使用默认值(直接点击下一步)二、给虚拟机安装操作系统《编辑虚拟机设置》----《CD|DVD》----《使用 iso》浏览选择光盘iso三、在 VMware 中创建虚拟网络《编辑》----《虚拟网络编辑器》--...
一、创建一台虚拟机的步骤
《文件》–《新建虚拟机》—《自定义》----《稍后安装操作系统》—
安装时内存稍微大一点(1.5G 左右)—《网络类型》使用默认直接下一步剩下的步骤都使用默认值(直接点击下一步)
二、给虚拟机安装操作系统
《编辑虚拟机设置》----《CD|DVD》----《使用 iso》 浏览选择光盘iso
三、在 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:///mnt #不要照抄,需要各位同学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.10client
192.168.4.11node1
192.168.4.12node2
192.168.4.13node3
[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
done
scp /etc/chrony.conf $i:/etc/
ssh $i “systemctl restart chronyd”
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 集群支持块共享、文件系统共享、对象存储共享块共享
(同一时间仅可以一个客户端访问)
块(没有格式化)
文件系统(格式化,NTFS,fat32,ext4,xfs 文件系统)100G
写数据时,数据会被写到 block 中(4M 的 a.mp4,占用多个 block)【block 中存数据】 Inode 中存储元数据(metadata)【元数据是数据的数据、描述数据的数据,比如一个文件, 有文件名,时间,权限,大小 文件数据的地址】
Ceph 提供文件系统共享的实验:(使用 node3 做 ceph-mds 服务,操作指令在 node1 执行) [root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy mds create node3
[root@node1 ~]# ceph osd pool create cephfs_data 128
#创建一个新的共享池,名称为 cephfs_data
[root@node1 ~]# ceph osd pool create cephfs_metadata 128
#创建一个新的共享池,名称为 cephfs_metadata cephfs_metadata 做 inode,cephfs_data 做 block
[root@node1 ~]# ceph osd lspools #查看共享池
[root@node1 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data
#创建一个文件系统,这个文件系统由 inode 和 block 组成cephfs_metadata 做 inode,存元数据
cephfs_data 做 block,存数据文件系统的名称是 myfs1
[root@node1 ~]# ceph fs ls #查看文件系统
客 户 端 mount 访 问 : [root@client ~]# mkdir /cephfs
查 看 cat /etc/ceph/ceph.client.admin.keyring 找 用 户 名 和 密 码 [root@client ~]# 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 集群需要验证用户和密码才能访问)
Ceph 对象存储的实验:
对象存储:基于 kv 的存储,通过 API 接口访问,对象存储中所有的数据都被认为是一个对象。基于对象的存储就是对象存储。
运维:部署集群,维护集群,故障排错
开发:写程序,基于程序中的指令连接ceph 服务器,上传下载数据
百度云盘就属于对象存储(不能直接 mount,不是在客户端多一个磁盘) 百度云盘,客户端访问需要下载他的客户端软件(网页也是软件)
登陆 node1 使用ceph-deploy 远程启动 RGW 服务(radosgw) [root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy rgw create node3
可以修改配置文件,修改服务的端口(非必须的操作)【在 node3 操作】[root@node3 ~]# vim /etc/ceph/ceph.conf
手动加入下面三行
[client.rgw.node3]
host = node3
rgw_frontends = “civetweb port=8000”
[root@node3 ~]# systemctl restart ceph-radosgw@rgw.node3.service
[root@node3 ~]# ss -ntulp |grep radosgw
更多推荐
所有评论(0)