CEPH分散式儲存搭建(物件、塊、檔案三大儲存)
ceph version 12.2.12 luminous
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo
手動yum epel 源
開始叢集環境配置前建議最好關閉每個節點的selinux 和 firewalld 服務
sed -i “/^SELINUX/s/enforcing/disabled/” /etc/selinux/config
setenforce 0
切換到root賬戶下,安裝ntpdata時間同步伺服器
yum install ntpdate -y
crontab -e
\* * * * * /usr/sbin/ntpdate ntp.aliyun.com &> /dev/null
ntpdate ntp.aliyun.com
檢查各個節點的repo源是否正常
#yum repolist
在各個節點上建立使用者ceph並賦予許可權
useradd ceph
echo '111111' | passwd --stdin ceph
echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph
配置主機名解析,使用/etc/hosts, 例如:
# 配置sudo不需要tty
#sed -i 's/Default requiretty/#Default requiretty/' /etc/sudoers
# 配置免金鑰登入 username為你建立的ceph,也就是賬戶名
#su - ceph
#export username=ceph ssh-keygen
#ssh-copy-id ${username}@node1 ssh-copy-id ${username}node2 ssh-copy-id ${username}@node3
# 主節點安裝 ceph-deploy
$sudo yum install -y ceph-deploy python-pip
#在ceph賬戶下建立my-cluster目錄,用以存放後面收集到的金鑰檔案和叢集配置檔案
$mkdir my-cluster
$cd my-cluster
# 部署節點
$ceph-deploy new node1 node2 node3
# 編輯 ceph.conf 配置檔案
$cat ceph.conf [global]
.....
public network = 10.1.10.0/24
cluster network = 192.168.100.0/24
# 安裝 ceph包,替代 ceph-deploy install node1 node2 node3,不過下面的命令需要在每臺node上安裝 yum
#install -y ceph ceph-radosgw
在管理節點以ceph使用者執行
$ cd ceph-cluster
#這個步驟是為了防止在生成keying檔案資訊時會自動將你的yum源換成更改為aliyun之前的,科學上網也是沒用
$ ceph-deploy install --no-adjust-repos node1 node2 node3
# 配置初始 monitor(s)、並收集所有金鑰: ceph-deploy mon create-initial
ls -l *.keyring
#這一步完成之後,my-cluster 目錄下就會出現收集到的金鑰檔案
# 把配置資訊拷貝到各節點
$ceph-deploy admin node1 node2 node3
#每次更改ceph的配置檔案,都可以用這個命令推送到所有節點上,使用—overwrite-conf config push 引數命令時,建議提前備份好配置檔案,防止覆蓋過程中出現配置檔案復原的問題
#配置osd,列出各個節點上所有可以用來作為osd裝置的磁碟
$ceph-deploy disk list ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
#要以ceph使用者在~/my-cluster/目錄下執行s
#清空osd節點上用來作為osd裝置的磁碟,此步驟相當於格式化磁碟
$ceph-deploy disk zap node1 /dev/sdb /dev/sdc
$ceph-deploy disk zap node2 /dev/sdb /dev/sdc
$ceph-deploy disk zap node3 /dev/sdb /dev/sdc
#建立OSD
ceph-deploy osd create node1 --data /dev/sdb
ceph-deploy osd create node2 --data /dev/sdb
ceph-deploy osd create node3 --data /dev/sdb
ceph-deploy osd create node1 --data /dev/sdc
ceph-deploy osd create node2 --data /dev/sdc
ceph-deploy osd create node3 --data /dev/sdc
#此時叢集配置基本完成ceph-s 檢視狀態失敗時,可以在各個節點的/etc/ceph/ 目錄下檢視配置檔案所屬使用者和使用者組是否為ceph,如果不是可以在各個節點以root執行
setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring
#ceph.client.admin.keyring檔案是 ceph命令列 所需要使用的keyring檔案
#不管哪個節點,只要需要使用ceph使用者執行命令列工具,這個檔案就必須要讓ceph使用者擁有訪問許可權,就必須執行這一步
#檢視叢集狀態,到這一步叢集基本上就已經能用了
#ceph –s
#L版之後需要部署mgr,可以啟動dashboard UI監控模組,更直觀的檢視叢集狀態
$ceph-deploy mgr create node1 node2 node3
#開啟dashboard模組,用於UI檢視
$ceph mgr module enable dashabord
#瀏覽器輸入地址後加上預設埠號7000
任何普通的Linux主機(RHEL或基於debian的)都可以充當Ceph客戶機。客戶端通過網路與Ceph儲存叢集互動以儲存或檢 索使用者資料。Ceph RBD支援已經新增到Linux主線核心中,從2.6.34和以後的版本開始。
# 建立 ceph 塊客戶端使用者名稱和認證金鑰
$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
//scp ceph.client.rbd.keyring /etc/ceph/ceph.conf ceph-client:/etc/ceph/ceph.client.rbd.keyring (應該是copy不過去的,許可權問題)
#客戶端安裝完了以後,再手動把金鑰檔案拷貝到客戶端 也就是在客戶端下vim 一個檔案並寫入金鑰
還需要將配置檔案ceph.conf也手動copy過去
# 安裝ceph客戶端
#wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph- deploy/ceph.repo
#客戶端安裝ceph,需手動把主機生成的client.rbd.keyring 金鑰檔案複製到客戶端
#yum -y install ceph
#cat /etc/ceph/ceph.client.rbd.keyring
#ceph -s --name client.rbd
客戶端建立塊裝置及對映
( 1) 建立塊裝置
預設建立塊裝置,會直接建立在 rbd 池中,但使用 deploy 安裝後,該rbd池並沒有建立
# 建立池和塊
$ceph osd lspools # 檢視叢集儲存池
$ceph osd pool create rbd 50 # 50 為 place group 數量,由於我們後續測試,也需要更多的pg,所以這裡設定為50
計算PG數
對於一個在生產環境中的 ceph分散式儲存 叢集中,提前根據需求和配置規劃好 PG 是非常重要的,隨
著使用時間的積累和 ceph 叢集的不斷擴充套件我們跟需要 ceph叢集的效能能夠不斷的跟進
計算 Ceph 叢集的PG 數的公式如下:
PG 總數 = (OSD 總數 * 100)/ 最大副本數
結果必須舍入到最接近2的N次冪的值。比如如果ceph 叢集有160個OSD 且副本數是3,這樣根據公
式計算得到的PG 總數是 5333.3,因此舍入到這個值到最近的 2 的N次冪的結果就是8192個PG,再根
據你所建立的儲存池規劃,所有的 pool 的PG數加起來是不能超過叢集中 PG 的總量的。
我們還應該計算 Ceph叢集中每一個POOL (池)的PG 總數。計算公式如下 :
POOL PG_NUM | PG 總數 = ((OSD 總數 * 100)/ 最大副本數)/ POOL 數
同樣使用前面的例子:OSD 總數是160,副本數是3,POOL(池)總數是3。根據上面這個公式,計
算得到每個池的 PG 總數應該是1777.7,最後舍入到2 的N次冪得到結果為每個池 2048 個PG。
平衡每個池中的PG 數和每個 OSD 中的PG 數對於降低 OSD 的方差、避免速度緩慢的恢復程式是相
當重要的。
# 客戶端建立 塊裝置
$rbd create rbd1 --size 10240 --name client.rbd
$rbd ls --name client.rbd
$rbd ls -p rbd --name client.rbd
$rbd list --name client.rbd
對映塊裝置
$rbd --image rbd1 info --name client.rbd #此時對映到客戶端,應該會報錯
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 rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
2) 建立RBD映象時,只啟用 分層特性。
$rbd create rbd2 --size 10240 --image-feature layering --name client.rbd
3)ceph.conf 配置檔案中禁用
rbd_default_features = 1
# 我們這裡動態禁用
$rbd feature disable rbd1 exclusive-lock object-map fast-diff deep-flatten --name client.rbd
#這一步建立出對應的塊對映檔案 /dev/rbd0
$rbd map --image rbd1 --name client.rbd rbd showmapped --name client.rbd
#建立檔案系統並掛載
#fdisk -l /dev/rbd0
#mkfs.xfs /dev/rbd0
#mkdir /mnt/ceph-disk1
#mount /dev/rbd0 /mnt/ceph-disk1 df -h /mnt/ceph-disk1
# 寫入資料測試
#dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M
# 做成服務,開機自動掛載
#wget -O /usr/local/bin/rbd-mount https://raw.githubusercontent.com/aishangwei/ceph-demo/master/client/rbd-mount chmod +x /usr/local/bin/rbd-mount
#wget -O /etc/systemd/system/rbd-mount.service https://raw.githubusercontent.com/aishangwei/ceph- demo/master/client/rbd-mount.service
#systemctl daemon-reload
#systemctl enable rbd-mount.service
#reboot -f
#df -h
# 安裝ceph-radosgw
#yum -y install ceph-radosgw
# 部署
$ceph-deploy rgw create node1 node2 node3
# 配置80埠
#vi /etc/ceph/ceph.conf
……. [client.rgw.node1]
rgw_frontends = "civetweb port=80"
$sudo systemctl restart ceph-radosgw@rgw.c720183.service
](mailto:ceph-radosgw@rgw.c720183.service)
*#你也可以使用預設的7480埠*
# 建立池
#wget https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/pool
#wget https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/create_pool.sh
$chmod +x create_pool.sh
$./create_pool.sh
# 測試是否能夠訪問 ceph 叢集
$sudo cp
$ceph -s -k /var/lib/ceph/radosgw/ceph-rgw.node3/keyring --name client.rgw.node3
使用 S3 API 訪問 Ceph 物件儲存
# 建立 radosgw 使用者
#radosgw-admin user create --uid=radosgw --display-name=“radosgw"
注意:請把 access_key 和 secret_key 儲存下來 ,如果忘記可使用:radosgw-admin user info --uid … -k … --name …
# 安裝 s3cmd 客戶端
#yum install s3cmd -y
# 將會在家目錄下建立 .s3cfg 檔案 , location 必須使用 US , 不使用 https, s3cmd --configure
# 編輯 .s3cfg 檔案,修改 host_base 和 host_bucket
#vi .s3cfg
……
host_base = node3.hongyuan.com:7480
host_bucket = %(bucket).node3.hongyuan.com:7480
……
# 建立桶並放入檔案 s3cmd mb s3://first-bucket s3cmd ls
#s3cmd put /etc/hosts s3://first-bucket s3cmd ls s3://first-bucket
# 部署 cephfs
$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
# 建立使用者(可選,因為部署時,已經生成)
$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 ceph-client:/etc/ceph/
通過核心驅動和FUSE客戶端掛載 Ceph FS
在Linux核心2.6.34和以後的版本中新增了對Ceph的本機支援。
# 建立掛載目錄
#mkdir /mnt/cephfs
# 掛載
#ceph auth get-key client.cephfs // 在 ceph fs伺服器上執行,獲取 key
#mount -t ceph node2:6789:/ /mnt/cephfs -o name=cephfs,secret=…… echo …*secret*…> /etc/ceph/cephfskey // 把 key儲存起來
#mount -t ceph node2:6789:/ /mnt/cephfs -o name=cephfs,secretfile= /etc/ceph/cephfskey #name 為使用者名稱 cephfs
#echo "c720182:6789:/ /mnt/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0" >>
#/etc/fstab
# 校驗
#umount /mnt/cephfs
#mount /mnt/cephfs
#dd if=/dev/zero of=/mnt/cephfs/file1 bs=1M count=1024
Ceph檔案系統由LINUX核心本地支援;但是,如果您的主機在較低的核心版本上執行,或者您有任何應用程式依賴項,
您總是可以使用FUSE客戶端讓Ceph掛載Ceph FS。
# 安裝軟體包
#rpm -qa |grep -i ceph-fuse // yum -y intall 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不需要指定用了
將CephFS 匯出為NFS伺服器
網路檔案系統(Network Filesystem, NFS)是最流行的可共享檔案系統協議之一,每個基於unix的系統都可以使用它。 不理解Ceph FS型別的基於unix的客戶機仍然可以使用NFS訪問Ceph檔案系統。要做到這一點,我們需要一個NFS服 務器,它可以作為NFS共享重新匯出Ceph FS。NFS- ganesha是一個在使用者空間中執行的NFS伺服器,使用libcephfs支 持Ceph FS檔案系統抽象層(FSAL)。
# 安裝軟體
#yum install -y nfs-utils nfs-ganesha
##如果你的aliyun源中沒有nfs-ganesha package 時,需要手動編譯nfs-ganesha 原始碼包
#可參照下面的連結
https://editor.csdn.net/md/?articleId=103496886
# 啟動 NFS所需的rpc 服務
#systemctl start rpcbind; systemctl enable rpcbind systemctl status rpc-statd.service
# 修改配置檔案
#vi /etc/ganesha/ganesha.conf
#通過提供Ganesha.conf 啟動NFS Ganesha守護程式
#ganesha.nfsd -f /etc/ganesha.conf -L /var/log/ganesha.log -N NIV_DEBUG
#showmount -e
# 客戶端掛載
#yum install -y nfs-utils mkdir /mnt/cephnfs
#mount -o rw,noatime node2:/ /mnt/cephnfs
相關文章
- 分散式儲存ceph 物件儲存配置zone同步分散式物件
- 塊儲存 檔案儲存 物件儲存物件
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- docker筆記39-ceph分散式儲存的搭建Docker筆記分散式
- DAOS 分散式非同步物件儲存|儲存模型分散式非同步物件模型
- Ceph分散式儲存技術解讀分散式
- 分散式儲存ceph之快速安裝分散式
- Ceph分散式儲存-運維操作筆記分散式運維筆記
- 物件儲存、檔案儲存、塊儲存這三者之間有什麼區別?物件
- python如何分散式儲存檔案?Python分散式
- 分散式儲存Ceph之PG狀態詳解分散式
- Ceph分散式儲存叢集-硬體選擇分散式
- 搭建FastDFS分散式儲存環境AST分散式
- 雲端儲存及其分散式檔案系統分散式
- 分散式檔案儲存FastDFS(三)FastDFS配置分散式AST
- Ceph分散式儲存-原理介紹及簡單部署分散式
- 資料儲存--檔案儲存
- Redis 分散式儲存Redis分散式
- HDFS分散式儲存分散式
- 分散式儲存概述分散式
- 海量圖片儲存,杉巖分散式物件儲存輕鬆應對分散式物件
- Ceph RBD CephFS 儲存
- Ceph儲存池管理
- 在 CentOS 7.1 上安裝分散式儲存系統 CephCentOS分散式
- 分散式檔案儲存FastDFS(七)FastDFS配置檔案詳解分散式AST
- DAOS 分散式非同步物件儲存|故障模型分散式非同步物件模型
- DAOS 分散式非同步物件儲存|安全模型分散式非同步物件模型
- 杉巖:淺談物件儲存和塊儲存區別物件
- 分散式檔案儲存庫MinIO可還行?分散式
- FastDFS+Nginx搭建分散式圖片儲存ASTNginx分散式
- 檔案儲存
- 基於Ceph物件儲存構建實踐物件
- Gartner:浪潮儲存進入分散式儲存前三分散式
- 儲存—物件儲存_Minio物件
- CEPH-4:ceph RadowGW物件儲存功能詳解物件
- 滴滴Ceph分散式儲存系統優化之鎖優化分散式優化
- Flutter持久化儲存之檔案儲存Flutter持久化
- 分散式檔案系統和物件儲存魔力象限,右上角都有誰?分散式物件