Linux集群存储——day4——Ceph分布式存储搭建、OSD块存储、COW快照、RBD存储镜像

Ceph的专有名词
OSDs 存储设备
Monitors 集群监控组件
MDSs 存放文件系统的元数据

部署Ceph分布式存储

    Ceph集群中一般是一个管理服务器(control)多个存储服务器(node),所以下面所有关于存储服务器的操作都需要对每个存储器进行操作(主机名为node1的操作需要在每个存储服务器上进行一次)

0. 部署前准备工作:
   0.1 我们进行配置操作前,要先将所有服务器配置好yum网络等基本配置
   0.2 让管理服务器可以免密登陆其他所有的存储服务器
   0.3 在管理服务器上安装 ceph-deploy(管理Ceph的软件)
   0.4 在管理服务器上创建一个ceph的工作目录(我设置的名字叫ceph-path)
   0.5 让所有设备都绑定一个NTP时间同步服务器,并且所有设备的chronyd服务都配好了,具体查看…………………………………………

1. 部署集群:
   1.1 创建Ceph集群: (必须前往控制服务中创建用于ceph工作的目录中) 

[root@control ceph-path]# ceph-deploy  new  存储设备的IP1  存储设备的IP2  ………………

   1.2 然后给集群中服务器装包:ceph-osd ceph-mds ceph-mon ceph-radosgw
       不过我们不是一个一个到存储服务器上进行yum安装,可以直接在Ceph管理服务器上进行控制: 

[root@control ceph-path]# ceph-deploy  install  存储设备的IP1  存储设备的IP2  ………………

   1.3 初始化所有节点的mon服务(不需要再次指定存储服务器的IP,因为他默认的IP是创建的Ceph集群中的所有IP)

[root@control ceph-path]# ceph-deploy mon create-initial

2. 部署每个存储服务器的OSD
   2.1 准备磁盘 ,将其中一个磁盘作为日志存储盘(journal盘),根据每个存储设备中除了日志存储盘还有其他几个盘来分,有几个盘就把日志存储盘平均分成几部分,日志存储盘一个分区对应一个数据存储磁盘
       (例子是存储盘一共有4个盘,1个作为日志存储盘,3个作为存储盘,所以日志盘分成3份)

[root@node1 ~]# parted  选定的日志存储盘  mklabel  gpt
[root@node1 ~]# parted  选定的日志存储盘  mkpart primary  1M  33%
[root@node1 ~]# parted  选定的日志存储盘  mkpart primary  33%  66%
[root@node1 ~]# parted  选定的日志存储盘  mkpart primary  66%  100%

   2.2 把日志存储盘及其分区的所有者和所属组改为ceph,让ceph用户拥有对磁盘的读写权限,到时候写磁盘的时候软件就是用ceph用户的身份进行操作

[root@node1 ~]# chown ceph:ceph /dev/vdb* ; \
echo 'chown ceph:ceph /dev/vdb*' >> /etc/rc.local ; \
chmod +x /etc/rc.local

   2.3 初始化清空磁盘数据

[root@control ceph-path]# for i in 存储设备的IP1  存储设备的IP2  ……
do 
ceph-deploy disk  zap  $i:数据存储磁盘名1   $i:数据存储磁盘名2 ……  
done

   2.4 创建OSD存储空间

[root@control ceph-path]# for i in 存储设备的IP1  存储设备的IP2  ……
do 
ceph-deploy osd create $i:存储磁盘名1:/dev/日志存储盘中对应的分区  $i:存储磁盘名2:/dev/日志存储盘中对应的分区 ……
done
# 如果出问题了,可以使用下面命令修复,然后再尝试创建
# [root@control ceph-path]# ceph-deploy gatherkeys  存储设备的IP1  存储设备的IP2  ……

   2.5 检查OSD存储空间

[root@control ceph-path]# ceph -s
# 如果出现   health HEALTH_OK    那么就是成功的,就不需要其他的操作了,否则就有问题,需要做修复和查错!
# 如果出现   HEALTH_WARN  \n clock skew detected on  那就说明NTP时间同步有问题
# 如果只出现了   HEALTH_WARN   那么就尝试重启服务  
# [root@control ceph-path]# systemctl restart ceph\*.service ceph\*.target

   2.6 查看各个服务器的ceph服务情况(ceph开头的server、target结尾的服务都是)

