ceph 塊存儲
次文檔是和上一篇ceph-deploy部署ceph文檔鏈接寫的,環境都是一個環境
1 Ceph 客戶端配置
1.1 安裝ceph包
1.1.1 檢查內核是否支撐RBC(10.0.23.130 用于安裝客戶端)

1.1.2 安裝ceph客戶端
Cat /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
priority=0
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
priority=0
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[root@k8s-master ~]# yum install -y ceph #裝ceph為的是裝rbd命令
1.1.3 創建用戶(在ceph服務端創建10.0.23.133)
1.1.3.1 創建ceph塊客戶端用戶名和認證密鑰
[cephadmin@ceph-1 my-cluster]$ 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

1.1.4 客戶端配置
1.1.4.1.1 拷貝密鑰文件和配置文件到客戶端
[cephadmin@ceph-1 my-cluster]$ scp ceph.client.rbd.keyring /etc/ceph/ceph.conf root@10.0.23.130:/etc/ceph
到客戶端10.0.23.130上查看:

在客戶端執行ceph –s報錯需要執行用戶名
[root@k8s-master ~]# ceph -s --name client.rbd

1.2 創建塊設備及客戶端映射
1.2.1 創建塊設備(ceph server上操作)
默認創建塊設備,會直接創建在rbd 池中,但使用deploy安裝后,該rbd池并沒有創建。

1.2.2 創建塊設備默認池(ceph server上操作)
$ ceph osd lspools //查看集群存儲池
$ ceph osd pool create rbd 64 #創建 名為rbd的池 指定pg為64

確定pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值(總的pg):
? 少于5個OSD 時可把pg_num設置為 128
? OSD 數量在5 到10個時,可把 pg_num 設置為512
? OSD 數量在10到 50個時,可把pg_num 設置為4096
? OSD 數量大于50時,你得理解權衡方法、以及如何自己計算pg_num 取值
1.2.3 創建塊設備(客戶端操作)
可以在服務端創建也可以在客戶端創建,已經給客戶端權限,我這里在客戶端操作
rbd create rbd1 --size 2048 --name client.rbd #創建大小3G的 rbd1塊設備

查看創建的塊設備
rbd ls --name client.rbd

也可以指定池查看
rbd ls -p rbd -n client.rbd

列表形式查看
rbd list -n client.rbd

查看塊設備的詳細信息
rbd --image rbd1 info --name client.rbd

1.2.4 映射塊設備(客戶端操作)
1.2.4.1 映射介紹
映射到客戶端,會報錯
rbd map --image rbd1 --name client.rbd

- layering: 分層支持
- exclusive-lock: 排它鎖定支持
- object-map: 對象映射支持(需要排它鎖定(exclusive-lock))
- deep-flatten: 快照扁平化支持(snapshot flatten support)
- fast-diff: 快速差異計算(需要 object-map)
使用krbd(內核rbd)的客戶端進行快速diff計算(需要對象映射),我們將無法在CentOS內核3.10上 映射塊設備映像,因為該內核不支持對象映射(object-map)、深平(deep-flatten)和快速diff(fastdiff)(在內核4.9中引入了支持)。為了解決這個問題,我們將禁用不支持的特性,有幾個選項可以 做到這一點
禁用的三種方法:
2 動態禁用
rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
2 創建RBD鏡像時,之啟用分層特性
Rbd create rbd1 –size 2048 –image-feature Layering –name client.rbd
2 Ceph配置文件中禁用
Rbd_default_reatures = 1
因我們已經創建了池 rbd1 所以使用動態禁用
1.2.4.2 動態禁用塊設備的特性
[root@k8s-master ~]# rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
再次映射,看到映射的設備
[root@k8s-master ~]# rbd map --image rbd1 --name client.rbd

查看映射關系
[root@k8s-master ~]# rbd showmapped --name client.rbd


1.2.4.3 創建文件系統并掛載
格式化:
[root@k8s-master ~]# mkfs.xfs /dev/rbd0

創建掛載點:
[root@k8s-master ~]# mkdir /ceph-dsik1
Mount掛載:
[root@k8s-master ~]# mkdir /ceph-dsik1
[root@k8s-master ~]# mount /dev/rbd0 /ceph-dsik1

寫數據測試
[root@k8s-master ~]# dd if=/dev/zero of=/ceph-dsik1/testfiel count=100 bs=1M

1.2.4.4 做成服務,開機自動掛載
vim /usr/local/bin/rbd-mount
#!/bin/bash
#池名稱存儲塊設備映射的位置
#!/bin/bash
#池名稱存儲塊設備映射的位置
export poolname=rbd
#磁盤映射名稱
export rbdimage=rbd1
#mount directory
export mountpoint=/ceph-dsik1
#image mount / umount 和pool作為參數從systemd服務傳遞
if [ "$1" == "m" ];then
modprobe rbd
rbd feature disable $rbdimage object-map deep-flatten fast-diff
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/$rbdname
fi
~
[root@k8s-master ceph-dsik1]# chmod +x /usr/local/bin/rbd-mount
配置服務腳本
[root@k8s-master ceph-dsik1]# vim /usr/lib/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/rdb-mount m
ExecStop=/usr/local/bin/rdb-mount u
[Install]
[root@k8s-master ceph-dsik1]# systemctl daemon-reload
[root@k8s-master ceph-dsik1]# systemctl enable rdb-mount.service
注意: 先測試一下服務是否可用,不要冒然的重啟主機測試

浙公網安備 33010602011771號