1. 程式人生 > >架構設計:系統儲存(29)——分散式檔案系統Ceph(管理)

架構設計:系統儲存(29)——分散式檔案系統Ceph(管理)

3-3. Ceph常用命令

Ceph檔案系統提供的運維命令主要是按照Ceph中的工作角色/工作職責進行劃分的,例如有一套專門對OSD節點進行管理的命令、有一套專門對PG進行管理的命令、有一套專門對MDS角色進行管理的命令……您可以使用ceph –help進行命令列表的檢視,本文我們對常用的命令進行描述,這些命令只是Ceph檔案系統中的一部分命令,目的是保證在Ceph執行到生產環境後,您有能力定位常見問題,保證Ceph能夠正常工作。

這裡說明一下,ceph-deploy中的命令主要進行Ceph中各角色的安裝、刪除。所以對Ceph檔案系統的日常維護還是不建議使用ceph-deploy中的命令,而建議儘可能使用Ceph檔案系統的原生命令。

而ceph-deploy中的命令只建議在增加、刪除節點/角色時使用。另外請注意,以下提到的新增、刪除各種Ceph中角色的命令,也不建議在Ceph檔案系統有大量I/O操作時進行,畢竟保證線上系統穩定,才是運維工作的重中之重。您可以選擇Ceph系統相對空閒的時間進行這些操作,例如凌晨就是一個很好時間選擇(加班狗賜予你力量)。

3-3-1. 叢集管理相關命令

Ceph檔案系統一旦通過ceph-deploy安裝成功,在每一個成功安裝的節點上Ceph都會作為Linux作業系統的服務被註冊,所以要啟動Ceph檔案系統無非就是啟動每個節點上的ceph服務。另外Ceph節點上執行的各種角色,除了MON角色預設會使用6789埠外,其它角色也會使用大量的網路埠,請保證這些網路埠沒有被防火牆遮蔽。以下是某個Ceph節點上執行的各種角色所使用的網路埠示例(您和示例中的情況不一定完全一致):

......
tcp        0      0 0.0.0.0:6807            0.0.0.0:*               LISTEN      9135/ceph-osd       
tcp        0      0 0.0.0.0:6808            0.0.0.0:*               LISTEN      9135/ceph-osd       
tcp        0      0 0.0.0.0:6809            0.0.0.0:*               LISTEN      9135/ceph-osd       
tcp        0      0 0.0.0.0:6810
0.0.0.0:* LISTEN 9135/ceph-osd tcp 0 0 0.0.0.0:6811 0.0.0.0:* LISTEN 9281/ceph-mds tcp 0 0 172.16.71.187:6789 0.0.0.0:* LISTEN 8724/ceph-mon tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 8887/ceph-osd tcp 0 0 0.0.0.0:6804 0.0.0.0:* LISTEN 8887/ceph-osd tcp 0 0 0.0.0.0:6805 0.0.0.0:* LISTEN 8887/ceph-osd tcp 0 0 0.0.0.0:6806 0.0.0.0:* LISTEN 8887/ceph-osd ......
  • 啟動MON、MDS、OSD

你可以通過以下命令啟動當前節點下的Ceph角色(前提是您在這個節點下安裝/配置了相應角色)

// 啟動mon角色
[[email protected] ~]# service ceph start  mon.vmnode1
// 啟動msd角色
[[email protected] ~]# service ceph start mds.vmnode1
// 啟動osd角色
[[email protected] ~]# service ceph start osd.0

注意啟動節點上的OSD角色時,字尾攜帶的並不是節點的名字,而是一個數字編號,例如以上示例中攜帶的數字編號就是“0”。這是因為一個作業系統節點可以攜帶若干個OSD角色,每個Ceph檔案系統的OSD角色都有一個唯一的編號資訊(編號數字從0開始),這個資訊存放於OSD角色掛載的磁碟分割槽的根目錄中,檔名為“whoami”。

例如osd.4角色掛載的分割槽根目錄為 /usr/cephdata2,觀察這個目錄下的“whoami”檔案,顯示資訊如下:

[root@vmnode2 ~]# cat /usr/cephdata2/whoami 
4
  • 停止MDS、MON、OSD

