Ceph基礎知識


      不管你是想為雲平台提供Ceph 對象存儲和/或 Ceph 塊設備,還是想部署一個 Ceph 文件系統或者把 Ceph 作為他用,所有 Ceph 存儲集群的部署都始於部署一個個 Ceph 節點、網絡和 Ceph 存儲集群。 Ceph 存儲集群至少需要一個 Ceph Monitor 和兩個 OSD 守護進程。而運行 Ceph 文件系統客戶端時,則必須要有元數據服務器( Metadata Server )。

  • Ceph OSDs: Ceph OSD 守護進程( Ceph OSD )的功能是存儲數據,處理數據的復制、恢復、回填、再均衡,並通過檢查其他OSD 守護進程的心跳來向 Ceph Monitors 提供一些監控信息。當 Ceph 存儲集群設定為有2個副本時,至少需要2個 OSD 守護進程,集群才能達到 active+clean 狀態( Ceph 默認有3個副本,但你可以調整副本數)。
  • Monitors: Ceph Monitor維護着展示集群狀態的各種圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 保存着發生在Monitors 、 OSD 和 PG上的每一次狀態變更的歷史信息(稱為 epoch )。
  • MDSs: Ceph 元數據服務器( MDS )為 Ceph 文件系統存儲元數據(也就是說,Ceph 塊設備和 Ceph 對象存儲不使用MDS )。元數據服務器使得 POSIX 文件系統的用戶們,可以在不對 Ceph 存儲集群造成負擔的前提下,執行諸如 lsfind 等基本命令。

 

硬件推薦

Ceph 為普通硬件設計,這可使構建、維護 PB 級數據集群的費用相對低廉。規划集群硬件時,需要均衡幾方面的因素,包括區域失效和潛在的性能問題。硬件規划要包含把使用 Ceph 集群的 Ceph 守護進程和其他進程恰當分布。通常,我們推薦在一台機器上只運行一種類型的守護進程。我們推薦把使用數據集群的進程(如 OpenStack 、 CloudStack 等)安裝在別的機器上

 

Ceph 可以運行在廉價的普通硬件上,小型生產集群和開發集群可以在一般的硬件上。

image

 

推薦操作系統

 

下面的表格展示了 Ceph 需求和各種 Linux 發行版的對應關系。一般來說, Ceph 對內核和系統初始化階段的依賴很少(如 sysvinit 、 upstart 、 systemd )。

image 

安裝(快速)

步驟一:預檢

在部署 Ceph 存儲集群之前,需要對 Ceph 客戶端Ceph 節點進行一些基本的配置,你也可以加入 Ceph 社區以尋求幫助。

步驟二:存儲集群

完成預檢之后,你就可以開始部署 Ceph 存儲集群了。

步驟三: CEPH 客戶端

大多數 Ceph 用戶不會直接往 Ceph 存儲集群里存儲對象,他們通常會使用 Ceph 塊設備、 Ceph 文件系統、或 Ceph 對象存儲這三大功能中的一個或多個。

 

預檢

New in version 0.60.

謝謝您嘗試 Ceph !我們建議安裝一個 ceph-deploy 管理節點和一個三節點的Ceph 存儲集群來研究 Ceph 的基本特性。這篇預檢會幫你准備一個 ceph-deploy 管理節點、以及三個Ceph 節點(或虛擬機),以此構成 Ceph 存儲集群。在進行下一步之前,請參見操作系統推薦以確認你安裝了合適的 Linux 發行版。如果你在整個生產集群中只部署了單一 Linux 發行版的同一版本,那么在排查生產環境中遇到的問題時就會容易一點。

在下面的描述中節點代表一台機器。

安裝 CEPH 部署工具

