天天看點

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

  • ceph元件介紹及基于ceph-deploy部署
    • 一、基本架構
      • 1. 介紹
        • 1.1 軟體定義存儲 -SDS
        • 1.2 雲存儲
        • 1.3 下一代統一存儲體系架構
    • 二、Ceph 架構
      • 2.1 Ceph元件
      • 2.1 Ceph部署架構
    • 三、ceph-deploy部署ceph叢集
      • 3.1 修改各主機名稱
      • 3.2 修改node1節點/etc/hosts檔案,增加以下内容:
      • 3.3 分别這三個節點上存儲建立使用者且賦予它root權限
      • 3.4 在各節點上安裝啟用軟體倉庫,啟用可選軟體庫
      • 3.5 配置允許無密碼 SSH 登入
      • 3.6 在管理節點node1 上修改~/.ssh/config檔案(若沒有則建立)增加一下内容:
      • 3.7 在各節點上安裝ntp(防止時鐘偏移導緻故障)、openssh
      • 3.8 在各節點上配置防火牆開放所需要的端口和selinux,更新系統
      • 3.9 在各節點上建立ceph 源(這裡推薦使用網易或阿裡的ceph源,若用官方源檔案會很慢而且容易出現下載下傳失敗中斷等問題,本人深受下載下傳官方源的坑害)
      • 3.10 配置主機名解析,使用 /etc/hosts,或者dns
      • 3.11 配置sudo不需要tty
      • 3.12 ceph-deploy安裝ceph叢集
        • 3.12.1 安裝ceph-deploy(在node1節點操作)
        • 3.12.2 建立檔案夾ceph-cluster(在node1節點操作)
        • 3.12.3 部署節點(在node1節點操作)
        • 3.12.4 在my-cluster目前目錄編輯ceph.conf配置檔案(在node1節點操作)
        • 3.12.5 安裝 ceph包,替代 ceph-deploy install node1 node2 ,不過下面的指令需要在每台node上安裝
        • 3.12.6 配置初始 monitor(s)、并收集所有密鑰:()
        • 3.12.7 把配置資訊拷貝到各節點
        • 3.12.8 配置 osd
        • 3.12.9 部署 mgr , L版以後才需要部署
    • 四、Ceph 塊存儲
      • 4.1 安裝 Ceph 塊存儲用戶端
      • 4.2 Ceph塊挂載
        • 4.2.1 建立 ceph 塊用戶端使用者名和認證密鑰
        • 4.2.2 手工把密鑰檔案拷貝到用戶端
      • 4.2.3 用戶端建立塊裝置及映射
      • 五、 Ceph 對象存儲
        • 5.1部署Ceph對象存儲
        • 5.2 部署RGW
        • 5.3 使用 S3 API 通路 Ceph 對象存儲
    • 六、 Ceph 檔案存儲
      • 6.1 部署 Ceph 檔案存儲
      • 6.2 部署 cephfs(node1)
      • 6.3 建立使用者(可選,因為部署時,已經生成)(node1)
      • 6.4 通過核心驅動和FUSE用戶端挂載Ceph FS
      • 6.5 将Ceph FS 導出為NFS伺服器

ceph元件介紹及基于ceph-deploy部署

一、基本架構

1. 介紹

在過去幾年中,資料存儲需求急劇增長。研究表明,大型組織中的資料正以每年40%到60%的速度增長,許多公司每年的資料都翻了一番。國際資料公司(IDC)的分析師估計,到2000年,全球共有54.4 exabytes 的資料。到2007年,這一數字達到295艾位元組,到2020年,全球預計将達到44 zettabytes。傳統的存儲系統無法管理這樣的資料增長;我們需要一個像Ceph這樣的系統,它是分布式的,可擴充的,最重要的是,在經濟上是可行的。Ceph是專門為處理當今和未來的資料存儲需求而設計的。

1ZB=1024EB 1EB=1024PB 1PB=1024TB
           

1.1 軟體定義存儲 -SDS

SDS是減少存儲基礎設施的TCO(總體成本)所需要的。除了降低存儲成本外,SDS還可以提供靈活性、可伸縮性和可靠性。Ceph是一種真正的SDS;它運作在沒有廠商鎖定的普通硬體上。與傳統的存儲系統(硬體與軟體結合在一起)不同,在SDS中,您可以從任何制造商中自由選擇硬體,也可以根據自己的需要自由設計異構硬體解決方案。Ceph在此硬體之上的軟體定義存儲提供了您需要的所有,并将負責所有事情,從軟體層提供了所有企業存儲特性。

1.2 雲存儲

目前已經和開源雲架構OpenStack 結合起來,成為Openstack後端存儲的标配,并且又同時支援用于kubernetes 動态

存儲。

1.3 下一代統一存儲體系架構

統一存儲的定義最近發生了變化。幾年前,術語“統一存儲”指從單個系統提供檔案和塊存儲。如今,由于近年來的技術進步,如雲計算、大資料和物聯網,一種新的存儲方式正在進化,即對象存儲。是以,所有不支援對象存儲的存儲系統都不是真正的統一存儲解決方案。真正的統一存儲就像Ceph;它支援來自單個系統的塊、檔案和對象存儲。

Ceph是目前最熱門的軟體定義存儲(SDS)技術,正在撼動整個存儲行業。它是一個開源項目,為塊、檔案和對象存儲提供統一的軟體定義的解決方案。Ceph的核心思想是提供一個分布式存儲系統,該系統具有大規模的可伸縮性和高性能,并且沒有單點故障。從根本上說,它被設計成在通用硬體上運作時具有高度的可伸縮性(可達艾位元組(ExaByte)級别甚 至更高)。

Ceph提供了出色的性能、巨大的可伸縮性、強大的功能和靈活性。它擺脫昂貴的專有存儲。Ceph确實是一個企業級的存儲解決方案,可以在普通硬體上運作;這是一個低成本但功能豐富的存儲系統。Ceph的通用存儲系統提供塊存儲、檔案存儲和對象存儲,使客戶可以随心所欲地使用存儲。

Ceph 正在快速發展和改進,目前釋出了十三個版本,每個長期版本都有一個名稱,該名稱遵循字母順序發行。Ceph 的吉祥物是章魚。

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

二、Ceph 架構

2.1 Ceph元件

  • Ceph monitors(MON):Ceph螢幕通過儲存叢集狀态的映射來跟蹤整個叢集的健康狀況
  • Ceph對象儲存設備(OSD): 一旦應用程式向Ceph叢集發出寫操作,資料就以對象的形式存儲在OSD中。
    • 這是Ceph叢集中存儲實際使用者資料的惟一元件,通常,一個OSD守護程序綁定到叢集中的一個實體磁盤。是以,通常來說,Ceph叢集中實體磁盤的總數與在每個實體磁盤上存儲使用者資料的OSD守護程序的總數相同。
  • Ceph metadata server (MDS): MDS跟蹤檔案層次結構,僅為Ceph FS檔案系統存儲中繼資料
  • RADOS: RADOS對象存儲負責存儲這些對象,而不管它們的資料類型如何。RADOS層確定資料始終保持一緻。為此,它執行資料複制、故障檢測和恢複,以及跨叢集節點的資料遷移和再平衡。
  • Librados: librados庫是一種通路RADOS的友善方法,支援PHP、Ruby、Java、Python、C和c++程式設計語言。它為Ceph存儲叢集(RADOS)提供了本機接口,并為其他服務提供了基礎,如RBD、RGW和CephFS,這些服務建構在librados之上。librados還支援從應用程式直接通路RADOS,沒有HTTP開銷。
  • RBD:提供持久塊存儲,它是瘦配置的、可調整大小的,并在多個osd上存儲資料條帶。RBD服務被建構為一個在librados之上的本機接口。
  • RGW:RGW提供對象存儲服務。它使用librgw (Rados網關庫)和librados,允許應用程式與Ceph對象存儲建立連接配接。RGW提供了與Amazon S3和OpenStack Swift相容的RESTful api接口。
  • CephFS: Ceph檔案系統提供了一個符合posix标準的檔案系統,它使用Ceph存儲叢集在檔案系統上存儲使用者數

    據。與RBD和RGW一樣,CephFS服務也作為librados的本機接口實作。

  • Ceph manager: Ceph manager守護程序(Ceph -mgr)是在Kraken版本中引入的,它與monitor守護程序一起運作,

    為外部監視和管理系統提供額外的監視和接口。

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

2.1 Ceph部署架構

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

三、ceph-deploy部署ceph叢集

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

3.1 修改各主機名稱

  • 準備3台主機,并且分别修改各主機名(hostnamectl set-hostname xxx 後重新開機
IP位址            主機名(Hostname)
 
192.168.38.15                    node1 #(管理\監控\osd.0 節點)
192.168.38.16                    node2 #(管理\監控\osd.1 節點)
192.168.38.17                    node3 #(管理\監控\osd.2 節點)
           

3.2 修改node1節點/etc/hosts檔案,增加以下内容:

192.168.1.24              node1
192.168.1.25              node2
192.168.1.26              node3
           

3.3 分别這三個節點上存儲建立使用者且賦予它root權限

useradd ${username}
echo "${passwd}" | passwd --stdin ${username}
echo "${username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${username}
chmod 0440 /etc/sudoers.d/${username}

----------------------------------------------------------------
# sudo useradd -d /home/liuzp  -m  liuzp
# sudo passwd liuzp 輸入密碼這裡建議三台伺服器密碼設為一緻)
//授予無密碼sudo權限
#echo "liuzp ALL = (root) NOPASSWD:ALL" >> /etc/sudoers.d/liuzp
#sudo chmod 0440 /etc/sudoers.d/liuzp
----------------------------------------------------------------

           

3.4 在各節點上安裝啟用軟體倉庫,啟用可選軟體庫

# 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*
 
# sudo yum install yum-plugin-priorities
           

3.5 配置允許無密碼 SSH 登入

  • 因為 ceph-deploy 不支援輸入密碼,你必須在管理節點上生成 SSH 密鑰并把其公鑰分發到各 Ceph 節點。 ceph-deploy 會嘗試給初始 monitors 生成 SSH 密鑰對。生成 SSH 密鑰對,使用建立的使用者不要用 sudo 或 root 。
  • 生成密鑰
# ssh-keygen(提示 “Enter passphrase” 時,直接回車,密碼即為空如下)
----------------------------------------------------------------
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.
           
  • 把公鑰拷貝到各 Ceph 節點上
#ssh-copy-id  [email protected]
#ssh-copy-id  [email protected]
#ssh-copy-id  [email protected]
           

3.6 在管理節點node1 上修改~/.ssh/config檔案(若沒有則建立)增加一下内容:

Host    node1
Hostname  192.168.38.15
User              liuzp
Host    node2
Hostname  192.168.38.15
User              liuzp
Host    node3
Hostname  192.168.38.15
User              liuzp
           

3.7 在各節點上安裝ntp(防止時鐘偏移導緻故障)、openssh

#sudo yum install ntp ntpdate ntp-doc
#ntpdate cn.ntp.org.cn
#systemctl restart ntpd ntpdate && systemctl enable ntpd ntpdate
#sudo yum install openssh-server
           
  1. 在192.168.38.15(node1節點)
vim /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
           

systemctl start ntpd.service

systemctl enable ntpd.service

  1. 192.168.38.16(node2節點)、192.168.38.17(node3節點)執行
vim /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
           
  • 添加如下項:
server 192.168.38.15
           

systemctl start ntpd.service

systemctl enable ntpd.service

如果安裝後叢集時間同步起不來,參考:

https://blog.csdn.net/c77_cn/article/details/45741831

3.8 在各節點上配置防火牆開放所需要的端口和selinux,更新系統

#firewall-cmd --zone=public --add-port=6789/tcp --permanent
#firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
#firewall-cmd --reload
#firewall-cmd --zone=public --list-all

//關閉selinux
sed -i "/^SELINUX/s/enforcing/disabled/" /etc/selinux/config
setenforce 0
           

3.9 在各節點上建立ceph 源(這裡推薦使用網易或阿裡的ceph源,若用官方源檔案會很慢而且容易出現下載下傳失敗中斷等問題,本人深受下載下傳官方源的坑害)

  • 在 /etc/yum.repos.d/目錄下建立 ceph.repo然後寫入以下内容
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
           

3.10 配置主機名解析,使用 /etc/hosts,或者dns

cat >>/etc/hosts<<EOF
$node1_ip $node1
$node2_ip $node2
$node3_ip $node3
EOF
           

3.11 配置sudo不需要tty

sed -i 's/Default requiretty/#Default requiretty/' /etc/sudoers
           

3.12 ceph-deploy安裝ceph叢集

3.12.1 安裝ceph-deploy(在node1節點操作)

sudo yum install -y ceph-deploy python-pip
           

3.12.2 建立檔案夾ceph-cluster(在node1節點操作)

mkdir my-cluster
cd my-cluster
           

3.12.3 部署節點(在node1節點操作)

ceph-deploy new node1 node2 node3
           

3.12.4 在my-cluster目前目錄編輯ceph.conf配置檔案(在node1節點操作)

  • cat ceph.conf
[global]
.....
public network = 192.168.38.0/24
cluster network = 192.168.38.0/24
           

3.12.5 安裝 ceph包,替代 ceph-deploy install node1 node2 ,不過下面的指令需要在每台node上安裝

yum install -y ceph ceph-radosgw
-----
# 本人在node1節點使用下面方法安裝ceph
ceph-deploy install node1 node2 node3
           

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

ceph-deploy mon create-initial
ls -l *.keyring
           

3.12.7 把配置資訊拷貝到各節點

ceph-deploy admin node1 node2 node3
           

3.12.8 配置 osd

for dev in /dev/sdb /dev/sdc /dev/sdd
do
  ceph-deploy disk zap node1 $dev
  ceph-deploy osd create node1 --data $dev
  ceph-deploy disk zap node2 $dev
  ceph-deploy osd create node2 --data $dev
  ceph-deploy disk zap node3 $dev
  ceph-deploy osd create node3 --data $dev
done
           

3.12.9 部署 mgr , L版以後才需要部署

ceph-deploy mgr create node1 node2 node3
           
  • 開啟 dashboard 子產品,用于UI檢視
ceph mgr module enable dashboard
           
  • 通路頁面
curl http://192.168.38.15:7000
           
ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署
ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

四、Ceph 塊存儲

4.1 安裝 Ceph 塊存儲用戶端

Ceph塊裝置,以前稱為RADOS塊裝置,為客戶機提供可靠的、分布式的和高性能的塊存儲磁盤。RADOS塊裝置利用librbd庫并以順序的形式在Ceph叢集中的多個osd上存儲資料塊。RBD是由Ceph的RADOS層支援的,是以每個塊裝置都分布在多個Ceph節點上,提供了高性能和優異的可靠性。RBD有Linux核心的本地支援,這意味着RBD驅動程式從過去幾年就與Linux核心內建得很好。除了可靠性和性能之外,RBD還提供了企業特性,例如完整和增量快照、瘦配置、寫時複制克隆、動态調整大小等等。RBD還支援記憶體緩存,這大大提高了其性能:

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

任何普通的Linux主機(RHEL或基于debian的)都可以充當Ceph客戶機。用戶端通過網絡與Ceph存儲叢集互動以存儲或檢索使用者資料。Ceph RBD支援已經添加到Linux主線核心中,從2.6.34和以後的版本開始。

4.2 Ceph塊挂載

  • 下面把Ceph叢集(node1、node2、node3)的OSD以塊形式挂載到node4(192.168.38.18)節點

4.2.1 建立 ceph 塊用戶端使用者名和認證密鑰

  • 挂載ceph塊需要密鑰
  • 下面是管理者密鑰,一般塊挂載盡量不要使用管理者密鑰
# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQBNRjFdNcr2CRAAYiiWwH9ESG0HXw9iIe8ZaA==
           
  • 建立普通使用者密鑰
    • 對存儲池rbd進行mon授權(rbd是預設存儲池)
ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=rbd' |tee ./ceph.client.rbd.keyring
注:tee ./ceph.client.rbd.keyring 把授權密鑰放在本地指定檔案中
           

4.2.2 手工把密鑰檔案拷貝到用戶端

  • 在node4節點(192.168.38.18)上建立/etc/ceph
mkdir /etc/ceph -p
           
  • node1 節點拷貝ceph.client.rbd.keyring到node4
scp ceph.client.rbd.keyring node4:/etc/ceph/
           
  • node4節點安裝用戶端
    • 在 /etc/yum.repos.d/目錄下建立 ceph.repo然後寫入以下内容
vim /etc/yum.repos.d/ceph.repo
           
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
           
  • 安裝ceph
  • 在各節點上安裝啟用軟體倉庫,啟用可選軟體庫
# 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*

# sudo yum install yum-plugin-priorities
           
  • install ceph
yum -y install ceph
# 把node1的ceph.conf檔案拷貝到node4節點
scp /etc/ceph/ceph.conf node4:/etc/ceph/

cat /etc/ceph/ceph.client.rbd.keyring
ceph -s --name client.rbd
# 在node4執行ceph -s 會使用管理者權限,故會報錯,請使用用戶端權限連接配接ceph -s --name client.rbd
           

4.2.3 用戶端建立塊裝置及映射

  1. 建立塊裝置
  • 預設建立塊裝置,會直接建立在rbd 池中,但使用 deploy 安裝後,該rbd池并沒有建立。
  • 在node1節點建立池和塊
ceph osd lspools # 檢視叢集存儲池
ceph osd pool create rbd 50 # 50 為 place group 數量,由于我們後續測試,也需要更多的pg,是以這裡設定為50
           
  • 注:确定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:
    • 少于 5 個 OSD 時可把 pg_num 設定為 128
    • OSD 數量在 5 到 10 個時,可把pg_num 設定為 512
    • OSD 數量在 10 到 50 個時,可把 pg_num 設定為 4096
    • OSD 數量大于 50 時,你得了解權衡方法、以及如何自己計算pg_num 取值
  1. 用戶端建立 塊裝置
rbd create rbd2 --size 1024 --name client.rbd
# --size 1024機關為MB
           
  • 檢視塊資訊
rbd ls --name client.rbd
rbd ls -p rbd --name client.rbd
rbd list --name client.rbd
rbd --image rbd2 info --name client.rbd
---------------------
rbd image 'rbd2':
        size 1GiB in 256 objects
        order 22 (4MiB objects)
        block_name_prefix: rbd_data.3e0e36b8b4567
        format: 2
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
        flags:
        create_timestamp: Mon Jul 22 22:17:42 2019

           
  1. 映射塊裝置
  • 映射到用戶端,應該會報錯
rbd map --image rbd1 --name client.rbd
-----------------------
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd2 object-map fast-diff".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address

           
  • layering: 分層支援
  • exclusive-lock: 排它鎖定支援對
  • object-map: 對象映射支援(需要排它鎖定(exclusive-lock))
  • deep-flatten: 快照平支援(snapshot flatten support)
  • fast-diff: 在client-node1上使用krbd(核心rbd)客戶機進行快速diff計算(需要對象映射),我們将無法在CentOS核心3.10上映射塊裝置映像,因為該核心不支援對象映射(object-map)、深平(deep-flatten)和快速diff(fast-diff)(在核心4.9中引入了支援)。為了解決這個問題,我們将禁用不支援的特性,有幾個選項可以做到這一點:
    • 1)動态禁用
    rbd feature disable rbd2 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
               
    • 2) 建立RBD鏡像時,隻啟用 分層特性。
    rbd create rbd2 --size 1024 --image-feature layering --name client.rbd
               
    • 3)ceph 配置檔案中禁用
    rbd_default_features = 1
               
  • 我們這裡動态禁用
rbd feature disable rbd2 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
rbd map --image rbd2 --name client.rbd
----
/dev/rbd0

rbd showmapped --name client.rbd
----
id pool image snap device
0  rbd  rbd2  -    /dev/rbd0
           
  • 建立檔案系統,并挂載
fdisk -l /dev/rbd0
mkfs.xfs /dev/rbd0
mkdir /mnt/ceph-disk1
mount /dev/rbd0 /mnt/ceph-disk1

df -h /mnt/ceph-disk1
---
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0      1014M   33M  982M   4% /mnt/ceph-disk1
           
  • 寫入資料測試
[[email protected] ceph]# dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0887969 s, 1.2 GB/s
---------------
[[email protected] ceph]# df -h /mnt/ceph-disk1
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0      1014M  133M  882M  14% /mnt/ceph-disk1
--------------
[[email protected] ceph]# ll /mnt/ceph-disk1/
total 102400
-rw-r--r--. 1 root root 104857600 Jul 22 22:32 file1
--------------
[[email protected] ceph]# ll -h /mnt/ceph-disk1/
total 100M
-rw-r--r--. 1 root root 100M Jul 22 22:32 file1
           
  • 做成服務,開機自動挂載
    • vim /usr/local/bin/rbd-mount
    #!/bin/bash
    
    # Pool name where block device image is stored
    export poolname=rbd
    
    # Disk image name
    export rbdimage=rbd2
    
    # Mounted Directory
    export mountpoint=/mnt/ceph-disk1
    
    # Image mount/unmount and pool are passed from the systemd service as arguments
    # Are we are mounting or unmounting
    if [ "$1" == "m" ]; then
      modprobe rbd
      rbd feature disable $rbdimage object-map fast-diff deep-flatten
      rbd map $rbdimage --id rbd --keyring /etc/ceph/ceph.client.rbd.keyring
      mkdir -p $mountpoint
      mount /dev/rbd/$poolname/$rbdimage $mountpoint
    fi
    if [ "$1" == "u" ]; then
      umount $mountpoint
      rbd unmap /dev/rbd/$poolname/$rbdimage
    fi
               
    • /usr/local/bin/rbd-mount添加執行權限
    chmod +x /usr/local/bin/rbd-mount
               
    • /etc/systemd/system/rbd-mount.service
    [Unit]
    Description=RADOS block device mapping for $rbdimage in pool $poolname"
    Conflicts=shutdown.target
    Wants=network-online.target
    After=NetworkManager-wait-online.service
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/local/bin/rbd-mount m
    ExecStop=/usr/local/bin/rbd-mount u
    [Install]
    WantedBy=multi-user.target
               
    • 設定開機重新開機
    systemctl daemon-reload
    systemctl enable rbd-mount.service
    reboot -f
    df -h
               
    • 解除安裝挂載
    [[email protected] ceph]# umount /mnt/ceph-disk1/
    [[email protected] ceph]# ll -h /mnt/ceph-disk1/
    total 0
               