有啟動當然就有停止,您可以通過以下命令停止某個節點上OSD角色、MDS角色或者MON角色的執行,或者乾脆停止這個節點上所有正在執行的Ceph檔案系統的角色:

// 停止mon角色
[[email protected] ~]# service ceph stop  mon.vmnode1
// 停止msd角色
[[email protected] ~]# service ceph stop mds.vmnode1
// 停止osd角色
[[email protected] ~]# service ceph stop osd.0
// 或者乾脆全部停止
[[email protected] ~]# service ceph stop
  • 檢視叢集狀態

涉及到這個功能的多個命令已經進行過說明,這裡再次對這個命令列出,不再贅述這幾個命令的具體不同:

// ceph叢集狀態概要
[[email protected] ~]# ceph -s 
// ceph叢集事件變化實時監控
[[email protected] ~]# ceph -w
  • 檢視叢集空間使用情況

以下命令可以檢視Ceph檔案系統的空間使用情況:

[root@vmnode1 ~]# ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED 
    XXXXX     XXXXX         XXXXX          XXXXX 
POOLS:
    NAME                ID        USED      %USED      MAX AVAIL      OBJECTS 
    rbd                 0         XXX        XX            XXX           XXX
    cephfs_data         1         XXX        XX            XXX           XXX 
    cephfs_metadata     2         XXX        XX            XXX           XXX

Ceph檔案系統的構成單元是OSD Pool,建立一個檔案系統需要兩個OSD Pool,一個用於儲存真實的資料(data pool),另一個用於儲存元資料(metadata pool),那麼很明顯Ceph檔案系統就支援多個OSD Pool存在。另外,每個OSD Pool都基於 OSD PG儲存資料,OSD PG的工作方式會在後文進行說明。這就是為什麼使用以上命令,看到的會是Ceph檔案系統中已有的OSD Pool列表,以及每個OSD Pool的空間使用情況。

另外您還可以使用以下命令,檢視Ceph檔案系統繫結OSD Pool的情況:

[root@vmnode1 ~]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

以上命令反饋中,可以看到檔案系統的名字為cephfs,用於記錄檔案系統元資料的OSD Pool名叫cephfs_metadata,用於記錄檔案系統真實資料的OSD Pool名叫 cephfs_data。

  • 清除整個Ceph叢集

這組命令也是在之前的文章中介紹過的,這裡只列出命令示例:

// 清除已安裝ceph元件的節點,類似於執行yum remove ceph....
[[email protected] ~]# ceph-deploy purge vmnode1 vmnode2
// 命令格式為
ceph-deploy purge {ceph-node} [{ceph-node}] 
// 清楚節點上和ceph相關的資料、配置資訊
[[email protected] ~]# ceph-deploy purgedata vmnode1 vmnode2
// 命令格式為
ceph-deploy purgedata {ceph-node} [{ceph-node}] 

3-3-2. MON角色相關命令

  • 新增或刪除一個MON角色(使用ceph-deploy)
// 建立一個新的mon節點
[[email protected] ~]$ ceph-deploy mon create newnode
// 刪除一個mon角色
[[email protected] ~]$ ceph-deploy mon destroy vmnode3
// 命令格式為
ceph-deploy mon [-h] {add,create,create-initial,destroy} ...

create-initial引數的意義就不用多說了,初始化整個Ceph檔案系統的MON角色,在上一篇介紹Ceph檔案系統的安裝過程中,我們第一次初始化整個Ceph檔案系統的MON角色時,就是用的是create-initial引數。這裡請注意add引數和create引數的不同意義,如果將要加入Ceph檔案系統的MON節點還沒有MON服務角色的配置資訊,那麼使用create引數(多數情況下是這樣)。如果將要加入Ceph檔案系統的MON節點上已經有了MON角色的配置,只是沒有加入到Ceph系統中,則使用add引數。

  • 檢視MON角色狀態/選舉情況
// 檢視MON角色狀態
[ceph@vmnode1 ~]$ sudo ceph quorum_status --format json
e2: 2 mons at {vmnode1=172.16.71.186:6789/0,vmnode3=172.16.71.185:6789/0}, election epoch 186, quorum 0,1 vmnode3,vmnode1