把 Ceph 倉庫添加到 ceph-deploy 管理節點,然后安裝 ceph-deploy

  1. 在 CentOS 上,可以執行下列命令:

    sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
  2. 把軟件包源加入軟件倉庫。用文本編輯器創建一個 YUM (Yellowdog Updater, Modified) 庫文件,其路徑為 /etc/yum.repos.d/ceph.repo 。例如:

    sudo vim /etc/yum.repos.d/ceph.repo

    把如下內容粘帖進去,用 Ceph 的最新主穩定版名字替換 {ceph-stable-release} (如 firefly ),用你的Linux發行版名字替換 {distro} (如 el6 為 CentOS 6 、 el7 為 CentOS 7 、 rhel6 為 Red Hat 6.5 、 rhel7 為 Red Hat 7 、 fc19 是 Fedora 19 、 fc20 是 Fedora 20 )。最后保存到 /etc/yum.repos.d/ceph.repo 文件中。

    [ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
  3. 更新軟件庫並安裝 ceph-deploy

    sudo yum update && sudo yum install ceph-deploy

Note

你也可以從歐洲鏡像 eu.ceph.com 下載軟件包,只需把 http://ceph.com/ 替換成 http://eu.ceph.com/ 即可

CEPH 節點安裝

你的管理節點必須能夠通過 SSH 無密碼地訪問各 Ceph 節點。如果 ceph-deploy 以某個普通用戶登錄,那么這個用戶必須有無密碼使用 sudo 的權限。

安裝 NTP

我們建議在所有 Ceph 節點上安裝 NTP 服務(特別是 Ceph Monitor 節點),以免因時鍾漂移導致故障,詳情見時鍾

在 CentOS / RHEL 上,執行:

sudo yum install ntp ntpdate ntp-doc

在 Debian / Ubuntu 上,執行:

sudo apt-get install ntp

確保在各 Ceph 節點上啟動了 NTP 服務,並且要使用同一個 NTP 服務器,詳情見 NTP

安裝 SSH 服務器

所有 Ceph 節點上執行如下步驟:

  1. 在各 Ceph 節點安裝 SSH 服務器(如果還沒有):

    sudo apt-get install openssh-server

    或者

    sudo yum install openssh-server
  2. 確保所有 Ceph 節點上的 SSH 服務器都在運行。

創建部署 CEPH 的用戶

ceph-deploy 工具必須以普通用戶登錄 Ceph 節點,且此用戶擁有無密碼使用 sudo 的權限,因為它需要在安裝軟件及配置文件的過程中,不必輸入密碼。

較新版的 ceph-deploy 支持用 --username 選項提供可無密碼使用 sudo 的用戶名(包括 root ,雖然不建議這樣做)。使用 ceph-deploy --username {username} 命令時,指定的用戶必須能夠通過無密碼 SSH 連接到 Ceph 節點,因為 ceph-deploy 中途不會提示輸入密碼。

我們建議在集群內的所有 Ceph 節點上給 ceph-deploy 創建一個特定的用戶,但不要用 “ceph” 這個名字。全集群統一的用戶名可簡化操作(非必需),然而你應該避免使用知名用戶名,因為黑客們會用它做暴力破解(如 rootadmin{productname} )。后續步驟描述了如何創建無 sudo 密碼的用戶,你要用自己取的名字替換 {username}

Note

Infernalis 版起,用戶名 “ceph” 保留給了 Ceph 守護進程。如果 Ceph 節點上已經有了 “ceph” 用戶,升級前必須先刪掉這個用戶。

  1. 在各 Ceph 節點創建新用戶。

    ssh user@ceph-server
    sudo useradd -d /home/{username} -m {username}
    sudo passwd {username}
  2. 確保各 Ceph 節點上新創建的用戶都有 sudo 權限。

    echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
    sudo chmod 0440 /etc/sudoers.d/{username}
允許無密碼 SSH 登錄

正因為 ceph-deploy 不支持輸入密碼,你必須在管理節點上生成 SSH 密鑰並把其公鑰分發到各 Ceph 節點。 ceph-deploy 會嘗試給初始 monitors 生成 SSH 密鑰對。

  1. 生成 SSH 密鑰對,但不要用 sudoroot 用戶。提示 “Enter passphrase” 時,直接回車,口令即為空:

    ssh-keygen
    
    Generating public/private key pair.
    Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /ceph-admin/.ssh/id_rsa.
    Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub.
  2. 把公鑰拷貝到各 Ceph 節點,把下列命令中的 {username} 替換成前面創建部署 Ceph 的用戶里的用戶名。

    ssh-copy-id {username}@node1
    ssh-copy-id {username}@node2
    ssh-copy-id {username}@node3
  3. (推薦做法)修改 ceph-deploy 管理節點上的 ~/.ssh/config 文件,這樣 ceph-deploy 就能用你所建的用戶名登錄 Ceph 節點了,而無需每次執行 ceph-deploy 都要指定 --username {username} 。這樣做同時也簡化了 sshscp 的用法。把 {username} 替換成你創建的用戶名。

    Host node1
       Hostname node1
       User {username}
    Host node2
       Hostname node2
       User {username}
    Host node3
       Hostname node3
       User {username}
引導時聯網

Ceph 的各 OSD 進程通過網絡互聯並向 Monitors 上報自己的狀態。如果網絡默認為 off ,那么 Ceph 集群在啟動時就不能上線,直到你打開網絡。

某些發行版(如 CentOS )默認關閉網絡接口。所以需要確保網卡在系統啟動時都能啟動,這樣 Ceph 守護進程才能通過網絡通信。例如,在 Red Hat 和 CentOS 上,需進入 /etc/sysconfig/network-scripts 目錄並確保 ifcfg-{iface} 文件中的 ONBOOT 設置成了 yes

確保聯通性

ping 短主機名( hostname -s )的方式確認網絡聯通性。解決掉可能存在的主機名解析問題。

Note

主機名應該解析為網絡 IP 地址,而非回環接口 IP 地址(即主機名應該解析成非 127.0.0.1 的IP地址)。如果你的管理節點同時也是一個 Ceph 節點,也要確認它能正確解析自己的主機名和 IP 地址(即非回環 IP 地址)。

開放所需端口

Ceph Monitors 之間默認使用 6789 端口通信, OSD 之間默認用 6800:7300 這個范圍內的端口通信。詳情見網絡配置參考。 Ceph OSD 能利用多個網絡連接進行與客戶端、monitors、其他 OSD 間的復制和心跳的通信。

某些發行版(如 RHEL )的默認防火牆配置非常嚴格,你可能需要調整防火牆,允許相應的入站請求,這樣客戶端才能與 Ceph 節點上的守護進程通信。

對於 RHEL 7 上的 firewalld ,要對公共域開放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范圍,並且要配置為永久規則,這樣重啟后規則仍有效。例如:

sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent

若使用 iptables ,要開放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范圍,命令如下:

sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT

在每個節點上配置好 iptables 之后要一定要保存,這樣重啟之后才依然有效。例如:

/sbin/service iptables save
終端( TTY )

在 CentOS 和 RHEL 上執行 ceph-deploy 命令時可能會報錯。如果你的 Ceph 節點默認設置了 requiretty ,執行 sudo visudo 禁用它,並找到 Defaults requiretty 選項,把它改為 Defaults:ceph !requiretty 或者直接注釋掉,這樣 ceph-deploy 就可以用之前創建的用戶(創建部署 Ceph 的用戶 )連接了。

Note

編輯配置文件 /etc/sudoers 時,必須用 sudo visudo 而不是文本編輯器。

SELINUX

在 CentOS 和 RHEL 上, SELinux 默認為 Enforcing 開啟狀態。為簡化安裝,我們建議把 SELinux 設置為 Permissive 或者完全禁用,也就是在加固系統配置前先確保集群的安裝、配置沒問題。用下列命令把 SELinux 設置為 Permissive

sudo setenforce 0

要使 SELinux 配置永久生效(如果它的確是問題根源),需修改其配置文件 /etc/selinux/config

優先級/首選項

確保你的包管理器安裝了優先級/首選項包且已啟用。在 CentOS 上你也許得安裝 EPEL ,在 RHEL 上你也許得啟用可選軟件庫。

sudo yum install yum-plugin-priorities

比如在 RHEL 7 服務器上,可用下列命令安裝 yum-plugin-priorities並啟用 rhel-7-server-optional-rpms 軟件庫:

sudo yum install yum-plugin-priorities --enablerepo=rhel-7-server-optional-rpms

存儲集群快速入門

 

如果你還沒完成預檢,請先做完。本篇快速入門ceph-deploy 從管理節點建立一個 Ceph 存儲集群,該集群包含三個節點,以此探索 Ceph 的功能。

 

第一次練習時,我們創建一個 Ceph 存儲集群,它有一個 Monitor 和兩個 OSD 守護進程。一旦集群達到 active + clean 狀態,再擴展它:增加第三個 OSD 、增加元數據服務器和兩個 Ceph Monitors。為獲得最佳體驗,先在管理節點上創建一個目錄,用於保存 ceph-deploy 生成的配置文件和密鑰對。

mkdir my-cluster
cd my-cluster

ceph-deploy 會把文件輸出到當前目錄,所以請確保在此目錄下執行 ceph-deploy

Important

如果你是用另一普通用戶登錄的,不要用 sudo 或在 root 身份運行 ceph-deploy ,因為它不會在遠程主機上調用所需的 sudo 命令。

禁用 requiretty

在某些發行版(如 CentOS )上,執行 ceph-deploy 命令時,如果你的 Ceph 節點默認設置了 requiretty 那就會遇到報錯。可以這樣禁用此功能:執行 sudo visudo ,找到 Defaults requiretty 選項,把它改為 Defaults:ceph !requiretty ,這樣 ceph-deploy 就能用 ceph 用戶登錄並使用 sudo 了。

創建集群

如果在某些地方碰到麻煩,想從頭再來,可以用下列命令清除配置:

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

用下列命令可以連 Ceph 安裝包一起清除:

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

如果執行了 purge ,你必須重新安裝 Ceph 。

在管理節點上,進入剛創建的放置配置文件的目錄,用 ceph-deploy 執行如下步驟。

  1. 創建集群。

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

    例如:

    ceph-deploy new node1

    在當前目錄下用 lscat 檢查 ceph-deploy 的輸出,應該有一個 Ceph 配置文件、一個 monitor 密鑰環和一個日志文件。詳情見 ceph-deploy new -h

  2. 把 Ceph 配置文件里的默認副本數從 3 改成 2 ,這樣只有兩個 OSD 也可以達到 active + clean 狀態。把下面這行加入 [global] 段:

    osd pool default size = 2
  3. 如果你有多個網卡,可以把 public network 寫入 Ceph 配置文件的 [global] 段下。詳情見網絡配置參考

    public network = {ip-address}/{netmask}
  4. 安裝 Ceph 。

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

    例如:

    ceph-deploy install admin-node node1 node2 node3

    ceph-deploy 將在各節點安裝 Ceph 。 注:如果你執行過 ceph-deploy purge ,你必須重新執行這一步來安裝 Ceph 。

  5. 配置初始 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

Note

只有在安裝 Hammer 或更高版時才會創建 bootstrap-rgw 密鑰環。

Note

如果此步失敗並輸出類似於如下信息 “Unable to find /etc/ceph/ceph.client.admin.keyring”,請確認 ceph.conf 中為 monitor 指定的 IP 是 Public IP,而不是 Private IP。

  1. 添加兩個 OSD 。為了快速地安裝,這篇快速入門把目錄而非整個硬盤用於 OSD 守護進程。如何為 OSD 及其日志使用獨立硬盤或分區,請參考 ceph-deploy osd 。登錄到 Ceph 節點、並給 OSD 守護進程創建一個目錄。

    ssh node2
    sudo mkdir /var/local/osd0
    exit
    
    ssh node3
    sudo mkdir /var/local/osd1
    exit

    然后,從管理節點執行 ceph-deploy 來准備 OSD 。

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

    例如:

    ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1

    最后,激活 OSD 。

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

    例如:

    ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
  2. 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-deploy 和本地管理主機( admin-node )通信時,必須通過主機名可達。必要時可修改 /etc/hosts ,加入管理主機的名字。

  3. 確保你對 ceph.client.admin.keyring 有正確的操作權限。

    sudo chmod +r /etc/ceph/ceph.client.admin.keyring
  4. 檢查集群的健康狀況。

    ceph health

    等 peering 完成后,集群應該達到 active + clean 狀態。

操作集群

ceph-deploy 部署完成后它會自動啟動集群。要在 Debian/Ubuntu 發行版下操作集群守護進程,參見用 Upstart 運行 Ceph ;要在 CentOS 、 Red Hat 、 Fedora 和 SLES 下操作集群守護進程,參見用 sysvinit 運行 Ceph

關於 peering 和集群健康狀況請參見監控集群;關於 OSD 守護進程和歸置組( placement group )健康狀況參見監控 OSD 和歸置組;關於用戶管理請參見用戶管理

Ceph 集群部署完成后,你可以嘗試一下管理功能、 rados 對象存儲命令,之后可以繼續快速入門手冊,了解 Ceph 塊設備、 Ceph 文件系統和 Ceph 對象網關。

擴展集群(擴容)

一個基本的集群啟動並開始運行后,下一步就是擴展集群。在 node1 上添加一個 OSD 守護進程和一個元數據服務器。然后分別在 node2node3 上添加 Ceph Monitor ,以形成 Monitors 的法定人數。

添加 OSD

你運行的這個三節點集群只是用於演示的,把 OSD 添加到 monitor 節點就行。

ssh node1
sudo mkdir /var/local/osd2
exit

然后,從 ceph-deploy 節點准備 OSD 。

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

例如:

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

最后,激活 OSD 。

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

例如:

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

一旦你新加了 OSD , Ceph 集群就開始重均衡,把歸置組遷移到新 OSD 。可以用下面的 ceph 命令觀察此過程:

ceph -w

你應該能看到歸置組狀態從 active + clean 變為 active ,還有一些降級的對象;遷移完成后又會回到 active + clean 狀態( Control-C 退出)。

添加元數據服務器

至少需要一個元數據服務器才能使用 CephFS ,執行下列命令創建元數據服務器:

ceph-deploy mds create {ceph-node}

例如:

ceph-deploy mds create node1

Note

當前生產環境下的 Ceph 只能運行一個元數據服務器。你可以配置多個,但現在我們還不會為多個元數據服務器的集群提供商業支持。

添加 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

用的是 IPv6 地址的話:

[client]
rgw frontends = civetweb port=[::]:80
添加 MONITORS

Ceph 存儲集群需要至少一個 Monitor 才能運行。為達到高可用,典型的 Ceph 存儲集群會運行多個 Monitors,這樣在單個 Monitor 失敗時不會影響 Ceph 存儲集群的可用性。Ceph 使用 PASOX 算法,此算法要求有多半 monitors(即 1 、 2:3 、 3:4 、 3:5 、 4:6 等 )形成法定人數。

新增兩個監視器到 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 服務的同一級。

存入/檢出對象數據

要把對象存入 Ceph 存儲集群,客戶端必須做到:

  1. 指定對象名
  2. 指定存儲池

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 有動態均衡機制,無需手動干預即可完成。

 

塊設備快速入門

要實踐本手冊,你必須先完成存儲集群快速入門 ,並確保 Ceph 存儲集群處於 active + clean 狀態,這樣才能使用 Ceph 塊設備

Note

Ceph 塊設備也叫 RBDRADOS 塊設備。

你可以在虛擬機上運行 ceph-client 節點,但是不能在與 Ceph 存儲集群(除非它們也用 VM )相同的物理節點上執行下列步驟。詳情見 FAQ

安裝 CEPH

  1. 確認你使用了合適的內核版本,詳情見操作系統推薦

    lsb_release -a
    uname -r
    
  2. 在管理節點上,通過 ceph-deploy 把 Ceph 安裝到 ceph-client 節點。

    ceph-deploy install ceph-client
  3. 在管理節點上,用 ceph-deploy 把 Ceph 配置文件和 ceph.client.admin.keyring 拷貝到 ceph-client

    ceph-deploy admin ceph-client

    ceph-deploy 工具會把密鑰環復制到 /etc/ceph 目錄,要確保此密鑰環文件有讀權限(如 sudo chmod +r /etc/ceph/ceph.client.admin.keyring )。

配置塊設備

  1. ceph-client 節點上創建一個塊設備 image 。

    rbd create foo --size 4096 [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
  2. ceph-client 節點上,把 image 映射為塊設備。

    sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
  3. ceph-client 節點上,創建文件系統后就可以使用塊設備了。

    sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo

    此命令可能耗時較長。

  4. ceph-client 節點上掛載此文件系統。

    sudo mkdir /mnt/ceph-block-device
    sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
    cd /mnt/ceph-block-device

 

 

CEPH 文件系統快速入門

開始實踐 Ceph 文件系統入門手冊前,必須先完成存儲集群快速入門。在管理節點上完成此入門。

准備工作

  1. 確認你使用了合適的內核版本,詳情見操作系統推薦

    lsb_release -a
    uname -r
    
  2. 在管理節點上,通過 ceph-deploy 把 Ceph 安裝到 ceph-client 節點上。

    ceph-deploy install ceph-client
  3. 確保 Ceph 存儲集群在運行,且處於 active + clean 狀態。同時,確保至少有一個 Ceph 元數據服務器在運行。

    ceph -s [-m {monitor-ip-address}] [-k {path/to/ceph.client.admin.keyring}]

創建文件系統

雖然已創建了元數據服務器(存儲集群快速入門),但如果你沒有創建存儲池和文件系統,它是不會變為活動狀態的。參見 創建 Ceph 文件系統

ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
ceph fs new <fs_name> cephfs_metadata cephfs_data

創建密鑰文件

Ceph 存儲集群默認啟用認證,你應該有個包含密鑰的配置文件(但不是密鑰環本身)。用下述方法獲取某一用戶的密鑰:

  1. 在密鑰環文件中找到與某用戶對應的密鑰,例如:

    cat ceph.client.admin.keyring
  2. 找到用於掛載 Ceph 文件系統的用戶,復制其密鑰。大概看起來如下所示:

    [client.admin]
       key = AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
  3. 打開文本編輯器。

  4. 把密鑰粘帖進去,大概像這樣:

    AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
  5. 保存文件,並把其用戶名 name 作為一個屬性(如 admin.secret )。

  6. 確保此文件對用戶有合適的權限,但對其他用戶不可見。

內核驅動

把 Ceph FS 掛載為內核驅動。

sudo mkdir /mnt/mycephfs
sudo mount -t ceph {ip-address-of-monitor}:6789:/ /mnt/mycephfs

Ceph 存儲集群默認需要認證,所以掛載時需要指定用戶名 name創建密鑰文件一節中創建的密鑰文件 secretfile ,例如:

sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret

Note

從管理節點而非服務器節點掛載 Ceph FS 文件系統,詳情見 FAQ

用戶空間文件系統( FUSE )

把 Ceph FS 掛載為用戶空間文件系統( FUSE )。

sudo mkdir ~/mycephfs
sudo ceph-fuse -m {ip-address-of-monitor}:6789 ~/mycephfs

Ceph 存儲集群默認要求認證,需指定相應的密鑰環文件,除非它在默認位置(即 /etc/ceph ):

sudo ceph-fuse -k ./ceph.client.admin.keyring -m 192.168.0.1:6789 ~/mycephfs

 

CEPH 對象存儲快速入門

從 firefly(v0.80)起,Ceph 存儲集群顯著地簡化了 Ceph 對象網關的安裝和配置。網關守護進程內嵌了 Civetweb,無需額外安裝 web 服務器或配置 FastCGI。此外,可以直接 使用 ceph-deploy 來安裝網關軟件包、生成密鑰、配置數據目錄以及創建一個網關實例。

Tip

Civetweb 默認使用 7480 端口。要么直接打開 7480 端口,要么在你的 Ceph 配置文件中設置首選端口(例如 80 端口)。

要使用 Ceph 對象網關,請執行下列步驟:

安裝 CEPH 對象網關

  1. client-node 上執行預安裝步驟。如果你打算使用 Civetweb 的默認端口 7480 ,必須通過 firewall-cmdiptables 來打開它。詳情見預檢

  2. 從管理節點的工作目錄,在 client-node 上安裝 Ceph 對象網關軟件包。例如:

    ceph-deploy install --rgw <client-node> [<client-node> ...]

新建 CEPH 對象網關實例

從管理節點的工作目錄,在 client-node 上新建一個 Ceph 對象網關實例。例如:

ceph-deploy rgw create

一旦網關開始運行,你就可以通過 7480 端口來訪問它(比如 http://client-node:7480 )。

配置 CEPH 對象網關實例

  1. 通過修改 Ceph 配置文件可以更改默認端口(比如改成 80 )。增加名為 [client.rgw.<client-node>] 的小節,把 <client-node> 替換成你自己 Ceph 客戶端節點的短名稱(即 hostname -s 的輸出)。例如,你的節點名就是 client-node ,在 [global] 節后增加一個類似於下面的小節:

    [client.rgw.client-node]
    rgw_frontends = "civetweb port=80"
    

    Note

    確保在 rgw_frontends 鍵值對的 port=<port-number> 中沒有空格。

    Important

    如果你打算使用 80 端口,確保 Apache 服務器沒有在使用該端口,否則會和 Civetweb 沖突。出現這種情況時我們建議移除 Apache 服務。

  2. 為了使新端口的設置生效,需要重啟 Ceph 對象網關。在 RHEL 7 和 Fedora 上 ,執行:

    sudo systemctl restart ceph-radosgw.service

    在 RHEL 6 和 Ubuntu 上,執行:

    sudo service radosgw restart id=rgw.<short-hostname>
  3. 最后,檢查節點的防火牆,確保你所選用的端口(例如 80 端口)處於開放狀態。如果沒有,把該端口加入放行規則並重載防火牆的配置。例如:

    sudo firewall-cmd --list-all sudo firewall-cmd --zone=public --add-port
    80/tcp --permanent
    sudo firewall-cmd --reload

    關於使用 firewall-cmdiptables 配置防火牆的詳細信息,請參閱預檢

    你應該可以生成一個未授權的請求,並收到應答。例如,一個如下不帶參數的請求:

    http://<client-node>:80

    應該收到這樣的應答:

    <?xml version="1.0" encoding="UTF-8"?>
    <ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
      <Owner>
        <ID>anonymous</ID>
        <DisplayName></DisplayName>
      </Owner>
      <Buckets>
      </Buckets>
    </ListAllMyBucketsResult>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM