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

上一篇:Ubuntu 64位系统安装StarUML之最佳实践


下一篇:LeetCode 748 Shortest Completing Word 解题报告