五、 Ceph 對象存儲

5.1部署Ceph對象存儲

作為檔案系統的磁盤,作業系統不能直接通路對象存儲。相反,它隻能通過應用程式級别的API通路。Ceph是一種分布式對象存儲系統,通過Ceph對象網關提供對象存儲接口,也稱為RADOS網關(RGW)接口,它建構在Ceph RADOS層之 上。RGW使用librgw (RADOS Gateway Library)和librados,允許應用程式與Ceph對象存儲建立連接配接。RGW為應用程式提供了一個RESTful S3 / swift相容的API接口,用于在Ceph叢集中以對象的形式存儲資料。Ceph還支援多租戶對象存儲,可以通過RESTful API通路。此外,RGW還支援Ceph管理API,可以使用本機API調用來管理Ceph存儲叢集。

librados軟體庫非常靈活,允許使用者應用程式通過C、c++、Java、Python和PHP綁定直接通路Ceph存儲叢集。Ceph對象存儲還具有多站點功能,即為災難恢複提供解決方案

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

對于生産環境,建議您在實體專用機器上配置RGW。但是,如果您的對象存儲工作負載不太大,您可以考慮将任何螢幕機器作為RGW節點使用。RGW是一個獨立的服務,它從外部連接配接到Ceph叢集,并向用戶端提供對象存儲通路。在生産環境中,建議您運作多個RGW執行個體,由負載均衡器屏蔽,如下圖所示:

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

