ceph組件介紹及基於ceph-deploy部署

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 架構

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守護進程一起運行,
    爲外部監視和管理系統提供額外的監視和接口。

在這裏插入圖片描述

2.1 Ceph部署架構

三、ceph-deploy部署ceph集羣

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  liuzp@node1
#ssh-copy-id  liuzp@node2
#ssh-copy-id  liuzp@node3

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 塊存儲

4.1 安裝 Ceph 塊存儲客戶端

Ceph塊設備,以前稱爲RADOS塊設備,爲客戶機提供可靠的、分佈式的和高性能的塊存儲磁盤。RADOS塊設備利用librbd庫並以順序的形式在Ceph集羣中的多個osd上存儲數據塊。RBD是由Ceph的RADOS層支持的,因此每個塊設備都分佈在多個Ceph節點上,提供了高性能和優異的可靠性。RBD有Linux內核的本地支持,這意味着RBD驅動程序從過去幾年就與Linux內核集成得很好。除了可靠性和性能之外,RBD還提供了企業特性,例如完整和增量快照、瘦配置、寫時複製克隆、動態調整大小等等。RBD還支持內存緩存,這大大提高了其性能:

在這裏插入圖片描述

任何普通的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
  • 寫入數據測試
[root@node4 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
---------------
[root@node4 ceph]# df -h /mnt/ceph-disk1
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0      1014M  133M  882M  14% /mnt/ceph-disk1
--------------
[root@node4 ceph]# ll /mnt/ceph-disk1/
total 102400
-rw-r--r--. 1 root root 104857600 Jul 22 22:32 file1
--------------
[root@node4 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
    
    • 卸載掛載
    [root@node4 ceph]# umount /mnt/ceph-disk1/
    [root@node4 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對象存儲還具有多站點功能,即爲災難恢復提供解決方案

對於生產環境,建議您在物理專用機器上配置RGW。但是,如果您的對象存儲工作負載不太大,您可以考慮將任何監視器機器作爲RGW節點使用。RGW是一個獨立的服務,它從外部連接到Ceph集羣,並向客戶端提供對象存儲訪問。在生產環境中,建議您運行多個RGW實例,由負載均衡器屏蔽,如下圖所示:

在這裏插入圖片描述

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的架構視圖及其接口:

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不需要指定用了
在這裏插入圖片描述

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

  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

更多內容請關注微信公衆號:
在這裏插入圖片描述

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