[root@node1 ~]# systemctl status ceph\*.service ceph\*.target
# 也可以过滤一下,看看有没有没起来的服务
# [root@node1 ~]# systemctl status ceph\*.service ceph\*.target | grep 'inactive'

   2.7 排错的时候,可以查看管理服务器的ceph日志,查看里面有哪些错误

[root@control ceph-path]# cat -n ceph-deploy-ceph.log | grep ERROR

3. 建立块存储

   块存储可以理解为一种存储设备,块存储分为单机块存储(光盘、磁盘)和分布式块存储(Ceph)。
   而Ceph块存储可以理解为,他是把零散的多个服务器的一个个OSD块存储结合成一个大的存储设备,这个大的设备就叫存储池(rbd池)

   每个Ceph块设备都有存储池,默认就有一个,然后在存储池里有多个镜像。
   在使用块设备的时候,我们也要进行“分区”——创建镜像,并不是真的分区,但可以理解为磁盘分区,他就是把存储池的存储空间进行分割,然后每个镜像在进行具体的其他的操作,所以,我们真正使用的时候用的是镜像

    在部署镜像的时候,如果其所在存储池就是默认存储池rbd,则可以不写存储池名

  对于镜像的基本操作: 在任意一个服务器(管理或者存储)进行操作都可以,并且会相互同步

     查看存储池

[root@node1 ~]# ceph osd lspools

     创建存储池

[root@node1 ~]# ceph osd pool create 存储池名 创建多少个目录用来存储设备(128个)

     删除存储池(存储池名字要一模一样的写两次)

[root@node1 ~]# ceph osd pool delete 存储池名 存储池名 --yes-i-really-really-mean-it

     查看镜像

[root@node1 ~]# rbd info 存储池名/镜像名

     创建镜像

[root@node1 ~]# rbd create 存储池名/镜像名 --image-feature layering(镜像样式) --size 大小

     修改镜像大小

[root@node1 ~]# rbd resize --size 修改到的镜像大小(M/G) 存储池名/镜像名  --allow-shrink

     把镜像设备映射到本机

[root@node1 ~]# rbd  map  存储池名/镜像名
# 然后界面会返回一个磁盘位置,然后我们就可以对这个设备进行分区挂载格式化等操作

     删除镜像(如果镜像有快照必须先删除快照文件)

[root@node1 ~]# rbd  rm  存储池名/镜像名


   3.1 创建一个镜像

   3.2 配置客户端使用Ceph存储连接镜像(client主机为客户端)
     3.2.1 安装软件包 ceph-common

     3.2.2 拷贝Ceph存储集群的配置文件:
        把管理服务器中的ceph配置文件和链接密钥拷贝到本机/etc/ceph上
        其中 ceph.conf 是用来确定集群的信息,让客户端知道集群在哪里
        其中 ceph.client.admin.keyring 是用来确定链接,使客户端有权限连接ceph集群

[root@client ~]# scp 管理服务器的IP:/etc/ceph/ceph.conf 管理服务器的IP:/etc/ceph/ceph.client.admin.keyring /etc/ceph/

     3.2.3 把Ceph集群镜像映射为本地磁盘(和服务器把镜像设备映射到本机一样的操作)

[root@client ~]# rbd  map  存储池名/镜像名

     3.2.4 查看Ceph集群的挂载情况

[root@client ~]# rbd  showmapped

   3.3 然后用户就可以像操作本机磁盘一样对Ceph磁盘进行使用。


4. 利用COW技术给ceph存储集群做快照备份
    COW -- Copy  Online  Writ 写时复制
   其操作原理就是,建立快照后,当客户端对磁盘镜像进行写操作的时候,就保存修改前的文件到快照中,也就是说,刚刚创建的新快照是不占用任何存储空间的,只有数据发生变更了,才会把旧数据保存到快照中。
   而做快照是为了恢复数据,所以,只有数据发生了变更,快照才会记录,一开始可能分配了和磁盘镜像一样的空间,单实际上并没有使用那么多。
   什么操作算写操作呢?删除、修改、添加任何数据,那么只要有前面的任意一个操作,快照就会工作进行记录。

   4.0 查看Ceph块存储镜像的快照信息:

[root@node1 ~]# rbd snap ls 存储池名/镜像名

   4.1 如何在需要保存数据的时候在服务器上创建快照

