• Ceph常用命令



    目录

    【1、环境准备】

    【2、部署管理】

    【3、集群扩容】

    【4、用户管理】

    【5、密钥环管理】

    【6、块设备管理】

    【7、快照管理】

    【8、参考链接】


    简要说明:

             最近心血来潮,对分布式存储感兴趣,听说Ceph不错,查看Ceph中文官方文档,发现讲解得非常详细,为了以后方便查找相关命令,决定整理一下Ceph的常用命令,以下所有内容来源于官方文档。只为方便自己查找、学习,未经验证。


    【1、环境准备】

    #1.1 ceph-deploy 管理节点]

    #把 Ceph 仓库添加到 ceph-deploy 管理节点,然后安装 ceph-deploy 。

    #1、添加 release key :

    wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -

    #2、添加Ceph软件包源,(Ceph稳定版 10.2 jewel, 12.2 luminous)

    #echo deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

    echo deb http://download.ceph.com/debian-jewel/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

    #3、更新仓库并安装 ceph-deploy :

    sudo apt-get update && sudo apt-get install ceph-deploy

    #*创建部署用户(已有)

    #ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。建议在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 “ceph” 这个名字。全集群统一的用户名可简化操作。

    #允许无密码ssh登录

    #因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。生成 SSH 密钥对,但不要用 sudo 或 root 用户。提示 “Enter passphrase” 时,直接回车,口令即为空:

    #在管理节点上生成秘钥对

    ssh-keygen

    #把公钥拷贝到各 Ceph 节点

    ssh-copy-id {username}@node1

    ssh-copy-id {username}@node2

    ssh-copy-id {username}@node3

    #修改 ceph-deploy 管理节点上的 ~/.ssh/config 文件,这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点,简化了 ssh 和 scp 的用法

    Host node1

       Hostname node1

       User {username}

    Host node2

       Hostname node2

       User {username}

    Host node3

       Hostname node3

       User {username}


    #1.2 ceph所有节点和管理节点安装]

    #管理节点必须能够通过 SSH 无密码地访问各 Ceph 节点,部署的用户必须有无密码使用 sudo 的权限

    #ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。建议在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 “ceph” 这个名字。全集群统一的用户名可简化操作。

    #安装NTP(所有节点)

    sudo apt-get install ntp

    #访问:<http://www.pool.ntp.org/zone/cn>,获取中国区公用时间同步服务器。如:

    server 0.cn.pool.ntp.org

    server 1.asia.pool.ntp.org

    server 2.asia.pool.ntp.org

    #将这三个服务器添加到/etc/ntp.conf,删除文件中原有的:

    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

    #再执行下面的命令手工从服务器同步并启动ntp服务:

    sudo ntpdate 0.cn.pool.ntp.org

    sudo hwclock -w

    sudo systemctl enable ntpd.service

    sudo systemctl start ntpd.service

    #安装SSH Server(所有节点)

    sudo apt-get install openssh-server

    #防火墙规则

    #Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。测试时可关闭防火墙。


    【2、部署管理】

    #创建目录,用于保存 ceph-deploy 生成的配置文件和密钥对。ceph-deploy 会把文件输出到当前目录,确保在此目录下执行 ceph-deploy 。如果是用普通用户登录的,不要用 sudo 运行 ceph-deploy ,因为它不会在远程主机上调用所需的 sudo 命令。

    mkdir my-cluster

    cd my-cluster


    #2.1清除环境、回到初始状态

    #如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置:

    #ceph-deploy purgedata {ceph-node} [{ceph-node}]

    #ceph-deploy forgetkeys

    ceph-deploy purgedata node1 node2 node3

    ceph-deploy forgetkeys

    #用下列命令可以连 Ceph 安装包一起清除

    #如果执行了 purge ,你必须重新安装 Ceph 。

    #ceph-deploy purge {ceph-node} [{ceph-node}]

    ceph-deploy purge node1 node2 node3


    #2.2创建集群

    #在管理节点上,进入刚创建的放置配置文件的目录,用 ceph-deploy 执行如下步骤。

    #初始化安装moniter所在节点node1

    #ceph-deploy new {initial-monitor-node(s)}

    ceph-deploy new node1

    #把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。把下面这行加入 [global] 段:osd pool default size = 2

    sudo vi /etc/ceph/ceph.conf

    #安装 Ceph 其他节点。

    #ceph-deploy install {ceph-node} [{ceph-node} ...]

    ceph-deploy install admin-node node1 node2 node3

    #配置初始 monitor(s)、并收集所有密钥:

    ceph-deploy mon create-initial

    #完成上述操作后,当前目录里应该会出现这些密钥环:

    #{cluster-name}.client.admin.keyring

    #{cluster-name}.bootstrap-osd.keyring

    #{cluster-name}.bootstrap-mds.keyring

    #{cluster-name}.bootstrap-rgw.keyring

    #添加两个OSD

    #为了快速地安装,快速入门中把目录而非整个硬盘用于 OSD 守护进程。

    ssh node2

    sudo mkdir /var/local/osd2

    exit

    ssh node3

    sudo mkdir /var/local/osd3

    exit

    #再从管理节点执行 ceph-deploy 来准备 OSD

    #ceph-deploy osd prepare {ceph-node}:/path/to/directory

    ceph-deploy osd prepare node2:/var/local/osd2 node3:/var/local/osd3

    #最后激活 OSD

    #ceph-deploy osd activate {ceph-node}:/path/to/directory

    ceph-deploy osd activate node2:/var/local/osd2 node3:/var/local/osd3

    #用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,

    #这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。

    #ceph-deploy admin {admin-node} {ceph-node}

    ceph-deploy admin admin-node node1 node2 node3

    #确保你对 ceph.client.admin.keyring 有正确的操作权限

    sudo chmod +r /etc/ceph/ceph.client.admin.keyring

    #检查集群的健康状况。

    ceph health


    【3、集群扩容】

    #一个基本的集群启动并开始运行后,下一步就是扩展集群。在 node1 上添加一个 OSD 守护进程和一个元数据服务器。然后分别在 node2 和 node3 上添加 Ceph Monitor ,以形成 Monitors 的法定人数。


    #3.1添加 OSD

    #你运行的这个三节点集群只是用于演示的,把 OSD 添加到 monitor 节点就行。

    #在node1上添加OSD目录

    ssh node1

    sudo mkdir /var/local/osd1

    exit

    #然后,从 ceph-deploy 节点准备 OSD

    #ceph-deploy osd prepare {ceph-node}:/path/to/directory

    ceph-deploy osd prepare node1:/var/local/osd1

    #最后,激活 OSD

    #ceph-deploy osd activate {ceph-node}:/path/to/directory

    ceph-deploy osd activate node1:/var/local/osd1

    #一旦你新加了OSD,Ceph 集群就开始重均衡,把归置组迁移到新 OSD 。

    #可以用下面的 ceph 命令观察此过程:

    ceph -w

    #你应该能看到归置组状态从 active + clean 变为 active ,还有一些降级的对象;

    #迁移完成后又会回到 active + clean 状态( Control-C 退出)。


    #3.2添加元数据服务器

    #至少需要一个元数据服务器才能使用 CephFS ,

    #执行下列命令创建元数据服务器:

    #ceph-deploy mds create {ceph-node}

    ceph-deploy mds create node1

    #Note 当前生产环境下的 Ceph 只能运行一个元数据服务器。

    #你可以配置多个,但现在还不会为多个元数据服务器的集群提供商业支持。


    #3.3添加 RGW 例程

    #要使用 Ceph 的 Ceph 对象网关组件,必须部署 RGW 例程。

    #用下列方法创建新 RGW 例程:

    #ceph-deploy rgw create {gateway-node}

    ceph-deploy rgw create node1

    #Note 这个功能是从 Hammer 版和 ceph-deploy v1.5.23 才开始有的。

    #RGW 例程默认会监听 7480 端口,可以更改该节点 ceph.conf 内与 RGW 相关的配置,如下:

    [client]

    rgw frontends = civetweb port=80


    #3.4添加 MONITORS

    #Ceph 存储集群需要至少一个 Monitor 才能运行。

    #为达到高可用,典型的 Ceph 存储集群会运行多个 Monitors,

    #这样在单个 Monitor 失败时不会影响 Ceph 存储集群的可用性。

    #Ceph 使用 PASOX 算法,此算法要求有多半 monitors,即 1 、3、5形成法定人数。

    #新增两个监视器到 Ceph 集群。

    #ceph-deploy mon add {ceph-node}

    ceph-deploy mon add node2 node3

    #新增 Monitor 后,Ceph 会自动开始同步并形成法定人数。

    #你可以用下面的命令检查法定人数状态:

    ceph quorum_status --format json-pretty

    #Tip 当你的 Ceph 集群运行着多个 monitor 时,

    #各 monitor 主机上都应该配置 NTP ,

    #而且要确保这些 monitor 位于 NTP 服务的同一级。


    #3.5存入/检出对象数据

    #要把对象存入 Ceph 存储集群,客户端必须做到:

    #指定对象名

    #指定存储池

    #Ceph 客户端检出最新集群运行图,用 CRUSH 算法计算出如何把对象映射到归置组,

    #然后动态地计算如何把归置组分配到 OSD 。

    #要定位对象,只需要对象名和存储池名字即可,例如:

    #ceph osd map {poolname} {object-name}


    #练习:定位某个对象。我们先创建一个对象,

    #用 rados put 命令加上对象名、一个有数据的测试文件路径、并指定存储池。例如:

    echo {Test-data} > testfile.txt

    #rados put {object-name} {file-path} --pool=data

    rados put test-object-1 testfile.txt --pool=data

    #为确认 Ceph 存储集群存储了此对象,可执行:

    rados -p data ls

    #现在,定位对象:

    #ceph osd map {pool-name} {object-name}

    ceph osd map data test-object-1

    #Ceph 应该会输出对象的位置,例如:

    #osdmap e537 pool 'data' (0) object 'test-object-1' -> pg 0.d1743484 (0.4) -> up [1,0] acting [1,0]

    #用``rados rm`` 命令可删除此测试对象,例如:

    rados rm test-object-1 --pool=data

    #随着集群的运行,对象位置可能会动态改变。

    #Ceph 有动态均衡机制,无需手动干预即可完成。


    【4、用户管理】

    #使用默认密钥环文件查看ceph集群健康状况

    ceph health

    #使用指定密钥环文件查看ceph集群健康状况

    ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health

    #列出ceph 集群中所有用户信息

    ceph auth list  

    #单独获取client.admin用户信息

    #ceph auth get {TYPE.ID}

    ceph auth get client.admin

    #获取用户的auid 和key,以及授权信息Caps(能力)

    #ceph auth export {TYPE.ID}

    ceph auth export client.admin  

    #增加用户client.john并授权

    #ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'

    #如果没有用户就创建并授权,如果有用户列出授权信息

    ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'

    ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring

    #如果没有用户key就创建并授权,如果有用户key,则该用户的列出授权信息,输出到指定文件

    ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key

    #增加用户client.john并授权

    ceph auth add client.john mon 'allow *' osd 'allow * '

    #修改用户client.john的授权

    ceph auth caps client.john mds 'allow ' mon 'allow *' osd 'allow * '

    #删除用户

    #ceph auth del {TYPE}.{ID}

    ceph auth del client.john

    #查看用户秘钥

    #ceph auth print-key {TYPE}.{ID}

    ceph auth print-key client.john

    #使用用户和秘钥挂载卷

    mount -t ceph cephserverhost:/mountpoint -o name=client.user,secret=`ceph auth print-key client.user`

    #从文件导入用户及秘钥信息,备份恢复?会更新已有的用户、秘钥、权限

    sudo ceph auth import -i /etc/ceph/ceph.keyring


    【5、密钥环的管理 ceph-authtool】

    #创建密钥环

    #sudo ceph-authtool --create-keyring /path/to/keyring

    sudo ceph-authtool -C /etc/ceph/ceph.keyring

    #把用户加入密钥环文件

    #获取用户client.admin的密钥、能力,并存入到ceph.client.admin.keyring文件中。

    sudo ceph auth get client.admin -o /etc/ceph/ceph.client.admin.keyring

    #再从密钥环文件ceph.client.admin.keyring中导入信息到ceph.keyring中。

    sudo ceph-authtool /etc/ceph/ceph.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

    #创建用户

    sudo ceph-authtool -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.keyring

    sudo ceph-authtool -C /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx' --gen-key

    sudo ceph auth add client.ringo -i /etc/ceph/ceph.keyring

    #修改用户属性

    sudo ceph-authtool /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx'

    sudo ceph auth import -i /etc/ceph/ceph.keyring


    【6、块设备管理】

    #创建块设备映像

    #rbd create --size {megabytes} {pool-name}/{image-name}

    #在swimmingpool存储池中,创建一个1GB大小的名为bar的块映像

    rbd create --size 1024 swimmingpool/bar

    #如果不指定pool的名字,会将映像创建到默认的存储池rbd中

    rbd create --size 1024 bar

    #列出默认存储池中的映像

    rbd ls

    #列出指定存储池中的映像

    #rbd ls {poolname}

    rbd ls swimmingpool

    #查看映像bar的信息

    rbd info bar

    #查看指定存储池中的映像的信息

    #rbd info {pool-name}/{image-name}

    rbd info swimmingpool/bar

    #调整块设备映像的大小

    rbd resize --size 2048 foo (to increase)

    rbd resize --size 2048 foo --allow-shrink (to decrease)允许收缩

    #删除块设备映像

    #rbd rm {image-name}

    rbd rm bar

    #删除指定存储池的中的映像

    #rbd rm {pool-name}/{image-name}

    rbd rm swimmingpool/bar

    #获取映像列表

    rbd list

    #映射块设备

    #sudo rbd map {pool-name}/{image-name} --id {user-name}

    sudo rbd map rbd/myimage --id admin

    #如果你启用了 cephx 认证,还必须提供密钥,可以用密钥环或密钥文件指定密钥。

    #sudo rbd map rbd/myimage --id admin --keyring /path/to/keyring

    #sudo rbd map rbd/myimage --id admin --keyfile /path/to/file

    #查看已映射的块设备

    rbd showmapped

    #取消块设备映射

    #sudo rbd unmap /dev/rbd/{poolname}/{imagename}

    sudo rbd unmap /dev/rbd/rbd/foo

    #怎么使用id?怎么使用name?

    rbd --id admin --keyring=/etc/ceph/ceph.keyring [commands]

    rbd --name client.admin --keyring=/etc/ceph/ceph.keyring [commands]


    【7、快照管理】

    #创建快照

    #rbd snap create {pool-name}/{image-name}@{snap-name}

    rbd snap create rbd/foo@snapname

    #列出快照(需要指定名称)

    #rbd snap ls {pool-name}/{image-name}

    rbd snap ls rbd/foo

    #回滚快照

    #rbd snap rollback {pool-name}/{image-name}@{snap-name}

    rbd snap rollback rbd/foo@snapname

    #删除某一个快照

    #Ceph OSDs 异步地删除数据,所以删除快照后不会立即释放磁盘空间。

    #rbd snap rm {pool-name}/{image-name}@{snap-name}

    rbd snap rm rbd/foo@snapname

    #删除某一个映像的所有快照

    #rbd snap purge {pool-name}/{image-name}

    rbd snap purge rbd/foo

    #保护父快照,防止误删除导致所有快照无法使用

    #bd snap protect {pool-name}/{image-name}@{snapshot-name}

    rbd snap protect rbd/myimage@my-snapshot

    #克隆快照

    #rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}#

    rbd clone rbd/my-image@my-snapshot rbd/new-image

    #取消快照保护

    #rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}

    rbd snap unprotect rbd/my-image@my-snapshot

    #列出快照的子孙

    #rbd children {pool-name}/{image-name}@{snapshot-name}

    rbd children rbd/my-image@my-snapshot

    #拍平克隆映像

    #rbd flatten {pool-name}/{image-name}

    rbd flatten rbd/my-image


    【8、参考链接】

    Ceph英文文档(最新12.2版本)

    http://docs.ceph.com/docs/master/

    Ceph中文文档(10.0版)

    http://docs.ceph.org.cn/start/intro/

    Ceph分布式存储集群在CentOS 7.1上手动安装部署指南

    http://bbs.ceph.org.cn/question/138

  • 相关阅读:
    数论
    2019牛客暑期多校训练营(第七场)
    C++大数模板
    网络流
    2019 Multi-University Training Contest 6
    无聊的数列
    Can you answer on these queries III
    Interval GCD
    2733:判断闰年-poj
    题目1083:特殊乘法-九度oj
  • 原文地址:https://www.cnblogs.com/rancher-maomao/p/9240632.html
Copyright © 2020-2023  润新知