CentOS7安裝OpenStack-11.部署Ceph分布式存儲架構


11.0、概述

  • 隨着OpenStack日漸成為開源雲計算的標准軟件棧,Ceph也已經成為OpenStack的首選后端存儲。Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統。

  • ceph官方文檔:http://docs.ceph.org.cn/

  • ceph中文開源社區:http://ceph.org.cn/

  • Ceph是一個開源的分布式文件系統。因為它還支持塊存儲、對象存儲,所以很自然的被用做雲計算框架openstack或cloudstack整個存儲后端。當然也可以單獨作為存儲,例如部署一套集群作為對象存儲、SAN存儲、NAS存儲等。

1)ceph支持

  1. 對象存儲:即radosgw,兼容S3接口。通過rest api上傳、下載文件。

  2. 文件系統:posix接口。可以將ceph集群看做一個共享文件系統掛載到本地。

  3. 塊存儲:即rbd。有kernel rbd和librbd兩種使用方式。支持快照、克隆。相當於一塊硬盤掛到本地,用法和用途和硬盤一樣。比如在OpenStack項目里,Ceph的塊設備存儲可以對接OpenStack的后端存儲

2)Ceph相比其它分布式存儲有哪些優點?

  1. 統一存儲:雖然ceph底層是一個分布式文件系統,但由於在上層開發了支持對象和塊的接口。所以在開源存儲軟件中,能夠一統江湖。至於能不能千秋萬代,就不知了。

  2. 高擴展性:擴容方便、容量大。能夠管理上千台服務器、EB級的容量。

  3. 可靠性強:支持多份強一致性副本,EC。副本能夠垮主機、機架、機房、數據中心存放。所以安全可靠。存儲節點可以自管理、自動修復。無單點故障,容錯性強。

  4. 高性能:因為是多個副本,因此在讀寫操作時候能夠做到高度並行化。理論上,節點越多,整個集群的IOPS和吞吐量越高。另外一點ceph客戶端讀寫數據直接與存儲設備(osd) 交互。

 3)Ceph各組件介紹

  • 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 存儲集群造成負擔的前提下,執行諸如 ls、find 等基本命令。

11.1、Ceph實驗集群部署

1) 禁用selinux, 關閉防火牆

# 關閉SELinux
setenforce  0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

systemctl stop firewalld.service
systemctl disable firewalld.service

2)主機准備(編輯hosts文件)

controller   192.168.182.143  admin,mon   # 作為管理節點和監控節點
compute1    192.168.182.142  osd,mds
compute2    192.168.182.128  osd,mds

# controller作管理. osd. mon節點

3)2台服務器都增加一塊硬盤實驗(compute1,compute2)

如果看不到新增的磁盤設備,則重啟虛擬機;或者執行下面命令重新掃描一下磁盤,注意查看/sys/class/scsi_host/目錄下有幾個host文件
重新掃描SCSI總線添加設備

echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan

注意,如果掃描這三個文件不成,就全部掃描一遍

cat /usr/local/src/test.sh

#!/usr/bin/bash

scsisum=`ll /sys/class/scsi_host/host*|wc -l`

for ((i=0;i<${scsisum};i++))
do
    echo "- - -" > /sys/class/scsi_host/host${i}/scan
done

#echo "- - -" > /sys/class/scsi_host/host0/scan 這三個值代表通道,SCSI目標ID和LUN。破折號充當通配符,意思是“重新掃描一切”

4)SSH免密碼登錄

# 在管理節點使用ssh-keygen 生成ssh keys 發布到各節點

# controller
ssh-keygen ssh-copy-id controller ssh-copy-id compute1 ssh-copy-id compute2

5)配置時間同步

# 所有節點安裝
yum install chrony -y

# 編輯配置文件vim /etc/chrony.conf
# ========controller======== # 去掉原有的server
server  ntp6.aliyun.com iburst
allow 192.168.182.0/24 # 重啟
systemctl restart chronyd.service
systemctl status chronyd.service
systemctl enable chronyd.service
# 設置時區,同步時間
timedatectl set-timezone Asia/Shanghai
chronyc sources
timedatectl status

