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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章