5.2 部署RGW

  1. 安裝ceph-radosgw
yum -y install ceph-radosgw
           
  1. 部署
ceph-deploy rgw create node1 node2 node3
           
  1. 預設端口7480,可以通過配置修改端口
vi /etc/ceph/ceph.conf
…….
[client.rgw.node1]
rgw_frontends = "civetweb port=80"
           
sudo systemctl restart [email protected]
           
  1. 建立OSD池
  • 在my-cluster目錄下建立pool和create_pool.sh
    • vim pool
    .rgw
    .rgw.root
    .rgw.control
    .rgw.gc
    .rgw.buckets
    .rgw.buckets.index
    .rgw.buckets.extra
    .log
    .intent-log
    .usage
    .users
    .users.email
    .users.swift
    .users.uid
               
    • vim create_pool.sh
    #!/bin/bash
    
    PG_NUM=250
    PGP_NUM=250
    SIZE=3
    
    for i in `cat ./pool`
            do
            ceph osd pool create $i $PG_NUM
            ceph osd pool set $i size $SIZE
            done
    
    for i in `cat ./pool`
            do
            ceph osd pool set $i pgp_num $PGP_NUM
            done
               
  • 删除rdb池
ceph osd pool delete rbd rbd --yes-i-really-really-mean-it
           
  • 腳本vim delete_poo.sh
