Cluster04 - Ceph概述 部署Ceph集群 Ceph块存储

ceph

快照:可用做备份

一、ceph概述

1.1 什么是分布式文件系统

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

1.2 常用分布式文件系统

•  Lustre
•  Hadoop
•  FastDFS
•  Ceph
•  GlusterFS

1.3 什么是ceph

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

1.4 ceph组件

•  OSDs   [有几个OSD就有几个ceph-osd进程 ]
–  存储设备
•  Monitors  [存储集群的入口]
–  集群监控组件
•  MDSs
–  存放文件系统的元数据(对象存储和块存储不需要该组件)
•  Client
–  ceph客户端  [需要拷贝服务端存储的配置文件,和验证文件]

二、ceph实验环境准备

2.1 实验拓扑图

•  1台客户端虚拟机
•  3台存储集群虚拟机

2.2 配置YUM

2.1.1  物理机创建网络yum源服务器

[root@root9pc01    ~]#    yum    -y    install    vsftpd    
[root@root9pc01    ~]#    mkdir        /var/vsftp/ceph    
[root@root9pc01    ~]#    mount    -o    loop    \    
rhcs2.0-rhosp9-20161113-x86_64.iso        /var/vsftp/ceph    
[root@root9pc01    ~]#    systemctl        restart        vsfpd

2.1.2 虚拟机调用YUM源(下面以node1为例)

[root@node1    ~]#    cat    /etc/yum.repos.d/ceph.repo    
[mon]    
name=mon    
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON    
gpgcheck=0    
[osd]    
name=osd    
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD    
gpgcheck=0    
[tools]    
name=tools    
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools    
gpgcheck=0    

2.3 配置SSH无密钥连接

2.3.1 修改主机名

[root@node1    ~]#    cat    /etc/hosts    
...    ...    
192.168.4.10                                client    
192.168.4.11
    node1    
192.168.4.12
    node2    
192.168.4.13
    node3    
[root@node1    ~]#    for    i    in    10        11        12        13    
>    do    
>    scp        /etc/hosts        192.168.2.$i:/etc/    
>    done

2.3.2 非交互生成密钥对

[root@node1    ~]#    ssh-keygen     -f    /root/.ssh/id_rsa      -N ''

2.3.3 发布密钥到各个主机(包括自己)

[root@node1    ~]#    for    i    in    10        11        12        13    
>    do    
>    ssh-copy-id        192.168.4.$i    
>    done

2.4 NTP时间同步

2.4.1 客户端创建NTP服务器

[root@client    ~]#  yum    -y    install    chrony    
[root@client    ~]#  cat    /etc/chrony.conf    
server 0.rhel.pool.ntp.org iburst
allow    192.168.4.0/24
local    stratum    10    
[root@client    ~]#    systemctl        restart        chronyd

2.4.2 其他所有主机与其同步时间(下面以node1为例)

[root@node1    ~]#        cat    /etc/chrony.conf    
server    192.168.4.10            iburst    
[root@node1    ~]#    systemctl        restart        chronyd

2.5 准备存储磁盘

2.5.1 在图形环境中为虚拟机添加磁盘

[root@root9pc01    ~]#    virt-manager  

三、部署Ceph集群

3.1 准备部署环境

3.1.1  安装部署软件

•  使用node1作为部署主机
[root@node1    ~]#        yum    -y    install    ceph-deploy    
•  ceph-deploy命令与子命令都支持--help查看帮助
[root@node1    ~]#        ceph-deploy        --help    

3.1.2  创建目录

•  为部署工具创建目录,存放密钥与配置文件
[root@node1    ~]#        mkdir    ceph-cluster    
[root@node1    ~]#        cd    ceph-cluster/

3.2 部署存储集群

3.2.1 创建ceph集群

•  创建ceph集群配置(所有节点都为mon)
[root@node1    ceph-cluster]#        ceph-deploy    new    node1    node2    node3    
•  给所有节点安装ceph软件包
[root@node1    ceph-cluster]#    ceph-deploy    install    node1    node2    node3    
•  初始化所有节点的mon服务(主机名解析必须对)
[root@node1    ceph-cluster]#    ceph-deploy    mon    create-initial    
//这里没有指定主机,是因为第一步创建的配置文件中已经有了,所以要求主机名解析必须对,否则连接不到对应的主机

3.2.2 创建OSD

1. 所有节点准备磁盘分区(下面以node1为例)
[root@node1    ~]#        parted        /dev/vdb        mklabel        gpt    
[root@node1    ~]#        parted        /dev/vdb        mkpart    primary        1M        50%    
[root@node1    ~]#        parted        /dev/vdb        mkpart    primary        50%        100%    
 //这两个分区用来做存储服务器的日志journal盘 