// 檢視MON角色選舉狀態
[ceph@vmnode1 ~]$ sudo ceph quorum_status --format json
{
    "election_epoch": 186,
    "quorum": [
        0,
        1
    ],
    "quorum_names": [
        "vmnode3",
        "vmnode1"
    ],
    "quorum_leader_name": "vmnode3",
    "monmap": {
        "epoch": 2,
        "fsid": "f470130e-93c8-4280-8ad6-e5331207451f",
        "modified": "XXXXXXXXXXXXX",
        "created": "0.000000",
        "mons": [
            {
                "rank": 0,
                "name": "vmnode3",
                "addr": "172.16.71.185:6789\/0"
            },
            {
                "rank": 1,
                "name": "vmnode1",
                "addr": "172.16.71.186:6789\/0"
            }
        ]
    }
}

MON角色採用主備模式(leader/follower),也就是說即使系統中有多個MON角色,實際工作的也只有一個MON角色,其它MON角色都處於standby狀態。當Ceph系統中失去了Leader MON後,其它MON角色會基於PaxOS演算法,投票選出新的Leader MON。既然是這樣,那麼類似以上示例結果中顯示MON節點只有兩個的情況,就不再允許Leader MON角色退出了,因為一旦退出,投票決議始終都無法達到參與者的 N / 2 + 1的多數派,也就始終無法選出新的Leader MON(關於PaxOS演算法的詳細講解請參看我另外幾篇部落格文章《系統儲存(23)——資料一致性與Paxos演算法(上)》、《系統儲存(24)——資料一致性與Paxos演算法(中)》、《系統儲存(25)——資料一致性與Paxos演算法(下)》)。而要保證MON角色的持續可用性,就至少需要在Ceph檔案系統中,保持三個MON角色節點(這樣可以允許最多一個MON角色節點錯誤離線)。

理解了Leader MON的選舉方式,就可以理解以上示例中顯示的MON選舉狀態資訊了:quorum_names和quorum 是指代的投票參與者和投票參與者的編號、quorum_leader_name表示當前選舉出來的Leader MON,election_epoch代表目前一共經歷的投票輪次數量,epoch代表發起投票的次數(一次投票發起後,可能需要多輪投票才能選出新的Leader MON角色);而monmap中除了Ceph檔案系統的基本資訊外,還有一個rank屬性,代表了每個MON角色的權重,權重越小的MON角色,在投票選舉中越容易獲得多數派支援。最後MON角色中可不只是儲存了monmap資訊,我們在後文介紹Ceph工作過程時,還會詳細講解。

3-3-3. MDS角色相關命令

  • 新增一個MDS角色(使用ceph-deploy)

可以使用以下命令格式進行MDS的新增

[ceph@vmonde1 ~]# ceph-deploy mds create {hostname}
#例如:
[ceph@vmonde1 ~]# ceph-deploy mds create vmnode4
  • 檢視MDS角色狀態

請注意一個作業系統節點只能新增一個MDS角色,而不能像新增OSD節點那樣:只要有多餘的磁碟分割槽進行獨立掛載就可以在一個作業系統節點上新增多個OSD角色。另外Ceph檔案系統中的多個MDS角色也是採用主備模式工作,而主備狀態的決定、監控和切換完全由MON角色來控制。所以,如果您的Ceph檔案系統中有多個MDS角色,並且執行檢視MDS角色狀態的命令,就會看到類似以下的查詢結果:

[root@vmonde1 ~]# ceph mds stat
e48: 1/1/1 up {0=vmnode3=up:active}, 2 up:standby

從以上的執行結果來看,vmnode3節點上的MDS角色處於活動狀態,另外兩個節點上的MDS角色處於“待命”狀態,您還可以使用以下命令,檢視更詳細的mds角色的工作狀態。

[[email protected] ~]# ceph mds dump
......
epoch   48
flags   0
created 2017-04-XX XXXXXX
modified    2017-04-XX XXXXXXX
......
  • 刪除一個MDS角色

使用以下命令,可以刪除某個節點上的MDS角色