# ========compute1======== # 去掉原有的server
server  192.168.182.143 iburst

# 重啟
systemctl restart chronyd.service
systemctl status chronyd.service
systemctl enable chronyd.service
# 設置時區,同步時間
timedatectl set-timezone Asia/Shanghai
chronyc sources
timedatectl status

# ========compute2======== # 去掉原有的server
server  192.168.182.143 iburst

# 重啟
systemctl restart chronyd.service
systemctl status chronyd.service
systemctl enable chronyd.service
# 設置時區,同步時間
timedatectl set-timezone Asia/Shanghai
chronyc sources
timedatectl status

5)管理節點安裝ceph-deploy工具

# 增加 yum配置文件(各個節點都需要增加yum源

wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo

或者

cat << EOF > /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
EOF

# 更新軟件源並安裝ceph-deploy 管理工具

yum clean all && yum makecache
yum -y install ceph-deploy

6)創建monitor服務

# controller
mkdir /etc/ceph && cd /etc/ceph

# 創建監控節點

ceph-deploy new controller

# Ceph配置文件、一個monitor密鑰環和一個日志文件

7)修改副本數

# 配置文件的默認副本數從3改成2,這樣只有兩個osd也能達到active+clean狀態,把下面這行加入到[global]段(可選配置

$ vim /etc/ceph/ceph.conf
[global]
fsid = 92f5581d-79d2-4c9f-a523-4965eedc846b
mon_initial_members = controller
mon_host = 192.168.182.143
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2

# 在所有節點安裝ceph

ceph-deploy install --release mimic controller compute1 compute2

#  創建monitor、配置admin key到各個節點

# 完成后,在當前目錄下會生成密鑰 
ceph-deploy mon create-initial 
ls
# 配置admin key 到各個節點
ceph-deploy admin compute1 compute2

8)部署osd服務

# 創建osd

# controller
ceph-deploy osd create compute1 --data /dev/sdb
ceph-deploy osd create compute2 --data /dev/sdb

# 查看狀態

ceph-deploy osd list compute1 compute2

9)統一配置

# 配置admin key 到各個節點

ceph-deploy admin controller compute1 compute2

# monitor上安裝mgr

ceph-deploy mgr create controller

# 查看osd狀態

ceph status
ceph health
ceph -s

10)部署mds服務

ceph-deploy mds create compute1 compute2

# 查看狀態

ceph mds stat

# 集群狀態

ceph -s

11)創建ceph文件系統

# 查看

ceph fs ls

# 創建存儲池

ceph osd pool create cephfs_data <pg_num> 
ceph osd pool create cephfs_metadata <pg_num>

# 刪除存儲池

ceph osd pool delete  cephfs_data  cephfs_data  --yes-i-really-really-mean-it
ceph osd pool delete  cephfs_metadata   cephfs_metadata   --yes-i-really-really-mean-it

其中:<pg_num> = 128 ,
關於創建存儲池
確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:
  *少於 5 個 OSD 時可把 pg_num 設置為 128
  *OSD 數量在 5 到 10 個時,可把 pg_num 設置為 512
  *OSD 數量在 10 到 50 個時,可把 pg_num 設置為 4096
  *OSD 數量大於 50 時,你得理解權衡方法、以及如何自己計算 pg_num 取值
  *自己計算 pg_num 取值時可借助 pgcalc 工具
隨着 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯著地影響着集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。 

# 常見操作

# 設置存儲池副本數
ceph osd pool get data size
ceph osd pool set data size 3
 
# 打印存儲池列表
ceph osd lspools
 
# 創建 刪除 存儲池 # 創建pool
ceph osd pool create testPool 64 # 重命名pool
ceph osd pool rename testPool amizPool
 
# 獲取pool 副本數
ceph osd pool get amizPool size
# 設置pool 副本數
ceph osd pool set amizPool size 3
 