[root@node1 ~]# rbd snap create 存储池名/镜像名 --snap 快照名

   4.2 如何创建将磁盘数据还原到快照的状态
     4.2.1 客户端解除挂载

[root@client ~]# umount  镜像挂载的位置

     4.2.2 服务端解还原快照 

[root@node1 ~]# rbd snap rollback 存储池名/镜像名  --snap 快照名

     4.2.3 客户端重新挂载

[root@client ~]# mount 镜像所在的系统位置(rbd map 命令查到的结果)  镜像挂载的位置

  注: 
    1. 还原的时候,其顺序可以有改变,但是,最好不要改变,否则会有一些问题出现,如果服务器的时间不一致,则数据还原会失败
    2. 还原的时候如果出现客户端不能挂载,那就就在管理服务器上重新还原一下快照即可

   4.3 删除快照

[root@node1 ~]# rbd snap rm 存储池名/镜像名  --snap 快照名

5. 快照克隆

    根据快照制作一个镜像的克隆出来,这个克隆可以当作一个镜像进行使用,只不过这里面有原镜像拍摄快照的时候的所有数据信息,包括文件格式化的信息等,所以快照克隆可以理解为以快照拍摄时期的镜像为模板,克隆出一个和当时一模一样的镜像出来。
    但是是克隆的镜像数据大多来源于快照链,也就是他不能脱离原镜像独立使用,如果要独立使用要做其他的操作,不过消耗时间会多不少,下面会具体讲述。

   查看集体克隆的信息:(其实克隆就是一个镜像,所以其基本操作和不同镜像一样)

[root@node1 ~]# rbd info 克隆名

   删除克隆:

[root@node1 ~]# rbd rm 克隆名

    5.1 必须先把要克隆的快照保护起来(使其不能被删除或者修改)

[root@node1 ~]# rbd snap protect 镜像名 --snap 快照名

    5.2 创建快照的克隆

# 没有快照可以现在制作,然后继续操作,制作快照的方法在上面
[root@node1 ~]# rbd clone 镜像名 --snap 快照名 克隆名字 --image-feature layering(镜像样式)
# 如果希望克隆的镜像可以独立使用,不与原镜像和快照有关系就要把整个原镜像进行拷贝
# [root@node1 ~]# rbd flatten 克隆名字

    5.3 解除保护

[root@node1 ~]# rbd snap unprotect 镜像名 --snap 快照名

    5.4 配置客户端连接镜像进行操作(和对待普通镜像一样的操作)

总结:

    快照克隆出来的就是一个镜像,可以当作一个镜像进行操作。

查看命令:
ceph -s 检查Ceph存储的管理服务器部署是否成功
rbd info 镜像名 查看镜像信息
rbd snap ls 镜像名 查看镜像快照信息
配置Ceph服务基本思路
环境 搭建几个存储服务器里面配置至少2个用于存储的磁盘(至少要一个日志存储一个数据存储)
搭建一个控制服务器可以免密登陆所有的存储服务器,安装管理软件ceph-deploy,创建个存储服务配置的目录(所有操作都在这里面进行)
几个服务器都绑定一个NTP服务器,开启chronyd服务,保证时间同步
 
建集群 创建 ceph-deploy  new 存储设备……
装包 ceph-deploy  install 存储设备……
初始化 ceph-deploy mon create-initial
 
建OSD 配置磁盘 到各个磁盘把预定的日志存储盘分成等同数据存储个数的区
赋予权限 给日志存储盘所有分区ceph用户都有读写权限
清空磁盘 ceph-deploy disk  zap  存储设备:数据存储磁盘……
建立OSD ceph-deploy osd create  存储设备:数据存储磁盘:/dev/日志存储盘中对应的分区……
 
建块存储 创建镜像 rbd create 镜像名 --image-feature layering(镜像样式) --size 大小
配置客户端 装包ceph-common、拷贝配置文件ceph.conf和ceph.client.admin.keyring
映射镜像 rbd map 镜像名
 
做备份 创建快照 rbd snap create 镜像名 --snap 快照名
还原 解挂 、 还原rbd snap rollback 镜像名  --snap 快照名 、 挂载
 
克隆服务器 保护快照 rbd snap protect 镜像名 --snap 快照名
创建克隆 bd clone 镜像名 --snap 快照名 克隆名字 --image-feature layering(镜像样式)
解除保护 rbd snap unprotect 镜像名 --snap 快照名

你可能感兴趣的:(Linux,集群存储)