vim /etc/udev/rules.d/100-ceph.rules    //通过udev管理日志磁盘权限,采用这种方式可以在重启机器之后,集群状态正常
ACTION=="add", KERNEL=="vdb?",SUBSYSTEM=="block", OWNER="ceph",GROUP="ceph"   
[root@node2 rules.d]# systemctl restart systemd-udev-trigger.service

//通过命令行修改日志磁盘,这种方式临时修改的,重启机器集群状态不正常.[]
[root@node1    ~]#    chown        ceph.ceph        /dev/vdb1    
[root@node1    ~]#    chown        ceph.ceph        /dev/vdb2  

2. 初始化清空磁盘数据(仅node1操作即可)
[root@node1    ~]#    ceph-deploy    disk        zap        node1:vdc            node1:vdd                
[root@node1    ~]#    ceph-deploy    disk        zap        node2:vdc            node2:vdd
[root@node1    ~]#    ceph-deploy    disk        zap        node3:vdc            node3:vdd                    
3. 创建OSD存储空间(仅node1操作即可)
[root@node1    ~]#    ceph-deploy    osd    create    node1:vdc:/dev/vdb1    node1:vdd:/
dev/vdb2            
//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL
日志,一个存储设备对应一个日志设备,日志需要SSD,不需要很大
[root@node1    ~]#    ceph-deploy    osd    create    node2:vdc:/dev/vdb1    node2:vdd:/
dev/vdb2    
[root@node1    ~]#    ceph-deploy    osd    create    node3:vdc:/dev/vdb1    node3:vdd:/
dev/vdb2    

3.3 验证

3.3.1 查看集群状态

[root@node1    ~]#        ceph        -s    

3.3.2 可能出现的错误

–  osd create创建OSD存储空间,如提示run
'gatherkeys’
[root@node1    ~]#        ceph-deploy    gatherkeys    node1    node2    node3        
–  ceph -s查看状态,如果失败
[root@node1    ~]#        systemctl    restart    ceph\*.service    ceph\*.target    
//在所有节点,或仅在失败的节点重启服务

-- 时间同步失败

~] #  vim  /etc/ceph/ceph.conf

vim /etc/ceph/ceph.conf
mon clock drift allowed = 2
mon clock drift warn backoff = 30

cp /etc/ceph/ceph.conf /root/ceph-cluster
cd /root/ceph-cluster
ceph-deploy --overwrite-conf admin node2 node3    //同步配置文件

在所有monitor主机上重启ceph-mon@\*服务

systemctl restart ceph-mon@node1                         
systemctl restart ceph-mon@node2
systemctl restart ceph-mon@node3

四、Ceph块存储

4.1 概述

4.1.1 什么是块存储

什么是块存储
•  单机块设备
–  光盘
–  磁盘
•  分布式块存储
–  Ceph
–  Cinder

•  Ceph块设备也叫做RADOS块设备
–  RADOS block device:RBD
•  RBD驱动已经很好的集成在了Linux内核中
•  RBD提供了企业功能,如快照、COW克隆等等
•  RBD还支持内存缓存,从而能够大大提高性能

•  Linux内核可用直接访问Ceph块存储
•  KVM可用借助于librbd访问

4.2 块存储集群

4.2.1 创建镜像

•  查看存储池(默认有一个rbd池)
[root@node1    ~]#    ceph    osd    lspools    
0    rbd,    
•  创建镜像、查看镜像
[root@node1    ~]#    rbd    create    demo-image    --image-feature        layering    --size    10G    
[root@node1    ~]#    rbd    create    rbd/image    --image-feature        layering    --size    10G    
[root@node1    ~]#    rbd    list    
[root@node1    ~]#    rbd    info    demo-image    
rbd    image    'demo-image':    
    size    10240    MB    in    2560    objects    
    order    22    (4096    kB    objects)    
    block_name_prefix:    rbd_data.d3aa2ae8944a    
    format:    2    
    features:    layering    

4.2.2 动态调整大小

•  缩小容量
[root@node1    ~]#    rbd    resize    --size    7G    image    --allow-shrink    
[root@node1    ~]#    rbd    info    image    
•  扩容容量
[root@node1    ~]#    rbd    resize    --size    15G    image    
[root@node1    ~]#    rbd    info    image    

4.2.3 集群内通过KRBD访问

•  将镜像映射为本地磁盘
[root@node1    ~]#    rbd    map    demo-image    
/dev/rbd0    
[root@node1    ~]#    lsblk    
...    ...    
rbd0                                        251:0                0            10G        0    disk    
•  接下来,格式化了!
[root@node1    ~]#    mkfs.xfs    /dev/rbd0    
[root@node1    ~]#    mount        /dev/rbd0        /mnt

4.2.4 客户端通过KRBD访问