ceph mds rm gid(<int[0-]>) <name (type.id)>
#例如:
[root@vmnode1 ~]# ceph mds rm 0 mds.vmnode1

3-3-4. OSD角色相關命令

上文已經提到,可以通過以下命令在OSD掛載的根路徑檢視當前OSD角色的編號,如下所示:

[root@vmnode2 ~]# cat /usr/cephdata2/whoami 
4

說明這個掛載點對應的OSD角色編號為4,我們將在維護OSD角色的命令中會使用這個編號,例如在OSD角色的停止/刪除命令中。

  • 刪除一個OSD角色
// 以下命令停止一個OSD角色的執行,但是並不將其排除到Ceph檔案系統之外
[[email protected] ~]# ceph osd down 0
// 以下命令將指定的OSD角色移除Ceph檔案系統
[[email protected] ~]# ceph osd rm 0
// 以下命令可以將指定節點上所有的OSD角色全部移除
[[email protected] ~]# ceph osd crush rm vmnode1

以上命令中的引數“0”,代表OSD節點的的編號。另外需要注意,如果需要將指定的OSD角色從Ceph檔案系統中移除,那麼首先需要停止這個節點(執行之上的osd down命令,或者直接關閉OSD服務都行),否則Ceph檔案系統會報類似如下的錯誤:

[[email protected] ~]# ceph osd rm 0
Error EBUSY: osd.0 is still up; must be down before removal. 
  • 新增一個OSD角色(使用ceph-deploy)

使用ceph-deploy時,通過以下命令可以初始化一個OSD角色,並加入到Ceph檔案系統中

// 初始化一個OSD角色
[[email protected] ~]# ceph-deploy osd prepare vmnode4:/fs/osdroot
// 命令格式為
// ceph-deploy osd prepare {ceph-node}:{/path/to/directory}
// 啟動這個新的OSD角色
[[email protected] ~]# ceph-deploy osd activate vmnode4:/fs/osdroot
// 命令格式為
// ceph-deploy osd activate {ceph-node}:{/path/to/directory}

以上命令中,ceph-node是指節點名,後續的目錄是指這個新的OSD角色所掛載的磁碟分割槽的根目錄。在完成OSD角色初始化後,就會在OSD使用的目錄掛載點根部出現準備好的若干目錄和檔案資訊,例如本文之前提到的whoami檔案,就是這個時候產生的。除了ceph-deploy osd activate可以啟動一個這個新的OSD角色外,Ceph檔案系統自生也提供OSD角色初始化啟動的命令,如下所示:

[[email protected] ~]# ceph-disk -v activate --mark-init sysvinit --mount /fs/osdroot/
  • 檢視OSD角色狀態
// 以下命令可以檢視Ceph檔案系統中OSD角色的概要狀態資訊
[[email protected] ~]# ceph osd stat
     osdmap e127: 6 osds: 6 up, 6 in
// 如果想檢視更詳細的狀態資訊,可以使用以下命令
[[email protected] ~]# ceph osd dump
epoch 127
fsid f470130e-93c8-4280-8ad6-e5331207451f
created 2017-04-XX XXXXXXXX
modified 2017-04-XX XXXXXXXXXX
......
  • 檢視OSD角色位置結構

由於Ceph檔案系統中,允許一個作業系統節點下新增多個OSD角色,當Ceph檔案系統中的節點數量還不多時,技術人員還記得清楚OSD角色和節點的對應關係,但是當Ceph檔案系統中的節點數到了一定的數量級後,技術人員就不一定能全記住。Ceph檔案系統中提供給技術人員記錄這些OSD存在位置的命令:

[[email protected] ~]# ceph osd tree
ID WEIGHT TYPE NAME          UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1      0 root default                                         
-2      0     host vmnode1                                     
 0      0         osd.0           up  1.00000          1.00000 
 3      0         osd.3           up  1.00000          1.00000 
-3      0     host vmnode2                                     
 1      0         osd.1           up  1.00000          1.00000 
 4      0         osd.4           up  1.00000          1.00000 
-4      0     host vmnode3                                     
 2      0         osd.2           up  1.00000          1.00000 
 5      0         osd.5           up  1.00000          1.00000 
