本文共 11832 字,大约阅读时间需要 39 分钟。
**Ceph存储
SSD(固态)速度块,容量小 SATA(磁盘)速度慢,容量大 vim /usr/lib/systemd/system/ :存放配置文件的地方 存储的类型: DAS :(直连存储,硬盘和电脑直接一根线连起来)中间的线分为:ide线sata线 sas线 NAS :(网络附加存储) Samba ,nfs, ftp 文件系统(#格式化过的) SAN :iscsi 块(#没格式化) SDS(软件定义存储) :分布式存储 ceph,glusterfs ext3, ext4, fst32, ntfs, xfs文件系统 没格式化的叫块,格式化完成的叫文件系统 常用分布式文件系统: Lustre Hadoop FastDFS 中国出版 Ceph 红帽出版 GlusterFS Ceph :具有高扩展,高可用,高性能的特点Ceph可以通过对象存储,块存储,文件系统存储 Ceph官网帮助文档:http://docs.ceph.org/start/intro
** **
OSDs -存储设备 必须要的组件
ceph-osd Monitors -集群监控组件 必须要的组件,至少要起3个mon ceph-mon RadosGateway (RGW) -对象存储网关 对应的软件包: ceph-radosgw MDSs 存放文件系统的元数据 ceph-mds Client -ceph客户端 – mon ceph-mon ceph-osd :安装好后可以做块模式iscsi ceph-mds :安装了这个就可以做文件系统模式 ceph-radosgw :可以做对象存储网关 文件系统由2个部分组成:iondo (元数据) block (数据) 注意:所有主机基本系统光盘的YUM源必须提前配置好。 安装前准备 物理机为所有节点配置yum源服务器。 提示:ceph10.iso在/linux-soft/02目录 [root@room9pc01 ~]#mkdir /var/ftp/ceph
在真机上进行创建目录 [root@room9pc01 ~]#mount /linux-soft/02/ceph10.iso /var/ftp/ceph/
把第二阶段里面的准备好的内容 进行挂载 配置无密码连接(包括自己远程自己也不需要密码),在node1操作。 [root@node1 ~]#ssh-keygen -f /root/.ssh/id_rsa -N ''
:创建无迷密钥
[root@node1 ~]# for i in 10 11 12 13 创建好后通过循环传给其他机子dossh-copy-id 192.168.4.$i 把无迷密钥传给其他机子done 结束后要输入其他机子的密码
修改/etc/hosts并同步到所有主机。警告:/etc/hosts解析的域名必须与本机主机名一致!!!!1. [root@node1 ~]# vim/etc/hosts 添加解析的域名2.... ...3.192.168.4.10 client4.192.168.4.11 node15.192.168.4.12 node26.192.168.4.13 node3警告:/etc/hosts解析的域名必须与本机主机名一致!!!!
[root@node1 ~]#for i in 10 11 12 13doscp /etc/hosts 192.168.4.$i:/etc/ 把本地的/etc/hosts/远程传送到其他电脑上done修改所有节点都需要配置YUM源,并同步到所有主机。createrepo /var/ftp/ceph #生成仓库数据文件只有先生成仓库数据文件,后面配置的yum库才是真的yum仓库[local_repo]name=CentOS-$releasever - Basebaseurl="ftp://192.168.4.254/centos-1804"enabled=1gpgcheck=0[mon]name=monbaseurl="ftp://192.168.4.254/ceph/MON"enabled=1gpgcheck=0[osd]name=osdbaseurl="ftp://192.168.4.254/ceph/OSD"enabled=1gpgcheck=0[tools]name=toolsbaseurl="ftp://192.168.4.254/ceph/Tools"enabled=1gpgcheck=0上面这些都是你真机上面拷贝到/var/ftp/ceph/里面有的仓库数据
[root@node1 ~]# yum repolist #验证YUM源软件数量
repolist: 10,013 1万多个软件包[root@node1 ~]# for i in 10 11 12 13 远程传给其他电脑doscp /etc/yum.repos.d/ceph.repo 192.168.4.$i:/etc/yum.repos.d/done
所有节点主机与真实主机的NTP服务器同步时间。
提示:默认真实物理机已经配置为NTP服务器。[root@node1 ~]#vim /etc/chrony.conf… …server 192.168.4.254 iburst 指向真机为时间服务器
[root@node1 ~]# for i in 10 11 12 13doscp /etc/chrony.conf 192.168.4.$i:/etc/ 把时间服务器传过去ssh 192.168.4.$i "systemctl restart chronyd" 远程后重启服务donechronyc sources 传过去后,打这个命令可以查看是和谁在同步时间
准备存储磁盘
物理机上为每个虚拟机准备3块磁盘(可以使用命令,也可以使用图形直接添加) [root@room9pc01 ~]#virt-manager
物理机,实验环境就是真机 部署ceph集群 安装部署软件ceph-deploy: 是一个用patroy写的脚本 在node1安装部署工具,学习工具的语法格式。 [root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# ceph-deploy --help
看帮助 [root@node1 ~]# ceph-deploy mon --help
看mon 的帮助 安装好后会在/usr/bin/ceph-deploy 生成一个脚本
创建目录: [root@node1 ~]#mkdir ceph-cluster
[root@node1 ~]#cd ceph-cluster/
部署Ceph集群 创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件。 在ceph.conf配置文件中定义monitor主机是谁 [root@node1 ceph-cluster]#ceph-deploy new node1 node2 node3
在当前目录下生产配置文件 给所有节点安装ceph相关软件包
root@node1 ceph-cluster]# for i in node1 node2 node3do ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"done 通过域名远程其它电脑安装ceph 的相关软件包
ceph-mon ceph-osd :安装好后可以做块模式iscsi
ceph-mds :安装了这个就可以做文件系统模式 ceph-radosgw :可以做对象存储网关 初始化所有节点的mon服务,也就是启动mon服务(主机名解析必须对)。 [root@node1 ceph-cluster]#ceph-deploy mon create-initial
把配置文件初始化,并拷贝给3个mon 集群里的成员,并启动服务 Ceph -s :查看ceph集群的详细信息 创建OSD 备注:vdb1和vdb2这两个分区用来做存储服务器的journal缓存盘。
[root@node1 ceph-cluster]#` for i in node1 node2 node3 do ssh $i "parted /dev/vdb mklabel gpt"先进行parted 进行设置分区模式为 gpt模式 ssh $i "parted /dev/vdb mkpart primary 1 50%"开始进行分第一个primary :主分区 ,分该磁盘的50% ssh $i "parted /dev/vdb mkpart primary 50% 100%"开始进行分第二个primary :主分区 ,分该磁盘的50% 到100% ,就是剩下所有 done
Vdb1和vdb2 做缓存
磁盘分区后的默认权限无法让ceph软件对其进行读写操作,需要修改权限。 node1、node2、node3都需要操作,这里以node1为例 [root@node1 ceph-cluster]#chown ceph:ceph /dev/vdb1
[root@node1 ceph-cluster]# chown ceph:ceph /dev/vdb2
修改2个分区的权限,所属者和所属组都修改成ceph #上面的权限修改为临时操作,重启计算机后,权限会再次被重置。 #我们还需要将规则写到配置文件实现永久有效。 #规则:如果设备名称为/dev/vdb1则设备文件的所有者和所属组都设置为ceph。 #规则:如果设备名称为/dev/vdb2则设备文件的所有者和所属组都设置为ceph。 vim /etc/udev/rules.d/70-vdb.rules
永久改设备权限配置文件手动添加内容 ENV{ DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"ENV{ DEVNAME}=="/dev/vdb2",OWNER="ceph",GROUP="ceph"
如果有个设备名叫/dev/vdb1或/vdb2,所有者修改为ceph 所属者修改为ceph
DEVNAME :代表设备名称 OWNER :所有者 GROUP :所属组 For循环传输比较轻松,可以直接这样传送:[root@node1 ~]# > for i in node1 node2 node3> do> scp /etc/udev/rules.d/70-vdb.rules $i:/etc/udev/rules.d 你得完成上面的权限配置> ssh $i "chown ceph:ceph /dev/vdb1"> ssh $i "chown ceph:ceph /dev/vdb2"> done
初始化清空磁盘数据(仅node1操作即可)
[root@node1 ceph-cluster]#ceph-deploy disk zap node1:vdc node1:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdc node2:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdc node3:vdd
通过node1上面的脚本命令ceph-deploy 来进行远程格式化 创建OSD存储空间(仅node1操作即可) 重要:很多同学在这里会出错!将主机名、设备名称输入错误!!! [root@node1 ceph-cluster]# ceph-deploy osd create \node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2
自动启动服务共享node1的vdc盘缓存盘为vdb1 vdd盘缓存盘为vdb2
//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL缓存,//一个存储设备对应一个缓存设备,缓存需要SSD,不需要很大
[root@node1 ceph-cluster]# ceph-deploy osd create \node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2[root@node1 ceph-cluster]# ceph-deploy osd create \node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2
小心,一但出错,就只能推了重做!!
完成后输入ceph -s
查看一下ceph集群的详细信息如果出现: ERROR : :ceph集群服务错误,不可使用 WARN :出了点小问题,服务能用 OK : 集群服务正常启动 创建Ceph块存储 创建镜像 查看存储池。 [root@node1 ~]# ceph osd lspools
查看存储池 0 rbd, 默认有一个叫rdb的存储池,编号为0 创建镜像、查看镜像 [root@node1 ~]# rbd create demo-image --image-feature layering --size 10G
[root@node1 ~]# rbd create rbd/image --image-feature layering --size 10G
#这里的demo-image和image为创建的镜像名称,可以为任意字符。
#–image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。 Cow 功能:快照 ,写时复制 #提示:ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering。 [root@node1 ~]#rbd list
查看有那些镜像 [root@node1 ~]#rbd info demo-image
查看名叫demo-image镜像的详细内容 动态调整 1)缩小容量 [root@node1 ~]#rbd resize --size 7G image --allow-shrink == 允许缩小大小
[root@node1 ~]#rbd info image 在进行查看
2)扩容容量 [root@node1 ~]#rbd resize --size 15G image
[root@node1 ~]#rbd info image
通过KRBD访问 客户端通过KRBD访问 1.#客户端需要安装ceph-common软件包 2.#拷贝配置文件(否则不知道集群在哪) 3.#拷贝连接密钥(否则无连接权限)
1.[root@client ~]# yum -y install ceph-common 安装软件包,会产生一个目录 :/etc/ceph2.[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/3.[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \/etc/ceph/
[root@client ~]# rbd map image
挂载 image镜像
lsblk
查看是否共享成功,有没有多一个磁盘 [root@client ~]# rbd showmapped
查看共享的磁盘是那个池里的镜像 id pool image snap device 0 rbd image - /dev/rbd0 是编号0池里面叫image的镜像共享的 客户端格式化、挂载分区 共享过来的磁盘可以格式化,可以分区: [root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# echo "test" > /mnt/test.txt
创建镜像快照 Ceph(3副本) 防止计算机出错能依旧访问 快照是备份用的,防止人误删除,可以找回 (缺点:做一次,只能保存一次) 查看镜像快照(默认所有镜像都没有快照)。 [root@node1 ~]# rbd snap ls image
查看image的快照,默认没有快照 给镜像创建快照: [root@node1 ~]# rbd snap create image --snap image-snap1
现在为其创建快照 #为image镜像创建快照,快照名称为image-snap1 [root@node1 ~]# rbd snap ls image
在次查看image就有快照了 SNAPID NAME SIZE 4 image-snap1 10240 MB 删除客户端写入的测试文件 :测试一下误删除,快照还原 [root@client ~]# rm -rf /mnt/test.txt
先删除 [root@client ~]# umount /mnt
快照不支持在线还原,得退出挂载 还原快照: [root@node1 ~]# rbd snap rollback image --snap image-snap1
用快照:snap image-snap1 对镜像image 进行还原 #客户端重新挂载分区 [root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls /mnt
在次查看,就会出现你之前创建快照时的所有文件 创建快照克隆 快照克隆镜像 Protect :保护 [root@node1 ~]# rbd snap protect image --snap image-snap1
:保护image这个盘里image-snap1这个快照 [root@node1 ~]# rbd snap rm image --snap image-snap1
因为你把image-snap1这个快照保护了,删除会失败 [root@node1 ~]# rbd clone \image --snap image-snap1 image-clone --image-feature layering
//使用image的快照image-snap1克隆一个新的名称为image-clone镜像
rbd list
克隆完后,查看是否克隆成功 查看克隆镜像与父镜像快照的关系 [root@node1 ~]#rbd info image-clone
查看克隆镜像的父子关系 #克隆镜像很多数据都来自于快照链 #如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!! [root@node1 ~]#rbd flatten image-clone
把父快照数据全部拷贝过来 [root@node1 ~]#rbd info image-clone
拷贝完成后,再次查看 #注意,父快照信息没了! [root@node1 ~]#rbd snap unprotect image --snap image-snap1
#取消快照保护 [root@node1 ~]#rbd snap rm image --snap image-snap1
#可以删除快照 客户端撤销磁盘映射 [root@client ~]#umount /mnt
解除挂载 [root@client ~]#rbd showmapped
查看磁盘对应的镜像信息 [root@client ~]#rbd unmap image
删除image镜像对应的磁盘 块存储应用案例 创建磁盘镜像: [root@node1 ~]#rbd create vm1-image --image-feature layering --size 10G
[root@node1 ~]#rbd list
[root@node1 ~]#rbd info vm1-image
Ceph认证账户(仅查看即可): Ceph默认开启用户认证,客户端需要账户才可以访问,默认账户名称为client.admin,key是账户的密钥。 可以使用ceph auth添加新账户(案例我们使用默认账户) [root@node1 ~]#cat /etc/ceph/ceph.conf
//配置文件 [root@node1 ~]#cat /etc/ceph/ceph.client.admin.keyring
//账户文件 创建KVM虚拟机(注意:这里使用真实机当客户端!!!)。 使用virt-manager创建2台普通的KVM虚拟机。 配置libvirt secret(注意:这里使用真实机当客户端!!!)。 编写账户信息文件,让KVM虚拟机知道ceph的账户名称。
[root@room9pc01 ~]# vim secret.xml //新建临时文件,内容如下允许访问ceph服务 client.admin secret 用户名
#使用XML配置文件创建secret virsh secret-list
[student@room9pc01 ~]$virsh secret-define secret.xml
读取账号文件 生成 secret 7408708c-749c-41bb-87c8-f1e67ed0e7d9 //随机的UUID,这个UUID对应的有账户信息
virsh secret-undefine secret.xml 删除 给secret绑定admin账户的密码,密码参考服务器ceph.client.admin.keyring文件[student@room9pc01 ~]$ virsh secret-set-value \> --secret 7408708c-749c-41bb-87c8-f1e67ed0e7d9 \> --base64 AQA3oTpd9gMLKhAAZ59utkaAIEcUJtOQwCP77Q==
//这里secret后面是之前创建的secret的UUID //base64后面是client.admin账户的密码
//现在secret中既有账户信息又有密钥信息virsh secret-list
查看上面你创好的uuid 虚拟机的XML配置文件。 每个虚拟机都会有一个XML配置文件,包括: 虚拟机的名称、内存、CPU、磁盘、网卡等信息。 不推荐直接使用vim修改配置文件,推荐使用virsh edit修改配置文件,添加内容:
[root@room9pc01] virsh edit node1 //node1为虚拟机名称用户名 uuid要修改一下,可以virsh secret-list 看到之前弄过的信息密码在在secret里 挂载vm1-image_x000B_ 访问4.12,端口为6789_x000B_ 生成的磁盘名叫vde
不能改成本机访问本机,不然会电脑崩溃.
Ceph文件系统 添加一台虚拟机,部署MDS节点。 主机的主机名及对应的IP地址如表-1所示 格式化由2个部分组成:iondo (元数据) block (数据) 实现此案例需要按照如下步骤进行。1)添加一台新的虚拟机,要求如下: IP地址:192.168.4.14 主机名:node4 配置yum源(包括rhel、ceph的源)
与Client主机同步时间 node1允许无密码远程node4 2)部署元数据服务器 登陆node4,安装ceph-mds软件包 [root@node4 ~]#yum -y install ceph-mds
登陆node1部署节点操作 [root@node1 ~]#cd /root/ceph-cluster
//该目录,是最早部署ceph集群时,创建的目录 [root@node1 ceph-cluster]#ceph-deploy mds create node4
//给nod4拷贝配置文件,启动mds服务 同步配置文件和key [root@node1 ceph-cluster]#ceph-deploy admin node4
3)创建存储池ceph osd lspools
:这个命令查看池子,默认有一个池子 [root@node4 ~]#ceph osd pool create cephfs_data 128
//创建存储池,对应128个PG [root@node4 ~]#ceph osd pool create cephfs_metadata 128
//创建存储池,对应128个PG 5)创建Ceph文件系统 [root@node4 ~]#ceph mds stat
//查看mds状态 e2:, 1 up:standbyceph fs new myfs1 cephfs_metadata cephfs_data
显示下面内容: new fs with metadata pool 2 and data pool 1
//注意,先写medadata池,再写data池 前面的是做indot 后面是做block
//默认,一个集群只能创建1个文件系统,多余的会报错 [root@node4 ~]#ceph fs ls
显示下面内容 name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data]
[root@node4 ~]#ceph mds stat
e4: 1/1/1 up {0=node4=up:creating} 6)客户端挂载
[root@client ~]# mount -t ceph 192.168.4.11:6789:/ /mnt/cephfs/ \ -o name=admin,secret=AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==
//注意:文件系统类型为ceph
//192.168.4.11为MON节点的IP(不是MDS节点) //admin是用户名,secret是密钥 //密钥可以在/etc/ceph/ceph.client.admin.keyring中找到 创建对象存储服务器 对象存储需要程序员写代码通过API 接口才可以去服务对象存储,读写的操作 百度云盘(对象存储) 部署对象存储服务器 1)准备实验环境,要求如下: IP地址:192.168.4.15 主机名:node5 配置yum源(包括rhel、ceph的源) 与Client主机同步时间 node1允许无密码远程node5 修改node1的/etc/hosts,并同步到所有node主机 2)部署RGW软件包 [root@node1 ~]#ceph-deploy install --rgw node5
同步配置文件与密钥到node5 [root@node1 ~]#cd /root/ceph-cluster
ceph-deploy admin node5
新建网关实例
启动一个rgw服务 radosgw [root@node1 ~]#ceph-deploy rgw create node5
对象存储做好了 修改服务端口 登陆node5,RGW默认服务端口为7480,修改为8000或80更方便客户端记忆和使用 [root@node5 ~]# vim /etc/ceph/ceph.conf
[client.rgw.node5]host = node5rgw_frontends = "civetweb port=8000"
//node5为主机名 //civetweb是RGW内置的一个web服
systemctl restart ceph-radosgw@rgw.node5.service
转载地址:http://cteh.baihongyu.com/