•  客户端需要安装ceph-common软件包
•  拷贝配置文件(否则不知道集群在哪)
•  拷贝连接密钥(否则无连接权限)
[root@client    ~]#    yum    -y        install    ceph-common    
[root@client    ~]#    scp    192.168.4.11:/etc/ceph/ceph.conf        /etc/ceph/    
[root@client    ~]#    scp    192.168.4.11:/etc/ceph/ceph.client.admin.keyring    \    
/etc/ceph/    
•  映射镜像到本地磁盘
[root@client    ~]#    rbd    map    image    
[root@client    ~]#        lsblk    
[root@client    ~]#    rbd    showmapped    
id    pool    image    snap    device                    
0        rbd        image    -                /dev/rbd0    

•  客户端格式化、挂载分区
[root@client    ~]#    mkfs.xfs    /dev/rbd0    
[root@client    ~]#    mount    /dev/rbd0    /mnt/    
[root@client    ~]#    echo    "test"    >    /mnt/test.txt    

4.2.5 创建镜像快照

•  查看镜像快照
[root@node1    ~]#    rbd    snap    ls    image    
•  创建镜像快照
[root@node1    ~]#    rbd    snap    create    image    --snap    image-snap1    
[root@node1    ~]#    rbd    snap    ls    image    
SNAPID    NAME                   SIZE        
        4    image-snap1    15360    MB    
•  注意:快照使用COW技术,对大数据快照速度会很快!

4.2.6 使用快照恢复数据

•  删除客户端写入的测试文件
[root@client    ~]#    rm        -rf            /mnt/test.txt    
•  还原快照
[root@node1    ~]#    rbd    snap    rollback    image    --snap    image-snap1    
•  客户端重新挂载分区
[root@client    ~]#    umount        /mnt    
[root@client    ~]#    mount    /dev/rbd0    /mnt/    
[root@client    ~]#    ls        /mnt    

4.2.7 快照克隆

•  如果想从快照恢复出来一个新的镜像,则可以使用克隆
•  注意,克隆前,需要对快照进行<保护>操作
•  被保护的快照无法删除,取消保护(unprotect)
[root@node1    ~]#        rbd    snap    protect    image    --snap    image-snap1    
[root@node1    ~]#        rbd    snap    rm    image    --snap    image-snap1                //会失败
[root@node1    ~]#    rbd clone \
image --snap image-snap1 image-clone --image-feature layering
//使用image的快照image-snap1克隆一个新的image-clone镜像

•  查看克隆镜像与父镜像快照的关系
[root@node1    ~]#        rbd    info    image-clone    
rbd    image    'image-clone':    
    size    15360    MB    in    3840    objects    
    order    22    (4096    kB    objects)    
    block_name_prefix:    rbd_data.d3f53d1b58ba    
    format:    2    
    features:    layering    
    flags:        
    parent:    rbd/image@image-snap1    

•  克隆镜像很多数据都来自于快照链
•  如果希望克隆镜像可以独立工作,就需要将父快照中
的数据,全部拷贝一份,但比较耗时!!!
[root@node1    ~]#        rbd    flamen    image-clone    
[root@node1    ~]#        rbd    info    image-clone    
rbd    image    'image-clone':    
    size    15360    MB    in    3840    objects    
    order    22    (4096    kB    objects)    
    block_name_prefix:    rbd_data.d3f53d1b58ba    
    format:    2    
    features:    layering    
    flags:        
//注意,父快照信息没了!

4.2.8 客户端撤销磁盘映射

•  umount挂载点
[root@client    ~]#    umount    /mnt    
•  取消RBD磁盘映射
[root@client    ~]#    rbd    showmapped    
id    pool    image                                snap    device                    
0        rbd        image                                -                /dev/rbd0    
//语法格式:
[root@client    ~]#    rbd    unmap    /dev/rbd/{poolname}/{imagename}    
[root@client    ~]#    rbd    unmap    /dev/rbd/rbd/image    

4.2.9 删除快照与镜像

•  删除快照(确保快照未被保护)
[root@node1    ~]#    rbd    snap    rm    image    --snap    image-snap    

•  删除镜像
[root@node1    ~]#    rbd        list    
[root@node1    ~]#    rbd        rm        image    

losetup -a   //查看镜像所在目录

virsh  secret-list         //查看生成的secret

virsh secret-undefine   uuid

ntpdate IP   手动同步时间

ceph auth list   查看认证的key

[root@node1 ceph]# ceph auth list

[root@node1 ceph-cluster]# cat /root/ceph-cluster/ceph.bootstrap-mds.keyring       //这里面的key值要和ceph auth list查看到的值是一样的,如果不一样,需要手动将ceph.bootstrap-mds.keyring的值改成和ceph auth list查看到的值一致。

在部署节点上     /var/lib/ceph/bootstrap-rgw目录下的ceph.keyring里面的key要和管理节点上查看到的key值一样

猜你喜欢

转载自blog.csdn.net/qq_36441027/article/details/81536603
今日推荐