#!/bin/bash

PG_NUM=250
PGP_NUM=250
SIZE=3

for i in `cat ./pool`
        do
        ceph osd pool delete $i $i --yes-i-really-really-mean-it
        done

           
  • 測試是否能夠通路ceph 叢集
    ceph -s -k /var/lib/ceph/radosgw/ceph-rgw.node1/keyring --name client.rgw.node1
               
    • 檔案keyring是ceph權限,本賬戶沒有該操作權限需要拷貝出來
    cp /var/lib/ceph/radosgw/ceph-rgw.node1/keyring .
    ceph -s -k keyring --name client.rgw.node1
               

5.3 使用 S3 API 通路 Ceph 對象存儲

  1. 建立 radosgw 使用者
radosgw-admin user create --uid=radosgw --display-name=“radosgw"
           

-注意:請把 access_key 和 secret_key 儲存下來 ,如果忘記可使用:

radosgw-admin user info --uid … -k … --name …
           
  1. 安裝 s3cmd 用戶端
yum install s3cmd -y
           
  1. 将會在家目錄下建立 .s3cfg 檔案 , location 必須使用 US , 不使用 https,
s3cmd --configure
           
  1. 編輯 .s3cfg 檔案,修改 host_base 和 host_bucket
……
host_base = node1:7480
host_bucket = %(bucket).node1:7480
……
# 建立桶并放入檔案
s3cmd mb s3://first-bucket
s3cmd ls
s3cmd put /etc/hosts s3://first-bucket
s3cmd ls s3://first-bucket
           
  1. 其它端連接配接請參考下面連結對應的部落格
  • https://www.cnblogs.com/bugutian/p/9817347.html

六、 Ceph 檔案存儲

6.1 部署 Ceph 檔案存儲

Ceph檔案系統提供了任何大小的符合posix标準的分布式檔案系統,它使用Ceph RADOS存儲資料。要實作Ceph檔案系統,您需要一個正在運作的Ceph存儲叢集和至少一個Ceph中繼資料伺服器(MDS)來管理其中繼資料并使其與資料分離,這有助于降低複雜性和提高可靠性。下圖描述了Ceph FS的架構視圖及其接口:

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

libcephfs庫在支援其多個客戶機實作方面發揮着重要作用。它具有本機Linux核心驅動程式支援,是以客戶機可以使用本機檔案系統安裝,例如,使用mount指令。它與SAMBA緊密內建,支援CIFS和SMB。Ceph FS使用cephfuse子產品擴充到使用者空間(FUSE)中的檔案系統。它還允許使用libcephfs庫與RADOS叢集進行直接的應用程式互動。作為HadoopHDFS的替代品,Ceph FS越來越受歡迎。

隻有Ceph FS才需要Ceph MDS;其他存儲方法的塊和基于對象的存儲不需要MDS服務。Ceph MDS作為一個守護程序運作,它允許客戶機挂載任意大小的POSIX檔案系統。MDS不直接向用戶端提供任何資料;資料服務僅由OSD完成。

6.2 部署 cephfs(node1)

ceph-deploy mds create node2
# 注意:檢視輸出,應該能看到執行了哪些指令,以及生成的keyring
           
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 64
ceph fs new cephfs cephfs_metadata cephfs_data
ceph mds stat
ceph osd pool ls
ceph fs ls
           