# 獲取pool pg_num/pgp_num
ceph osd pool get amizPool pg_num
ceph osd pool get amizPool pgp_num
# 設置pool pg_num/pgp_num
ceph osd pool set amizPool pg_num 128
ceph osd pool set amizPool pgp_num 128 # 刪除存儲池
ceph osd pool delete  amizPool  amizPool --yes-i-really-really-mean-it  
 
# 刪除池提示錯誤 # Error EBUSY: pool 'testpool' is in use by CephFS 
ceph mds remove_data_pool testpool
ceph osd pool delete testpool testpool  --yes-i-really-really-mean-it

# 查看存儲池pool 配額 ceph osd pool
get-quota poolroom1

11.1、創建文件系統

# 創建好存儲池后,你就可以用 fs new 命令創建文件系統了,其中:<fs_name> = cephfs  可自定義

ceph fs new <fs_name> cephfs_metadata cephfs_data 

# 查看創建后的cephfs

ceph fs ls

# 查看mds節點狀態,active是活躍的,另1個是處於熱備份的狀態

ceph mds stat

# 刪除Cephfs和mds

# 機器上停止ceph mds服務
systemctl stop ceph-mds.target

# 刪除Cephfs,有mds daemons的Cephfs刪除會報錯,然后去mds daemon機器上停止mds服務即可
ceph fs rm tstfs
Error EINVAL: all MDS daemons must be inactive before removing filesystem
ceph fs rm tstfs2
Error EPERM: this is a DESTRUCTIVE operation and will make data in your filesystem permanentlyinaccessible.  Add --yes-i-really-mean-it if you are sure you wish to continue.
ceph fs rm tstfs2 --yes-i-really-mean-it
ceph fs rm tstfs --yes-i-really-mean-it

# 刪除ceph nonactive mds,mds的id默認從0開始,指定不存在的id並不會報錯
ceph mds rm 0
  mds gid 0 dne
ceph mds rm 1
  mds gid 1 dne
ceph mds rm 2
  mds gid 2 dne

# 刪除Cephfs使用的pool
ceph osd pool delete Cephfs_metadata Cephfs_metadata --yes-i-really-really-mean-it
# Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
# 添加如下內容
$ vim /etc/ceph/ceph.conf
[mon]
mon_allow_pool_delete = true
# 重新啟動服務
systemctl restart ceph-mds.target

A:內核驅動掛載Ceph文件系統

# 創建掛載點

mkdir /opt
  • # 存儲密鑰(如果沒有在管理節點使用ceph-deploy拷貝ceph配置文件)
  • # cat /etc/ceph/ceph.client.admin.keyring
  • # 將key對應的值復制下來保存到文件:/etc/ceph/admin.secret中。
# 掛載
mount -t ceph 192.168.182.143:6789:/ /opt -o name=admin,secretfile=/etc/ceph/admin.secret

# 取消掛載

umount /opt

B:用戶控件掛載Ceph文件系統

# 安裝ceph-fuse

yum install -y ceph-fuse

# 掛載

ceph-fuse -m 192.168.182.143:6789 /opt

# 取消掛載

fusermount -u /opt

ceph在開源社區還是比較熱門的,但是更多的是應用於雲計算的后端存儲。所以大多數在生產環境中使用ceph的公司都會有專門的團隊對ceph進行二次開發,ceph的運維難度也比較大。但是經過合理的優化之后,ceph的性能和穩定性都是值得期待的。

12)關於其他

清理機器上的ceph相關配置:

  • 停止所有進程: stop ceph-all

  • 卸載所有ceph程序:ceph-deploy uninstall [{ceph-node}]

  • 刪除ceph相關的安裝包:ceph-deploy purge {ceph-node} [{ceph-data}]

  • 刪除ceph相關的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]

  • 刪除key:ceph-deploy forgetkeys

  • 卸載ceph-deploy管理:yum -y remove ceph-deploy

~~~部署Ceph分布式存儲完成~~~

 


免責聲明!

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



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