......
  • 更改OSD角色權重

以上命令中所列出的各個列都很好理解,其中有一列名叫REWEIGHT,是指的每個OSD角色的權重值。OSD角色的權重值將會對儲存資料的位置產生影響。通過以下命令,技術人員可以更改某個OSD角色的權重,命令如下(注意:以下命令中WEIGHT的值只能設定在0.0到1.0之間。):

[[email protected] ~]# ceph osd reweight 1 0.9
// 命令格式為
ceph osd reweight {OSD.ID} {WEIGHT}

====================================
(接下文)

相關推薦

架構設計系統儲存29——分散式檔案系統Ceph管理

3-3. Ceph常用命令 Ceph檔案系統提供的運維命令主要是按照Ceph中的工作角色/工作職責進行劃分的,例如有一套專門對OSD節點進行管理的命令、有一套專門對PG進行管理的命令、有一套專門對MDS角色進行管理的命令……您可以使用ceph –help進行命

資料儲存大資料儲存系統1--- 分散式檔案系統

分散式檔案系統一、分散式系統概念(1)分散式系統型別:Client/Server、P2P(Peer-to-Peer)、Master/Worker(2)故障模型(Failure Model):Fail stop:出現故障時,程序停止/崩潰Fail slow:出現故障時,執行速度

大資料儲存系統1--- 分散式檔案系統

分散式檔案系統 一、分散式系統概念 (1)分散式系統型別: Client/Server、P2P(Peer-to-Peer)、Master/Worker (2)故障模型(Failure Model): Fail stop:出現故障時,程序停止/崩潰 Fail slow:出現故

Hadoop 系列—— 分散式檔案系統 HDFS

一、介紹 HDFS (Hadoop Distributed File System)是 Hadoop 下的分散式檔案系統,具有高容錯、高吞吐量等特性,可以部署在低成本的硬體上。 二、HDFS 設計原理 2.1 HDFS 架構 HDFS 遵循主/從架構,由單個 NameNode(NN) 和多個 Data

《大規模分散式儲存系統》第四章 分散式檔案系統

GFS系統特點:對大檔案友好,支援追加寫。租約機制:Chunk之間通過租約機制選主,減少了Master的壓力。追加流程    資料流是複製連,控制流與資料流分開。資料流是複製連的優點是,減少延時、節省頻寬,尤其是在跨交換機的情境下。    資料流與控制流分開的優點是,GFS專

架構設計系統儲存18——Redis叢集方案高效能

1、概述 通過上一篇文章(《架構設計:系統儲存(17)——Redis叢集方案:高可用》)的內容,Redis主從複製的基本功能和進行Redis高可用叢集監控的Sentinel基本功能基本呈現給了讀者。雖然本人並不清楚上一篇根據筆者實際工作經驗所撰寫的文章有什麼重

架構設計系統存儲28——分布式文件系統Ceph掛載

all 兩個文件 原因 之前 來看 大數據 details 失敗 variable (接上文《架構設計:系統存儲(27)——分布式文件系統Ceph(安裝)》) 3. 連接到Ceph系統 3-1. 連接客戶端 完畢Ceph文件系統的創建過程後。就

架構設計系統間通訊36——Apache Camel快速入門

架構設計:系統間通訊(36)——Apache Camel快速入門(上) :http://blog.csdn.net/yinwenjie(未經允許嚴禁用於商業用途!) https://blog.csdn.net/yinwenjie/article/details/51692340 1、本專題主

Hadoop分散式檔案系統HDFS架構設計3

HDFS被設計成能夠在一個大叢集中跨機器可靠地儲存超大檔案。它將每個檔案儲存成一系列的資料塊,除了最後一個,所有的資料塊都是同樣大小的。為了容錯,檔案的所有資料塊都會有副本。每個檔案的資料塊大小和副本系數都是可配置的。應用程式可以指定某個檔案的副本數目。副本系數可以在檔案建立的時候指定,也可以在之後改變。

Hadoop分散式檔案系統HDFS架構設計

