集群与存储-ceph

  • 什么是分布式文件系统

  • 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
  • 分布式文件系统的设计基于客户机/服务器模式
  • 什么是Ceph

  • Ceph是一个分布式文件系统
  • 具有高扩展、高可用、高性能的特点
  • Ceph可以提供对象存储、块存储、文件系统存储
  • Ceph可以提供PB级别的存储空间
  • 软件定义存储(Software Defined Storage)作为存储行业的一大发展趋势,已经越来越受到市场的认可
  • Ceph组件

  • OSDs存储设备
  • Monitors集群监控组件
  • RadosGateway(RGW)对象存储网关
  • MDSs存放文件系统的元数据(对象存储和块存储不需要该组件)
  • Client-ceph客户端
  • 步骤

    1. 安装前准备
  • 在client上生成秘钥
  • [root@client ~]# ssh-keygen -f /root/.ssh/id_rsa -N ‘’
  • 将秘钥发送给三台节点
  • [root@client ~]# for i in 21 40 41 42
    > do
    > ssh-copy-id 10.211.55.$i
    > done
  • 修改/etc/hosts并同步到所有主机
  • /etc/hosts解析的域名必须与本主机名一致
  • 10.211.55.21 client
    10.211.55.40 node1
    10.211.55.41 node2
    10.211.55.42 node3
    [root@client ~]# vim /etc/hosts
    [root@client ~]# for i in 40 41 42
    > do
    > scp /etc/hosts 10.211.55.$i:/etc/hosts
    > done
  • 配置时间服务器同步,并发送给各节点
  • [root@client ~]# vim /etc/chrony.conf
    [root@client ~]# for i in node1 node2 node3
    、> do
    、> scp /etc/chrony.conf $i:/etc/
    、> done
    chrony.conf 100% 1176 1.2MB/s 00:00
    chrony.conf 100% 1176 1.4MB/s 00:00
    chrony.conf
  • 检查时间服务器是否可用
  • [root@client ~]# chronyc sources
    210 Number of sources = 2
    MS Name/IP address Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^* 120.25.115.20 2 6 337 5 +4758us[+4612us] +/- 23ms
    ^+ 203.107.6.88 2 6 177 17 -8638us[-8784us] +/- 36ms
  • 为每一个node添加三块硬盘
  • 部署ceph集群

  • 目标:
  • 安装部署工具ceph-deploy
  • 创建ceph集群
  • 准备日志磁盘分区
  • 创建OSD存储空间
  • 查看ceph状态,验证
  • 步骤
    1. 安装部署软件ceph-deploy
  • [root@client ~]# yum -y install ceph-deploy
  • 创建目录,以后所有的操作必须在此目录下
  • [root@client ~]# mkdir ceph-cluster
    [root@client ~]# cd ceph-cluster
    1. 部署ceph集群
  • 创建ceph集群配置,在ceph-cluster目录下生成ceph配置文件
  • [root@client ceph-cluster]# ceph-deploy new node1 node2 node3//指定mon主机
  • [root@client ceph-cluster]# ls
    ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
  • 该命令会只是在新创建的目录内产生配置文件,不对节点产生影响
  • 给所有节点安装ceph相关软件包
  • 使用for循环,给三个节点安装ceph-mon ceph-osd ceph-mds ceph-radosgw
  • [root@client ceph-cluster]# for i in node1 node2 node3; do ssh $i “yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw”; done
  • 初始化所有节点的mon服务,也就是启动mon服务(主机名必须解析对)
  • [root@client ceph-cluster]# ceph-deploy mon create-initial//一定要关闭firewalld和selinux
  • 查证,在任何节点使用ceph -s查看
  • [root@node1 ~]# ceph -s
    cluster b5613b00-fd09-4fd1-b187-bd8d880d349b
    health HEALTH_ERR
    no osds
    monmap e1: 3 mons at {node1=10.211.55.40:6789/0,node2=10.211.55.41:6789/0,node3=10.211.55.42:6789/0}
    election epoch 4, quorum 0,1,2 node1,node2,node3
    osdmap e1: 0 osds: 0 up, 0 in
    flags sortbitwise,require_jewel_osds
    pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
    0 kB used, 0 kB / 0 kB avail
    64 creating
    1. 创建OSD
  • 规划:
  • sdb 8:16 0 64G 0 disk
    sdc 8:32 0 64G 0 disk
    sdd 8:48 0 64G 0 disk
  • 将sdb分区为sdb1和sdb2,将sdc和sdd共享,sdb1和sdb2作为sdc、sdd的缓存盘
  • [root@client ceph-cluster]# for i in node1 node2 node3
    > do
    > ssh $i “parted /dev/sdb mklabel gpt”//使用gpt分区
    > ssh $i “parted /dev/sdb mkpart primary 1 50%”//第一个分区占50%
    > ssh $i “parted /dev/sdb mkpart primary 50% 100%”
    > done
    *查看 sdb 8:16 0 64G 0 disk
    ├─sdb1 8:17 0 32G 0 part
    └─sdb2 8:18 0 32G 0 part
    sdc 8:32 0 64G 0 disk
    sdd 8:48 0 64G 0 disk
  • 磁盘分区后的默认权限无法让ceph软件对其进行读写操作,需要修改权限
  • [root@node1 ~]# ll /dev/sdb*
    brw-rw----. 1 root disk 8, 16 Sep 27 00:25 /dev/sdb
    brw-rw----. 1 root disk 8, 17 Sep 27 00:25 /dev/sdb1
    brw-rw----. 1 root disk 8, 18 Sep 27 00:25 /dev/sdb2
    可以看到sdb1和sdb2所有者是root,所属组是disk,权限都是读写,而ceph用户是没有权限的
  • [root@node1 ~]# id ceph
    uid=167(ceph) gid=167(ceph) groups=167(ceph)
  • [root@client ceph-cluster]# for i in node1 node2 node3//改变sdb1和2的属主、属组
    > do
    > ssh $i “chown ceph.ceph /dev/sdb1”
    > ssh $i “chown ceph.ceph /dev/sdb2”
    > done
  • [root@node1 ~]# ll /dev/sdb*
    brw-rw----. 1 root disk 8, 16 Sep 27 00:25 /dev/sdb
    brw-rw----. 1 ceph ceph 8, 17 Sep 27 00:25 /dev/sdb1
    brw-rw----. 1 ceph ceph 8, 18 Sep 27 00:25 /dev/sdb2
  • 但是这种修改是临时操作,重启计算机后,权限会再次被重置,需要持久化保存
  • 在/etc/udev/rules.d/下创建以.rules为后缀名的文件
  • [root@client ceph-cluster]# for i in node1 node2 node3
    > do
    > ssh $i “echo “ENV{DEVNAME}"/dev/sdb1",OWNER=“ceph”,GROUP=“ceph”" >> /etc/udev/rules.d/vdb.rules"//如果有设备名称是/dev/sdb1,那么属主是ceph,属组是ceph
    > ssh $i "echo "ENV{DEVNAME}
    ”/dev/sdb2”,OWNER=“ceph”,GROUP=“ceph”" >> /etc/udev/rules.d/vdb.rules"
    > done
  • 用ceph-deploy格式各node的sdc和sdd(仅在client上操作)
  • [root@client ceph-cluster]# for i in 1 2 3
    > do
    > for m in c d
    > do
    > ceph-deploy disk zap node i : s d i:sd i:sdm
    > done
    > done
  • 创建OSD存储空间(仅在client上操作)
  • [root@client ceph-cluster]# for i in node1 node2 node3
    > do
    > ceph-deploy osd create $i:sdc:/dev/sdb1 $i:sdd:/dev/sdb2
    > done
    、、到此集群创建成功
    1. 创建ceph块存储
  • 目标:
  • 创建块存储镜像
  • 客户端映射镜像
  • 创建镜像快照
  • 使用快照还原数据
  • 使用快照克隆镜像
  • 删除快照与镜像
  • 步骤:
  • 查看存储池–集群创建成功后默认会生成一个池
  • [root@node1 ~]# ceph osd lspools
  • 0 rbd,
  • 创建镜像、查看镜像
  • [root@node1 ~]# rbd create demo-image --image-feature layering --size 10G
  • demo-image是镜像名称比如haha,image-feature layering是支持特性为cow
  • 查看创建好的镜像
  • [root@node2 ~]# rbd info lifei
    rbd image ‘lifei’:
    size 10240 MB in 2560 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.371d6b8b4567
    format: 2
    features: layering
    flags:
  • 查看rbd池中的已经创建好的镜像
  • [root@node2 ~]# rbd list
    haha
    lifei
  • 动态调整镜像
    1. 缩小容量
  • [root@node1 ~]# rbd info haha
    rbd image ‘haha’:
    size 10240 MB in 2560 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.37146b8b4567
    format: 2
    features: layering
    flags:
  • [root@node1 ~]# rbd resize --size 7G haha --allow-shrink
    Resizing image: 100% complete…done.
  • [root@node1 ~]# rbd info haha
    rbd image ‘haha’:
    size 7168 MB in 1792 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.37146b8b4567
    format: 2
    features: layering
    flags:
  • 缩小镜像时,需要加上参数allow-shrink,允许缩小
  • [root@node1 ~]# rbd resize --size 100G haha
    Resizing image: 100% complete…done.
    [root@node1 ~]# rbd info haha
    rbd image ‘haha’:
    size 102400 MB in 25600 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.37146b8b4567
    format: 2
    features: layering
    flags:
  • 扩大的时候直接指定大小即可
  • 通过KRBD访问
    1. 客户端通过KRBD访问
  • 客户端需要安装ceph-common软件包
  • 拷贝配置文件
  • 拷贝连接秘钥
  • [root@client ~]# yum -y install ceph-common
  • [root@client ~]# ls /etc/ceph/
    rbdmap
  • 安装完后会生成/etc/ceph目录
  • [root@client ~]# cp /root/ceph-cluster/ceph.conf /etc/ceph/
    [root@client ~]# cp /root/ceph-cluster/ceph.client.admin.keyring /etc/ceph/
    //将配置文件和client密码文件拷贝至/etc/ceph/下
  • 查看client现有硬盘情况
  • sdb 8:16 0 64G 0 disk
    sdc 8:32 0 64G 0 disk
    sdd 8:48 0 64G 0 disk
  • 添加块设备
  • [root@client ~]# rbd list
    haha
    lifei
    [root@client ~]# ceph osd lspools
    0 rbd,
    [root@client ~]# rbd list
    haha
    lifei
    [root@client ~]# rbd map haha
    /dev/rbd0
    [root@client ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda 8:0 0 64G 0 disk
    ├─sda1 8:1 0 500M 0 part /boot
    └─sda2 8:2 0 63.5G 0 part
    ├─VolGroup-lv_root 253:0 0 50G 0 lvm /
    ├─VolGroup-lv_swap 253:1 0 2G 0 lvm [SWAP]
    └─VolGroup-lv_home 253:2 0 11.6G 0 lvm /home
    sdb 8:16 0 64G 0 disk
    sdc 8:32 0 64G 0 disk
    sdd 8:48 0 64G 0 disk
    sr0 11:0 1 131.2M 0 rom /run/media/root/CDROM
    sr1 11:1 1 4.4G 0 rom /run/media/root/CentOS 7 x86_64
    rbd0 252:0 0 100G 0 disk
  • 查看已挂载情况
  • [root@client ~]# rbd map lifei
    /dev/rbd1
    [root@client ~]# rbd showmapped
    id pool image snap device
    0 rbd haha - /dev/rbd0
    1 rbd lifei - /dev/rbd1
    1. 客户端格式化、挂载分区
  • [root@client ~]# mkfs.xfs /dev/rbd0
  • [root@client ~]# mount /dev/rbd0 /mnt
    [root@client ~]# echo “test” >> /mnt/test.txt
  • 为镜像创建快照
  • [root@client ~]# rbd snap create haha --snap haha-snap1
  • //为haha镜像创建一个名称为haha-snap1的快照
  • 查看haha的快照
  • [root@client ~]# rbd snap list haha
    SNAPID NAME SIZE
    8 haha-snap1 102400 MB
    1. 删除客户端写入的测试文件,注意:还原镜像不支持在线还原,需要先 umount掉
  • [root@client ~]# rm -rf /mnt/test.txt
    [root@client ~]# ls /mnt
    [root@client ~]# umount /mnt
  • 还原快照
  • [root@client ~]# rbd snap rollback haha --snap haha-snap1
    Rolling back to snapshot: 100% complete…done.
  • 重新挂载分区,并查看目录
  • [root@client ~]# mount /dev/rbd0 /mnt
    [root@client ~]# ls /mnt
    test.txt
  • 创建快照克隆
  • 克隆快照
  • [root@client ~]# rbd snap protect haha --snap haha-snap1//对haha的镜像保护
  • [root@client ~]# rbd snap rm haha --snap haha-snap1//被保护的镜像不允许被删除
    rbd: snapshot ‘haha-snap1’ is protected from removal.
    2021-09-29 08:08:05.319241 7f1988845d80 -1 librbd::Operations: snapshot is protected
  • [root@client ~]# rbd clone haha --snap haha-snap1 copyhaha --image-feature layering
  • //用haha的snap1克隆一个叫copyhaha的镜像
  • 查看
  • [root@client ~]# rbd list
    copyhaha
    haha
    lifei
  • [root@client ~]# rbd info copyhaha
    rbd image ‘copyhaha’:
    size 102400 MB in 25600 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.5e2f6b8b4567
    format: 2
    features: layering
    flags:
    parent: rbd/haha@haha-snap1//由快照创建的镜像,所以快照不能解保护或删除
    overlap: 102400 MB
  • [root@client ~]# rbd flatten copyhaha//真正的拷贝过来原始数据,解除父子关系
  • [root@client ~]# rbd flatten copyhaha
    Image flatten: 100% complete…done.
    [root@client ~]# rbd info copyhaha
    rbd image ‘copyhaha’:
    size 102400 MB in 25600 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.5e2f6b8b4567
    format: 2
    features: layering
    flags:
  • 解除父子关系后,解保护,删除镜像
  • [root@client ~]# rbd snap unprotect haha --snap haha-snap1
    [root@client ~]# rbd snap rm haha --snap haha-snap1
    [root@client ~]# rbd snap ls haha
  • Ceph文件系统
  • 延续前面的实验,实现ceph文件系统的功能,具体实现现有以下功能:
    • 部署MDSs节点
    • 创建ceph文件系统
    • 客户端挂载文件系统
  • 方案:
  • 启动节点mds服务
  • [root@client ceph-cluster]# ceph-deploy mds create node1
  • 在node1查看服务状态
  • [root@node1 ~]# systemctl status ceph-mds@node1
    ● ceph-mds@node1.service - Ceph metadata server daemon
    Loaded: loaded (/usr/lib/systemd/system/ceph-mds@.service; enabled; vendor preset: disabled)
    Active: active (running) since 五 2021-10-01 21:49:00 CST; 1min 33s ago
    Main PID: 363 (ceph-mds)
    CGroup: /system.slice/system-ceph\x2dmds.slice/ceph-mds@node1.service
    └─363 /usr/bin/ceph-mds -f --cluster ceph --id node1 --setuser ceph --setg…

10月 01 21:49:00 node1 systemd[1]: Started Ceph metadata server daemon.
10月 01 21:49:00 node1 ceph-mds[363]: starting mds.node1 at :/0

  • 创建存储池
  • [root@node1 ~]# ceph osd pool create cephfs_data 128///创建存放数据的池子
    pool ‘cephfs_data’ created
    [root@node1 ~]# ceph osd pool create cephfs_metadata 128///创建存放元数据的池子
    pool ‘cephfs_metadata’ created
    [root@node1 ~]# ceph osd lspools
    0 rbd,1 cephfs_data,2 cephfs_metadata,
  • 创建fs(只能创建一个fs,inode放前面)
  • [root@node1 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data
    new fs with metadata pool 2 and data pool 1
  • [root@node1 ~]# ceph fs ls
    name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
  • 在客户端挂载
  • [root@node1 ~]# cat /etc/ceph/ceph.client.admin.keyring
    [client.admin]
    key = AQCDSVFhOxuqBhAAdcB/qjwEDeI3wephURXhlw==
    caps mds = “allow *”
    caps mon = “allow *”
    caps osd = “allow *”
    [root@node1 ~]# 登出
    Connection to node1 closed.
    [root@client ceph-cluster]# mount -t ceph 10.211.55.40:6789:/ /mnt/ -o name=admin,secret=AQCDSVFhOxuqBhAAdcB/qjwEDeI3wephURXhlw==
  • 查看挂载情况
  • [root@client ceph-cluster]# df -h
  • 10.211.55.40:6789:/ 384G 1.2G 383G 1% /mnt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值