CEPH分散式儲存搭建(物件、塊、檔案三大儲存)

jerry-89發表於2020-12-16

 

 

 

在這裡插入圖片描述

叢集配置資訊:

在這裡插入圖片描述

安裝的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

Ceph叢集搭建

切換到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
在這裡插入圖片描述

ceph叢集搭建—塊儲存

任何普通的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叢集搭建是—物件儲存

# 安裝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

ceph檔案儲存

# 部署 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

相關文章