HDFS被設計成能夠在一個大叢集中跨機器可靠地儲存超大檔案。它將每個檔案儲存成一系列的資料塊,除了最後一個,所有的資料塊都是同樣大小的。為了容 錯,檔案的所有資料塊都會有副本。每個檔案的資料塊大小和副本系數都是可配置的。應用程式可以指定某個檔案的副本數目。副本系數可以在檔案建立的時候指 定,也可以在之後改

架構設計系統間通訊34——被神化的ESB

1、概述 從本篇文章開始,我們將花一到兩篇的篇幅介紹ESB(企業服務匯流排)技術的基本概念,為讀者們理清多個和ESB技術有關名詞。我們還將在其中為讀者闡述什麼情況下應該使用ESB技術。接下來,為了加深讀者對ESB技術的直觀理解,我們將利用Apache Came

架構設計系統間通訊16——服務治理與Dubbo 中篇預熱

1、前序 上篇文章中(《架構設計:系統間通訊(15)——服務治理與Dubbo 上篇》),我們以示例的方式講解了阿里DUBBO服務治理框架基本使用。從這節開始我們將對DUBBO的主要模組的設計原理進行講解,從而幫助讀者理解DUBBO是如何工作的。(由於這個章節的內容比較多,包括了知識準備、DUBBO框架概述

架構設計系統間通訊6——IO通訊模型和Netty 上篇

1、Netty介紹 在Netty官網上,對於Netty的介紹是: Netty is a NIO client server framework which enables quick and easy development of network ap

架構設計系統間通訊23——提高ActiveMQ工作效能

6、ActiveMQ處理規則和優化 在ActiveMQ單個服務節點的優化中,除了對ActiveMQ單個服務節點的網路IO模型進行優化外,生產者傳送訊息的策略和消費者處理訊息的策略也關乎整個訊息佇列系統是否能夠高效工作。請看下圖所示的訊息生產者和訊息消費

架構設計系統間通訊15——服務治理與Dubbo 上篇

1、上篇中“自定義服務治理框架”的問題 在之前的文章中(《架構設計:系統間通訊(13)——RPC例項Apache Thrift 下篇(1)》、《架構設計:系統間通訊(14)——RPC例項Apache Thrift 下篇(2)》),我們基於服務治理的基本原理,自

架構設計系統間通訊21——ActiveMQ的安裝與使用

1、前言 之前我們通過兩篇文章(架構設計:系統間通訊(19)——MQ:訊息協議(上)、架構設計:系統間通訊(20)——MQ:訊息協議(下))從理論層面上為大家介紹了訊息協議的基本定義,並花了較大篇幅向讀者介紹了三種典型的訊息協議:XMPP協議、Stomp協議和

架構設計系統間通訊10——RPC的基本概念

1、概述 經過了詳細的資訊格式、網路IO模型的講解,並且通過JAVA RMI的講解進行了預熱。從這篇文章開始我們將進入這個系列博文的另一個重點知識體系的講解:RPC。在後續的幾篇文章中,我們首先講解RPC的基本概念,一個具體的RPC實現會有哪些基本要素構成,然

架構設計系統間通訊40——自己動手設計ESB1

1、概述 在我開始構思這幾篇關於“自己動手設計ESB中介軟體”的文章時,曾有好幾次動過放棄的念頭。原因倒不是因為對冗長的文章產生了惰性,而是ESB中所涉及到的技術知識和需要突破的設計難點實在是比較多,再冗長的幾篇博文甚至無法對它們全部進行概述,另外如果在思路上

架構設計系統間通訊39——Apache Camel快速入門下2

4-2-1、LifecycleStrategy LifecycleStrategy介面按照字面的理解是一個關於Camel中元素生命週期的規則管理器,但實際上LifecycleStrategy介面的定義更確切的應該被描述成一個監聽器: 當Camel

架構設計系統間通訊24——提高ActiveMQ工作效能

7、ActiveMQ的持久訊息儲存方案 前文已經講過,當ActiveMQ接收到PERSISTENT Message訊息後就需要藉助持久化方案來完成PERSISTENT Message的儲存。這個介質可以是磁碟檔案系統、可以是ActiveMQ的內建資料庫