6.3 建立使用者(可選,因為部署時,已經生成)(node1)

ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow r, allow rw path=/' osd 'allow rw pool=cephfs_data' -o ceph.client.cephfs.keyring
scp ceph.client.cephfs.keyring node4:/etc/ceph/
           

6.4 通過核心驅動和FUSE用戶端挂載Ceph FS

  • 在Linux核心2.6.34和以後的版本中添加了對Ceph的本機支援。
  1. 建立挂載目錄
mkdir /mnt/cephfs
           
  1. 挂載
ceph auth get-key client.cephfs // 在 ceph fs伺服器上執行,擷取key
mount -t ceph node2:6789:/ /mnt/cephfs -o name=cephfs,secret=AQBKxjZdRsrSEhAAN+u/cMBBGRq/LjwItS2GLQ==
注: name=cephfs和client.cephfs使用者名稱對應
[client.cephfs]
        key = AQBKxjZdRsrSEhAAN+u/cMBBGRq/LjwItS2GLQ==

           
df -h /mnt/cephfs/
--------------------
Filesystem            Size  Used Avail Use% Mounted on
192.168.38.16:6789:/  1.8G     0  1.8G   0% /mnt/cephfs
           
  • 使用檔案key挂載
echo …secret…> /etc/ceph/cephfskey // 把 key儲存起來
echo AQBKxjZdRsrSEhAAN+u/cMBBGRq/LjwItS2GLQ== >/etc/ceph/cephfskey
-------------
mount -t ceph node2:6789:/ /mnt/cephfs -o name=cephfs,secretfile= /etc/ceph/cephfskey // name為使用者名
           
  1. 開機自啟
echo "node2:6789:/ /mnt/ceph_fs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0" >>/etc/fstab
# 注:_netdev表示網絡啟動後才能挂載
           
  1. 校驗
umount /mnt/cephfs
mount /mnt/cephfs
dd if=/dev/zero of=/mnt/cephfs/file1 bs=1M count=1024
           
  1. Ceph檔案系統由LINUX核心本地支援;但是,如果您的主機在較低的核心版本上運作,或者您有任何應用程式依賴項,您總是可以使用FUSE用戶端讓Ceph挂載Ceph FS。
  • 安裝軟體包
rpm -qa |grep -i ceph-fuse
yum -y install ceph-fuse
           
  • 挂載
ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m node2:6789 /mnt/cephfs
           
  • 開機挂載
echo "id=cephfs,keyring=/etc/ceph/ceph.client.cephfs.keyring /mnt/cephfs fuse.ceph defaults 0 0 _netdev" >> /etc/fstab
           

注:因為 keyring檔案包含了使用者名,是以fstab不需要指定用了

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署

6.5 将Ceph FS 導出為NFS伺服器

網絡檔案系統(Network Filesystem, NFS)是最流行的可共享檔案系統協定之一,每個基于unix的系統都可以使用它。不了解Ceph FS類型的基于unix的客戶機仍然可以使用NFS通路Ceph檔案系統。要做到這一點,我們需要一個NFS伺服器,它可以作為NFS共享重新導出Ceph FS。NFS-ganesha是一個在使用者空間中運作的NFS伺服器,使用libcephfs支援Ceph FS檔案系統抽象層(FSAL)。

  1. 安裝軟體
yum install -y nfs-utils nfs-ganesha
           
  1. 啟動 NFS所需的rpc服務
systemctl start rpcbind; systemctl enable rpcbind
systemctl status rpc-statd.service
           
  • 檢視狀态
systemctl status rpcbind
           
  1. 修改配置檔案
vi /etc/ganesha/ganesha.conf
           
ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署
  1. 通過提供Ganesha.conf 啟動NFS Ganesha守護程序
ganesha.nfsd -f /etc/ganesha.conf -L /var/log/ganesha.log -N NIV_DEBUG
showmount -e
           
  1. 用戶端挂載
yum install -y nfs-utils
mkdir /mnt/cephnfs
mount -o rw,noatime node2:/ /mnt/cephnfs
           

更多内容請關注微信公衆号:

ceph元件介紹及基于ceph-deploy部署ceph元件介紹及基于ceph-deploy部署