• ceph存储系统


    ceph存储系统

    简介

    • ceph被称作面向未来的存储
    • 可以实现的存储方式
      • 块存储:提供像普通硬盘一样的存储,为使用者提供“硬盘”
      • 文件系统存储:类似于NFS的共享方式,为使用者提供共享文件夹
      • 对象存储:像百度云盘一样,需要使用单独的客户端
    • ceph还是一个分布式的存储系统,非常灵活。如果需要扩容,只要向ceph集中增加服务器即可。
    • ceph存储数据时采用多副本的方式进行存储,生产环境下,一个文件至少要存3份。ceph默认也是三副本存储。

    ceph的构成

    • Ceph OSD 守护进程: Ceph OSD 用于存储数据。此外,Ceph OSD 利用 Ceph 节点的 CPU、内存和网络来执行数据复制、纠删代码、重新平衡、恢复、监控和报告功能。存储节点有几块硬盘用于存储,该节点就会有几个osd进程。
    • Ceph Mon监控器: Ceph Mon维护 Ceph 存储集群映射的主副本和 Ceph 存储群集的当前状态。监控器需要高度一致性,确保对Ceph 存储集群状态达成一致。维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。
    • MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据。
    • RGW:对象存储网关。主要为访问ceph的软件提供API接口。

    搭建ceph

    服务器名称IP简介
    client192.168.2.1客户端(同时也是临时的yum仓库和时钟服务器)
    node1192.168.2.101管理节点,硬盘/dev/sda系统盘,/dev/sdb 20G,/dev/sdc 20G
    node2192.168.2.102节点,硬盘/dev/sda系统盘,/dev/sdb 20G,/dev/sdc 20G
    Node3192.168.2.103节点,硬盘/dev/sda系统盘,/dev/sdb 20G,/dev/sdc 20G

    注意事项

    1. 防火墙关闭
    2. 控制节点到各个节点的域名解析和免密登录一定要配置好
    3. 时钟一定要同步
    4. 安装的软件可以重复执行命令查看是否成功
    5. 创建OSD的时候一定要根据自己的硬盘名称来创建

    配置网络和防火墙

    • client
    # 关闭防火墙
    systemctl stop firewalld
    setenforce 0
    sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    
    # 搭建yum源
    yum install -y vsftpd
    systemctl enable vsftpd --now
    mkdir -p /var/ftp/{centos,ceph}
    echo "/data/iso/ceph10.iso  /var/ftp/ceph  iso9660  defaults 0  0" >> /etc/fstab
    echo "/data/iso/centos7.iso  /var/ftp/centos  iso9660  defaults 0  0" >> /etc/fstab
    mount -a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • node1
    # 设置服务器名,关闭防火墙,设置网络,清除之前的yum源
    hostnamectl set-hostname node1
    yum remove -y firewalld
    sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.2.101/24 ipv4.gateway 192.168.2.254 autoconnect yes
    nmcli connection up eth0
    rm -rf /etc/yum.repos.d/*
    yum clean all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • node2
    # 设置服务器名,关闭防火墙,设置网络,清除之前的yum源
    hostnamectl set-hostname node2
    yum remove -y firewalld
    sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.2.102/24 ipv4.gateway 192.168.2.254 autoconnect yes
    nmcli connection up eth0
    rm -rf /etc/yum.repos.d/*
    yum clean all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • node3
    # 设置服务器名,关闭防火墙,设置网络,清除之前的yum源
    hostnamectl set-hostname node3
    yum remove -y firewalld
    sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.2.103/24 ipv4.gateway 192.168.2.254 autoconnect yes
    nmcli connection up eth0
    rm -rf /etc/yum.repos.d/*
    yum clean all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    配置yum源和域名解析

    • client
    # 创建repo
    vim local.repo
    # 文件内容如下
    [base]
    name=Centos-$releasever - Base
    baseurl=ftp://yum-server/centos/
    gpgcheck=0
    
    vim ceph.repo
    # 文件内容如下
    [osd]
    name = ceph osd 
    baseurl = ftp://yum-server/ceph/OSD/
    enabled = 1
    gpgcheck = 0
    
    [mon]
    name = ceph mon 
    baseurl = ftp://yum-server/ceph/MON/
    enabled = 1
    gpgcheck = 0
    
    [tools]
    name = ceph tools
    baseurl = ftp://yum-server/ceph/Tools/
    enabled = 1
    gpgcheck = 0
    
    # 配置节点的yum和免密登录
    echo "192.168.2.1  yum-server" >> /etc/hosts
    for i in {1..3}
    do
        echo "192.168.2.10${i}  node${i}" >> /etc/hosts
        ssh-copy-id node${i}
        scp local.repo ceph.repo node${i}:/etc/yum.repos.d/
    done
    
    # 配置域名解析
    for i in node{1..3}
    do
        scp /etc/hosts $i:/etc/
    done
    
    # 在clietn上安装chrony,ceph必须要求时钟同步,不然后面分区之后会有警告
    yum install -y chrony
    vim /etc/chrony.conf
    # 取消下面两行注释并修改部分内容,26,29两行
    allow 192.168.2.0/24
    local stratum 10
    
    # 启动服务
    systemctl restart chrony
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    配置节点时钟同步

    • node1(控制节点)
    # 配置控制节点到每个节点的免密登录
    ssh-keygen  # 一直回车
    ssh-copy-id node2
    ssh-copy-id node3
    
    # 配置时钟跟client同步
    yum install -y chrony
    vim /etc/chrony.conf
    # 文件中上面几个server都注释,添加一行,效果如下
    # server 0.centos.pool.ntp.org iburst
    # server 1.centos.pool.ntp.org iburst
    # server 2.centos.pool.ntp.org iburst
    # server 3.centos.pool.ntp.org iburst
    server 192.168.2.1 iburst
    
    systemctl enable chronyd --now  # 启动服务器并开机自启
    chronyc sources -v  # 查看 ^* yum-server说明成功
    
    # 配置其他节点的时钟同步
    for i in node2 node3
    do
        ssh $i yum install -y chrony
        scp /etc/chrony.conf $i:/etc/
        ssh $i systemctl restart chronyd
        ssh $i systemctl enable chronyd
    done
    
    # 检查是否成功,出现^* yum-server就说明成功了,因为我这里时钟服务器和yum服务器是用一个服务器,所以显示的是同一个
    ssh node2 chronyc sources -v
    ssh node3 chronyc sources -v
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    安装ceph集群

    • node1:通过node1控制节点进行安装
    # 本机安装软件
    yum install -y ceph-mon ceph-osd ceph-mds ceph-radosgw ceph-deploy
    # 远程node1和node2进行软件安装
    ssh node2 yum install -y ceph-mon ceph-osd ceph-mds ceph-radosgw
    ssh node3 yum install -y ceph-mon ceph-osd ceph-mds ceph-radosgw
    
    # 检查是否安装成功
    ceph-deploy --help
    
    # 创建工作目录并进入
    mkdir ceph-cluster && cd ceph-cluster
    
    # 创建新的集群,会出现3个文件,ceph.conf集群配置文件,ceph-deploy-ceph.log日志文件,ceph.mon.keyring共享密钥
    ceph-deploy new node{1..3}
    echo "rbd_default_features = 1" >> ceph.conf  # 开启快照功能
    
    # 初始化monitor
    ceph-deploy mon create-initial
    
    # 查看各节点的ceph-mon
    systemctl status ceph-mon*
    ssh node2 systemctl status ceph-mon* | grep Active
    ssh node3 systemctl status ceph-mon* | grep Active  # 也可以执行这个 ^2^3,是将上一条命令的2换成3
    
    # 查看集群状态,目前因为没有硬盘,所以是HEALTH_ERR
    ceph -s | grep health
    
    # 创建OSD,这里自己的实际情况配置,我这里每个节点上都是sdb、sdc,你可以执行lsblk看一下自己的本地环境
    ceph-deploy disk zap node1:sd{b,c}
    ceph-deploy disk zap node2:sd{b,c}
    ceph-deploy disk zap node3:sd{b,c}
    
    # 创建存储空间。这里的名称跟上面一样根据实际情况进行修改,ceph会硬盘分为两个分区,一个分区大小为5GB,用于保存ceph的内部资源;另一个分区是剩余全部空间
    ceph-deploy osd create node1:sd{b,c}
    ceph-deploy osd create node2:sd{b,c}
    ceph-deploy osd create node3:sd{b,c}
    
    # 查看集群状态
    ceph -s | grep health  # HEALTH_OK,如果是HEALTH_WARN就说明哪边配置好,如时钟
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    Tips(安装错误的时候,可以尝试下面命令,本人安装错误的时候,试了下,发现好像没用,可能是自己脸黑):

    # 如果安装过程中出现keyring...这种报错,可以试着执行以下命令
    ceph-deploy gatherkeys node{1..3}
    
    # 如果安装错误,可以清理数据后,重新安装。清理数据命令
    ceph-deploy purge node1
    ceph-deploy purge node2
    ceph-deploy purge node3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    实现块存储

    • node1
    # 查看存储池,这里默认会有一个
    ceph osd lspools
    
    # 查看存储池大小
    ceph df
    
    # 查看存储池rbd存储数据时,保存的副本数量
    ceph osd pool get rbd size
    
    # 在默认存储池中,创建一个名为demo-image大小为10G的镜像
    rbd create demo-image --size 10G
    
    # 查看默认存储池中的镜像
    rbd list
    
    # 查看镜像信息
    rbd info demo-image
    
    # 扩容至20G
    rbd resize --size 15G demo-image
    rbd info demo-image
    
    # 缩减至8G,慎用,一般不用
    rbd resize --size 8G demo-image --allow-shrink
    rbd info demo-image
    
    # 删除镜像,慎用
    rbd rm demo-image
    
    # 创建一个大小10G的镜像,提供给客户端使用
    rbd create demo --size 10G
    rbd info demo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • client使用
    # 安装ceph客户端软件
    yum install -y ceph-common
    
    # 复制节点的配置文件和密钥keyring到客户端
    scp node1:/etc/ceph/ceph.{conf,client.admin.keyring} /etc/ceph/
    
    # 客户端查看镜像
    rbd list  # demo
    
    # 将ceph提供的镜像映射到本地
    rbd map demo  # /dev/rbd0
    
    # 查看映射
    rbd showmapped
    
    # 格式化,第一次使用才需要格式化,如果是多台只需要格式一次
    mkfs.xfs /dev/rbd0
    
    # 临时挂载使用
    mount /dev/rbd0 /mnt/
    
    # 查看是否挂载成功
    df -h /mnt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    python超详细基础教程:元组和集合
    08 | Harbor 不可用排查方法
    OpenHarmony应用开发入门教程(一、开篇)
    【kubernetes】关于云原生之k8s集群的pod理论详解
    Spring Boot(七)
    【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别
    深入理解Java虚拟机之【垃圾回收相关算法】
    metaRTC5.0实现webrtc的TURN支持
    合格论文的七个要素!
    P1123 取数游戏
  • 原文地址:https://blog.csdn.net/lubuhan/article/details/138171241