ceph 尋址過程前端
1. file --- object映射, 把file分割成N個相同的對象node
2. object - PG 映射, 利用靜態hash獲得objectID的僞隨機值,在 "位與" mask 上使得object獲取屬於本身的PGpython
3. pg -- osd 映射, 將pg映射到實際的存儲單元osd, RADOS 利用 crush 算法, 由pgid獲得一組n個osd,再由osd daemon 執行映射到本地的object在本地系統中存儲,訪問,數據維護, 這次映射功能直接受到crush map 以及rule應縣個,只有cluster map 和 rule不發生改變時,pg 和osd的映射關係才固定。linux
1. 基本概念nginx
ceph 的組件採用插件的機制,包括後端存儲,KV 數據庫,磁盤管理等。各組件之間能夠靈活的組合。web
基於後端存儲包括 filestore, kvstore,memstore 和 bluestore。 Ceph Luminous 引用了 bluestore 的存儲類型,不依賴文件系統,直接管理物理磁盤,相比filestore 在 io 寫入的時候路徑更短,也避免了二次寫入的問題,性能會更加好。算法
KV 存儲主要包括LevelDB, MemDB 和新的 RocksDB。RocksDB 是 Facebook 基於 LevelDB 開發的 key-value 數據,並對閃存(flash)有更友好的優化。數據庫
RocksDB 本來只基於文件系統的。可是得益於它自己的靈活性,bluestore 實現了一套 RocksDB 的 Env 接口,還在BlueStore 上面實現了一套 BlueFS 的接口與BluestoreEnv 對接。使得 RocksDB 能夠存儲在 BlueStore 上面。bootstrap
BlueStore選擇將DB 和WAL 分區交給BlueFs來使用,此時這兩個分區分別存儲BlueStore後端產生的元數據和日誌文件,這樣整個存儲系統經過元數據對數據的操做效率極高,同時經過日誌事務來維持系統的穩定性,整個系統相對來講穩定性就極高後端
後端存儲使用 bluestore 時,wal 是 RocksDB 的write-ahead log,提早寫的日誌, 至關於以前的 journal 數據,db 是 RocksDB 的metadata 信息。在磁盤選擇原則是 block.wal > block.db > block 若是全部的數據都在單塊盤上,那是沒有必要指定 wal &db 的大小的。 若是 wal & db 是在不一樣的盤上,因爲 wal/db 通常都會分的比較小,是有滿的可能性的。若是滿了,這些數據會遷移到下一個快的盤上(wal - db - main)。因此最少不會由於數據滿了,而形成沒法寫入 使用混合機械和固態硬盤設置時,block.db爲Bluestore建立足夠大的邏輯卷很是重要 。一般,block.db應該具備 儘量大的邏輯卷。 建議block.db尺寸不小於4% block。例如,若是block大小爲1TB,則block.db 不該小於40GB。 若是不使用快速和慢速設備的混合,則不須要爲block.db(或block.wal)建立單獨的邏輯卷。Bluestore將在空間內自動管理這些內容block 使用bluestore 時的 osd 分區 若是是使用的 ceph-disk 管理磁盤,他會創建一個 100MB 的分區,來存放 keyring / whoami 這些信息,這和以前的邏輯是同樣的。 若是使用 ceph-volume 管理磁盤,/var/lib/ceph/osd/ceph-0 分區會從tmpfs 掛載過來(也就是內存)
Ceph Monitor(ceph-mon)維護集羣狀態的映射,包括監視器映射,管理器映射,OSD映射和CRUSH映射。這些映射是Ceph守護進程相互協調所需的關鍵集羣狀態。監視器還負責管理守護進程和客戶端之間的身份驗證。冗餘和高可用性一般至少須要三個監視器。 Ceph Manager守護程序(ceph-mgr)負責跟蹤運行時指標和Ceph集羣的當前狀態,包括存儲利用率,當前性能指標和系統負載。Ceph Manager守護進程還託管基於python的插件來管理和公開Ceph集羣信息,包括基於Web的儀表板和REST API。高可用性一般至少須要兩名經理。 Ceph OSD(對象存儲守護進程 ceph-osd)存儲數據,處理數據複製,恢復,從新平衡,並經過檢查其餘Ceph OSD守護進程來獲取心跳,爲Ceph監視器和管理器提供一些監視信息。冗餘和高可用性一般至少須要3個Ceph OSD。 Ceph元數據服務器(MDS ceph-mds)表明Ceph文件系統存儲元數據(即,Ceph塊設備和Ceph對象存儲不使用MDS)。Ceph的元數據服務器容許POSIX文件系統的用戶來執行基本的命令(如 ls,find沒有放置在一個Ceph存儲集羣的巨大負擔,等等)。
2. 環境準備
三、 統一主機hosts
[root@monitor1 ceph-cluster]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.230.21 monitor1
172.16.230.22 monitor2
172.16.230.23 monitor3
172.16.230.24 node1
172.16.230.25 node2
172.16.230.26 node3
172.16.230.27 node4
172.16.230.28 node5
for i in {22..28}; do scp /etc/hosts root@172.16.230.$i:/etc/; done
4. 時間同步
[root@master1 ~]# crontab -l #Ansible: 每隔5分鐘同步時間服務器 */5 * * * * /usr/sbin/ntpdate 192.168.20.220
5. ssh密碼打通
6. 修改visudo
找到 Defaults requiretty 選項,直接註釋掉,這樣 ceph-deploy 就能夠用以前建立的用戶(建立部署 Ceph 的用戶 )鏈接了。
7. 設置阿里yum源
[Ceph] name=Ceph packages for $basearch baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [ceph-source] name=Ceph source packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc
8. ntp時間同步
*/1 * * * * /usr/sbin/ntpdate ntp5.aliyun.com
9.安裝ceph-deploy包
[root@master1 ~]# yum -y install ceph-deploy
10. 建立配置文件目錄
[root@master1 ~]# mkdir /opt/ceph-cluster
11. 清除集羣
想要從新開始,請執行如下操做以清除配置 ceph-deploy purgedata {ceph-node} [{ceph-node}] ceph-deploy forgetkeys 要清除Ceph包 ceph-deploy purge {ceph-node} [{ceph-node}] 例: ceph-deploy purge monitor1 osd1
12. 建立羣集
[root@master1 ~]# mkdir /opt/ceph-cluster [root@master1 ~]# cd /opt/ceph-cluster [root@master1 ceph-cluster]# ceph-deploy new monitor1 monitor2 monitor3
當前目錄會生成 Ceph配置文件,監視器密鑰密鑰環和新羣集的日誌文件
ceph.conf ceph-eploy-ceph.log ceph.mon.keyring
13. 修改ceph.conf 配置文件
[global] fsid = a5e478b2-f3bf-4fbf-930a-69a6686502d1 mon_initial_members = monitor1, monitor2, monitor3 mon_host = 172.16.230.21,172.16.230.22,172.16.230.23 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd pool default size = 2 # 修改的副本數 public network = 172.16.230.0/24 # 指定public 網絡 cluster network = 1.1.1.0/24 # 指定cluster 網絡
mon_allow_pool_delete = true # 容許刪除pool, 須要重啓monitor
14. 安裝ceph
#全部節點安裝ceph ceph-radosgw
yum -y install ceph ceph-radosgw
15. 初始監視器並收集密鑰
[root@monitor1 ceph-cluster]# ceph-deploy mon create-initial 執行完成後會在/etc/ceph目錄多如下內容 ceph.client.admin.keyring ceph.bootstrap-mgr.keyring ceph.bootstrap-osd.keyring ceph.bootstrap-mds.keyring ceph.bootstrap-rgw.keyring ceph.bootstrap-rbd.keyring ceph.bootstrap-rbd-mirror.keyring
16. 將ceph.client.admin.keyring拷貝到各個節點上
[root@monitor1 ceph-cluster]# ceph-deploy --overwrite-con admin monitor1 monitor2 monitor3 node1 node2 node3 node4 node5
17. 查看osd節點分區狀況
首先看一下塊設備信息 [root@node1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─cl-root 253:0 0 35.1G 0 lvm / └─cl-swap 253:1 0 3.9G 0 lvm [SWAP] sdb 8:16 0 70G 0 disk sdc 8:32 0 50G 0 disk sr0 11:0 1 1024M 0 rom
18.銷燬osd節點硬盤數據
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node1 /dev/sdc [root@monitor1 ceph-cluster]# ceph-deploy disk zap node2 /dev/sdc [root@monitor1 ceph-cluster]# ceph-deploy disk zap node3 /dev/sdc [root@monitor1 ceph-cluster]# ceph-deploy disk zap node4 /dev/sdc [root@monitor1 ceph-cluster]# ceph-deploy disk zap node5 /dev/sdc
建立一個bluestore的osd,有如下幾種設備選擇:
參考:http://docs.ceph.com/docs/master/ceph-volume/lvm/prepare/#bluestore
block device也有以下三種選項:
配置使用整塊磁盤時,ceph-volume會自動建立一個logical volume使用
19. 建立osd節點
[root@monitor1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc node1 [root@monitor1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc node2 [root@monitor1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc node3 [root@monitor1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc node4 [root@monitor1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc node5
#######################################################################
sdc用於osd,sdb將他分紅2個區用於bluestore的db和wal,sdc 是sas 盤, sdb 是固態硬盤
全部osd節點 上劃分gpt分區
[root@node1 ~]# fdisk /dev/sdb Command (m for help): g Building a new GPT disklabel (GUID: E0A9CECB-29AD-4C7A-BB61-223A3F5DB1C4) Command (m for help): n Partition number (1-128, default 1): First sector (2048-146800606, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-146800606, default 146800606): +10G Created partition 1 Command (m for help): n Partition number (2-128, default 2): First sector (20973568-146800606, default 20973568): Last sector, +sectors or +size{K,M,G,T,P} (20973568-146800606, default 146800606): +10G Created partition 2 Command (m for help): w The partition table has been altered!
若是發現分區未更新,執行命令
partprobe
再次查看:
[root@node1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─cl-root 253:0 0 35.1G 0 lvm / └─cl-swap 253:1 0 3.9G 0 lvm [SWAP] sdb 8:16 0 70G 0 disk ├─sdb1 8:17 0 14G 0 part ├─sdb2 8:18 0 14G 0 part sdc 8:32 0 50G 0 disk sr0 11:0 1 1024M 0 rom
建立osd
[root@monitor1 ceph-cluster]# ceph-deploy osd create node1 --bluestore --data /dev/sdc --block-db /dev/sdb1 --block-wal /dev/sdb2 [root@monitor1 ceph-cluster]# ceph-deploy osd create node2 --bluestore --data /dev/sdc --block-db /dev/sdb1 --block-wal /dev/sdb2 [root@monitor1 ceph-cluster]# ceph-deploy osd create node3 --bluestore --data /dev/sdc --block-db /dev/sdb1 --block-wal /dev/sdb2 [root@monitor1 ceph-cluster]# ceph-deploy osd create node4 --bluestore --data /dev/sdc --block-db /dev/sdb1 --block-wal /dev/sdb2 [root@monitor1 ceph-cluster]# ceph-deploy osd create node5 --bluestore --data /dev/sdc --block-db /dev/sdb1 --block-wal /dev/sdb2
當出現報錯:
[node4][DEBUG ] stderr: 12: (main()+0x2c58) [0x7f8e8dc18c18] [node4][DEBUG ] stderr: 13: (__libc_start_main()+0xf5) [0x7f8e808c03d5] [node4][DEBUG ] stderr: 14: (()+0x384ab0) [0x7f8e8dcf0ab0] [node4][DEBUG ] stderr: NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to interpret this. [node4][DEBUG ] --> Was unable to complete a new OSD, will rollback changes [node4][DEBUG ] Running command: /bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring osd purge-new osd.3 --yes-i-really-mean-it [node4][DEBUG ] stderr: purged osd.3 [node4][ERROR ] RuntimeError: command returned non-zero exit status: 1 [ceph_deploy.osd][ERROR ] Failed to execute command: /usr/sbin/ceph-volume --cluster ceph lvm create --bluestore --data /dev/sdc --block.wal /dev/sdb2 --block.db /dev/sdb1 [ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs 修復: node節點卸載掛載分區 [root@node4 ~]# umount /var/lib/ceph/osd/ceph-3 查看lvs [root@node4 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert osd-block-ab4df89f-8682-4233-b683-e05c161089a4 ceph-183df03c-83fb-441c-a82e-d7b560e1a611 -wi-a----- 50.00g root cl -wi-ao---- 35.12g swap cl -wi-ao---- 3.88g 刪除lv,vg,pv [root@node4 ~]# lvremove osd-block-ab4df89f-8682-4233-b683-e05c161089a4 ceph-183df03c-83fb-441c-a82e-d7b560e1a611 Volume group "osd-block-ab4df89f-8682-4233-b683-e05c161089a4" not found Cannot process volume group osd-block-ab4df89f-8682-4233-b683-e05c161089a4 Do you really want to remove active logical volume ceph-183df03c-83fb-441c-a82e-d7b560e1a611/osd-block-ab4df89f-8682-4233-b683-e05c161089a4? [y/n]: y Logical volume "osd-block-ab4df89f-8682-4233-b683-e05c161089a4" successfully removed
[root@node4 ~]# vgremove ceph-183df03c-83fb-441c-a82e-d7b560e1a611 Volume group "ceph-183df03c-83fb-441c-a82e-d7b560e1a611" successfully removed
[root@node4 ~]# pvremove /dev/sdc Labels on physical volume "/dev/sdc" successfully wiped. 刪除/var/lib/ceph/osd/ 全部 [root@node4 ~]# rm /var/log/ceph/ceph-* -rf 刪除 ceph 日誌 [root@node4 ~]# rm -rf /var/lib/ceph/* monitor1 上重置node4 的sdc分區 [root@monitor1 ceph-cluster]# ceph-deploy disk zap node4 /dev/sdc monitor1 上從新建立osd節點 [root@monitor1 ceph-cluster]# ceph-deploy osd create node4 --bluestore --data /dev/sdc --block-db /dev/sdb1 --block-wal /dev/sdb2
####發現一個問題,添加osd 第一次都不成功,要按照上面步驟,從新添加
20. monitor上安裝mgr
[root@monitor1 ceph-cluster]# ceph-deploy mgr create monitor1 monitor2 monitor3
21.開啓dashboard功能, http://docs.ceph.com/docs/mimic/mgr/dashboard/
[root@monitor1 ceph-cluster]# ceph mgr module enable dashboard
22. ceph.conf 添加 mgr
[mon]
mgr initial modules = dashboard
22. 支持ssl.生成並安裝自簽名的證書
[root@monitor1 ceph-cluster]# ceph dashboard create-self-signed-cert
Self-signed certificate created
23. 生成證書
[root@monitor1 ceph-cluster]# mkdir ssl [root@monitor1 ceph-cluster]# cd ssl [root@monitor1 ceph-cluster]# openssl req -new -nodes -x509 \ -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 \ -keyout dashboard.key -out dashboard.crt -extensions v3_ca
[root@monitor1 ceph-cluster]# ls
dashboard.crt dashboard.key
24. 更改ssl證書和密鑰後,須要手動重啓mgr
[root@monitor1 ssl]# ceph mgr module disable dashboard
[root@monitor1 ssl]# ceph mgr module enable dashboard
25. 更改綁定的IP 和 端口號, ####修改後不起做用##########
[root@monitor1 ssl]# ceph config set mgr mgr/dashboard/server_addr 172.16.230.21 [root@monitor1 ssl]# ceph config set mgr mgr/dashboard/server_port 7000
23.建立 web 登陸用戶密碼
[root@monitor1 ceph-cluster]# ceph dashboard set-login-credentials fengjian 123456 Username and password updated
24.查看服務訪問地址:
[root@monitor1 ceph-cluster]# ceph mgr services { "dashboard": "https://monitor1:8443/" }
25.登陸頁面
http://docs.ceph.com/docs/master/rados/operations/user-management/
當ceph在啓動身份驗證和受權的狀況下,必須指定用戶和包含指定用的密鑰的密鑰環,若是未指定用戶名,ceph將client.admin 做爲默認用戶名, 若是沒有指定密鑰環,ceph將經過keyring ceph配置中的設置查找密鑰環,
Ceph存儲集羣用戶與Ceph對象存儲用戶或Ceph文件系統用戶不一樣。Ceph對象網關使用Ceph存儲集羣用戶在網關守護程序和存儲集羣之間進行通訊,但網關爲最終用戶提供了本身的用戶管理功能。Ceph文件系統使用POSIX語義。與Ceph文件系統關聯的用戶空間與Ceph存儲羣集用戶不一樣。
添加用戶會建立用戶名(即TYPE.ID
),密鑰以及用於建立用戶的命令中包含的任何功能。
用戶密鑰使用戶可以使用Ceph存儲集羣進行身份驗證。用戶的功能受權用戶在Ceph監視器(mon
),Ceph OSD(osd
)或Ceph元數據服務器(mds
)上讀取,寫入或執行。
有幾種方法能夠添加用戶:
ceph auth add
:此命令是添加用戶的規範方式。它將建立用戶,生成密鑰並添加任何指定的功能。ceph auth get-or-create
:此命令一般是建立用戶最方便的方法,由於它返回一個密鑰文件格式,其中包含用戶名(括號中)和密鑰。若是用戶已存在,則此命令僅返回密鑰文件格式的用戶名和密鑰。您可使用該 選項將輸出保存到文件。-o{filename}
ceph auth get-or-create-key
:此命令是建立用戶並返回用戶密鑰(僅)的便捷方式。這對僅須要密鑰的客戶端(例如,libvirt)很是有用。若是用戶已存在,則此命令只返回密鑰。您可使用該選項將輸出保存到文件。-o {filename}
建立客戶端用戶時,您能夠建立沒有功能的用戶。沒有功能的用戶除了僅僅身份驗證以外沒用,由於客戶端沒法從監視器檢索羣集映射。可是,若是您但願稍後使用該命令推遲添加功能,則能夠建立沒有功能的用戶。ceph auth caps
典型用戶至少具備Ceph監視器的讀取功能以及Ceph OSD上的讀寫功能。此外,用戶的OSD權限一般僅限於訪問特定池。
ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool' ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool' ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key
該命令容許您指定用戶並更改用戶的功能。設置新功能將覆蓋當前功能。查看當前運行的功能。要添加功能,還應在使用表單時指定現有功能:ceph auth caps
ceph auth get USERTYPE.USERID
ceph auth caps USERTYPE.USERID {daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]' [{daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]'] ceph auth get client.john ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool' ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool' ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'
ceph auth del {TYPE}.{ID}
哪裏{TYPE}是一個client,osd,mon,或mds,而且{ID}是用戶名或守護進程的ID
ceph auth print-key {TYPE}.{ID}
{TYPE}是一個client,osd,mon,或mds,而且{ID}是用戶名或守護進程的ID。
當您須要使用用戶密鑰(例如,libvirt)填充客戶端軟件時,打印用戶密鑰很是有用。
mount -t ceph serverhost:/ mountpoint -o name=client.user,secret=`ceph auth print-key client.user`
要導入一個或多個用戶,請使用並指定密鑰環:ceph auth import
sudo ceph auth import -i /etc/ceph/ceph.keyring
ceph存儲集羣將添加新用戶,他們的密鑰和功能,並將更新現有用戶,他們的密鑰和功能
當經過Ceph客戶端訪問Ceph時,Ceph客戶端將查找本地密鑰環。Ceph keyring
默認使用如下四個密鑰環名稱預設設置,所以沒必要在Ceph配置文件中設置它們,除非您想覆蓋默認值(不推薦):
/etc/ceph/$cluster.$name.keyring
/etc/ceph/$cluster.keyring
/etc/ceph/keyring
/etc/ceph/keyring.bin
$cluster
變量是您的Ceph集羣名稱,由Ceph配置文件的名稱定義(即,ceph.conf
表示集羣名稱ceph
;所以,ceph.keyring
)。$name
變量是用戶類型和用戶ID(例如,client.admin
所以ceph.client.admin.keyring
)
建立用戶(例如,client.ringo
)以後,您必須獲取密鑰並將其添加到Ceph客戶端上的密鑰環,以便用戶能夠訪問Ceph存儲羣集。
當您使用「 管理用戶」部分中的過程建立用戶時,您須要向Ceph客戶端提供用戶密鑰,以便Ceph客戶端能夠檢索指定用戶的密鑰並使用Ceph存儲羣集進行身份驗證。Ceph客戶端訪問密鑰環以查找用戶名並檢索用戶密鑰。
該ceph-authtool
實用程序容許您建立密鑰環。要建立空密鑰環,請使用--create-keyring
或-C
。例如
在建立具備多個用戶的密鑰環時,咱們建議使用羣集名稱(例如$cluster.keyring
)做爲密鑰環文件名並將其保存在 /etc/ceph
目錄中,以便keyring
配置默認設置將獲取文件名
ceph-authtool -C /etc/ceph/ceph.keyring
使用單個用戶建立密鑰環時,建議使用羣集名稱,用戶類型和用戶名並將其保存在/etc/ceph
目錄中。例如,ceph.client.admin.keyring
對於client.admin
用戶。
要建立密鑰環/etc/ceph
,您必須這樣作root
。這意味着該文件僅具備用戶rw
權限root
,這在密鑰環包含管理員密鑰時是合適的。可是,若是您打算爲特定用戶或用戶組使用密鑰環,請確保執行chown
或chmod
創建適當的密鑰環全部權和訪問權限。
當 添加用戶到Ceph的存儲集羣,而且保存用戶私鑰環。
1. 建立client.george用戶
ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
2. 將用戶添加的密鑰環中
ceph auth get client.george -o /etc/ceph/ceph.keyring
若是要將用戶導入密鑰環,可使用ceph-authtool
指定目標密鑰環和源密鑰環
ceph-authtool /etc/ceph/ceph.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
建立密鑰環並向密鑰環添加新用戶
sudo ceph-authtool -C /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx' --gen-key
新用戶client.ringo僅在密鑰環中。要將新用戶添加到Ceph存儲羣集,必須將新用戶添加到Ceph存儲羣集
ceph auth add client.ringo -i /etc/ceph/ceph.keyring
要修改密鑰環中用戶記錄的功能,請指定密鑰環,而後指定用戶的功能
ceph-authtool /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx'
要將用戶更新爲Ceph存儲羣集,必須將密鑰環中的用戶更新爲Ceph存儲羣集中的用戶條目
ceph auth import -i /etc/ceph/ceph.keyring
您也能夠直接在羣集中修改用戶功能,將結果存儲到密鑰環文件中; 而後,將密鑰環導入主 ceph.keyring
文件
權限測試
[root@monitor1 ceph]# ceph auth get-or-create client.feng mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring [root@monitor1 ceph]# ceph auth get client.feng
exported keyring for client.feng [client.feng] key = AQAJYbBcGMVHGxAApIKfjyuV3ZuDhYtMIvx0UA== caps mon = "allow r" caps osd = "allow rw pool=liverpool"
導出到 /etc/ceph/ceph.client.feng.keyring [root@monitor1 ceph]# ceph auth get client.feng -o /etc/ceph/ceph.client.feng.keyring exported keyring for client.feng
# 使用client.feng 用戶測試 ceph -s [root@monitor1 ceph]# ceph -s --name client.feng cluster: id: 7d518340-a55f-4061-98ff-debb0d85e00b health: HEALTH_OK services: mon: 3 daemons, quorum monitor1,monitor2,monitor3 mgr: monitor1(active), standbys: monitor3, monitor2 osd: 5 osds: 5 up, 5 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 55 GiB used, 245 GiB / 300 GiB avail pgs:
建立第二個用戶:
[root@monitor1 ceph]# ceph-authtool -C /etc/ceph/ceph.client.fengjian.keyring -n client.fengjian --cap osd 'allow x' --cap mon 'allow x' --gen-key creating /etc/ceph/ceph.client.fengjian.keyring
導入到ceph 集羣中 [root@monitor1 ceph]# ceph auth add client.fengjian -i /etc/ceph/ceph.client.fengjian.keyring added key for client.fengjian 執行 ceph -s 測試 [root@monitor1 ceph]# ceph -s --name client.fengjian Error EACCES: access denied You have new mail in /var/spool/mail/root
Ceph動態地存儲,複製和從新平衡RADOS集羣中的數據對象。因爲許多不一樣的用戶在不一樣的OSD中將對象存儲在不一樣的池中,所以Ceph操做須要一些數據放置計劃。Ceph中的主要數據放置規劃概念包括:
完成ceph配置後, ceph monitor 會報告 ceph 存儲集羣的當前狀態,ceph monitor 經過要求每一個ceph osd守護進程的報告以及從ceph osd daemon 接受有關相鄰 ceph osd守護進程狀態的報告來了解集羣。 每一個ceph osd 守護進程每6秒檢查一次 其餘ceph osd 守護進程的心跳, 若是相鄰的osd 守護進程20內,沒有顯示心跳, 相鄰的ceph osd 將報告給ceph monitor, ceph監視器將更新 ceph cluster map, http://docs.ceph.com/docs/master/rados/configuration/mon-osd-interaction/
爲了實現高可用性,您應該運行至少具備三個監視器的生產Ceph集羣。Ceph使用Paxos算法,這須要法定人數中的大多數監視器達成共識。使用Paxos,監視器沒法肯定僅使用兩個監視器創建仲裁的多數。大多數監視器必須按以下計算:1:1,2:3,3:4,3:5,4:6等。
添加:
[root@monitor1 ceph-cluster]# cd /opt/ceph-cluster/ 1. 使用ceph-deploy 添加 node1 node2 monitor [root@monitor1 ceph-cluster]# ceph-deploy mon create node1 node2 2. ceph.conf配置文件中添加 monitor [global] fsid = 7d518340-a55f-4061-98ff-debb0d85e00b mon_initial_members = monitor1, monitor2, monitor3, node1, node2 mon_host = 172.16.230.21,172.16.230.22,172.16.230.23,172.16.230.24,172.16.230.25 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd pool default size = 3 osd pool default min size = 2 public network = 172.16.230.0/24 cluster network = 1.1.1.0/24 osd pool default pg num=250 osd pool defaultpgp num=250 [mon] mgr modules = dashboard 3. 同步ceph.conf 配置文件到其餘機器中 [root@monitor1 ceph-cluster]# ceph-deploy --overwrite-conf admin monitor1 monitor2 monitor3 node1 node2 node3 node4 node5 4. 查看映射狀態 [root@monitor1 ceph-cluster]# ceph -s cluster: id: 7d518340-a55f-4061-98ff-debb0d85e00b health: HEALTH_OK services: mon: 5 daemons, quorum monitor1,monitor2,monitor3,node1,node2 mgr: monitor1(active), standbys: monitor3, monitor2 osd: 5 osds: 5 up, 5 in data: pools: 1 pools, 256 pgs objects: 0 objects, 0 B usage: 55 GiB used, 245 GiB / 300 GiB avail pgs: 256 active+clean
刪除monitor
1. 刪除 monitor node1 node2 映射 [root@monitor1 ceph-cluster]# ceph-deploy mon destroy node1 node2 2. 刪除配置文件中 [root@monitor1 ceph-cluster]# cat ceph.conf [global] fsid = 7d518340-a55f-4061-98ff-debb0d85e00b mon_initial_members = monitor1, monitor2, monitor3 mon_host = 172.16.230.21,172.16.230.22,172.16.230.23 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd pool default size = 3 osd pool default min size = 2 public network = 172.16.230.0/24 cluster network = 1.1.1.0/24 osd pool default pg num=250 osd pool defaultpgp num=250 3. 同步配置文件 ceph-deploy --overwrite-conf admin monitor1 monitor2 monitor3 node1 node2 node3 node4 node5
1. 使用 SSD 硬盤的 sdb分區 sdb3 sdb4 看成 rocksdb 的 wal 和 db(元數據),對sdb進行繼續分區
[root@node5 ~]# fdisk /dev/sdb WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition number (3-128, default 3): First sector (41945088-146800606, default 41945088): Last sector, +sectors or +size{K,M,G,T,P} (41945088-146800606, default 146800606): +10G Created partition 3 Command (m for help): n Partition number (4-128, default 4): First sector (62916608-146800606, default 62916608): Last sector, +sectors or +size{K,M,G,T,P} (62916608-146800606, default 146800606): +10G Created partition 4 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@node5 ~]# partprobe
2. 使用zap 清除新硬盤上的數據
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node1 /dev/sdd [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy disk zap node1 /dev/sdd [ceph_deploy.cli][INFO ] ceph-deploy options: [ceph_deploy.cli][INFO ] username : None [ceph_deploy.cli][INFO ] verbose : False [ceph_deploy.cli][INFO ] debug : False [ceph_deploy.cli][INFO ] overwrite_conf : False [ceph_deploy.cli][INFO ] subcommand : zap [ceph_deploy.cli][INFO ] quiet : False [ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x159ba28> [ceph_deploy.cli][INFO ] cluster : ceph [ceph_deploy.cli][INFO ] host : node1 [ceph_deploy.cli][INFO ] func : <function disk at 0x1584c08> [ceph_deploy.cli][INFO ] ceph_conf : None [ceph_deploy.cli][INFO ] default_release : False [ceph_deploy.cli][INFO ] disk : ['/dev/sdd'] [ceph_deploy.osd][DEBUG ] zapping /dev/sdd on node1 [node1][DEBUG ] connected to host: node1 [node1][DEBUG ] detect platform information from remote host [node1][DEBUG ] detect machine type [node1][DEBUG ] find the location of an executable [ceph_deploy.osd][INFO ] Distro info: CentOS Linux 7.3.1611 Core [node1][DEBUG ] zeroing last few blocks of device [node1][DEBUG ] find the location of an executable [node1][INFO ] Running command: /usr/sbin/ceph-volume lvm zap /dev/sdd [node1][DEBUG ] --> Zapping: /dev/sdd [node1][DEBUG ] --> --destroy was not specified, but zapping a whole device will remove the partition table [node1][DEBUG ] Running command: /usr/sbin/wipefs --all /dev/sdd [node1][DEBUG ] Running command: /bin/dd if=/dev/zero of=/dev/sdd bs=1M count=10 [node1][DEBUG ] stderr: 10+0 records in [node1][DEBUG ] 10+0 records out [node1][DEBUG ] 10485760 bytes (10 MB) copied [node1][DEBUG ] stderr: , 3.00327 s, 3.5 MB/s [node1][DEBUG ] --> Zapping successful for: <Raw Device: /dev/sdd>
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node1 /dev/sdd [root@monitor1 ceph-cluster]# ceph-deploy disk zap node2 /dev/sdd [root@monitor1 ceph-cluster]# ceph-deploy disk zap node3 /dev/sdd [root@monitor1 ceph-cluster]# ceph-deploy disk zap node4 /dev/sdd [root@monitor1 ceph-cluster]# ceph-deploy disk zap node5 /dev/sdd
添加osd節點
###仍是會報錯,須要卸載,刪除lv, vg, pv, 刪除日誌, 刪除rm -rf /var/lib/ceph/osd/ceph-$id} -rf
[root@monitor1 ceph-cluster]# ceph-deploy osd create node1 --bluestore --data /dev/sdd --block-db /dev/sdb3 --block-wal /dev/sdb4 [root@monitor1 ceph-cluster]# ceph-deploy osd create node2 --bluestore --data /dev/sdd --block-db /dev/sdb3 --block-wal /dev/sdb4 [root@monitor1 ceph-cluster]# ceph-deploy osd create node3 --bluestore --data /dev/sdd --block-db /dev/sdb3 --block-wal /dev/sdb4 [root@monitor1 ceph-cluster]# ceph-deploy osd create node4 --bluestore --data /dev/sdd --block-db /dev/sdb3 --block-wal /dev/sdb4 [root@monitor1 ceph-cluster]# ceph-deploy osd create node5 --bluestore --data /dev/sdd --block-db /dev/sdb3 --block-wal /dev/sdb4
列出node節點 硬盤狀況
[root@monitor1 ceph-cluster]# ceph-deploy disk list node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy disk list node1 [ceph_deploy.cli][INFO ] ceph-deploy options: [ceph_deploy.cli][INFO ] username : None [ceph_deploy.cli][INFO ] verbose : False [ceph_deploy.cli][INFO ] debug : False [ceph_deploy.cli][INFO ] overwrite_conf : False [ceph_deploy.cli][INFO ] subcommand : list [ceph_deploy.cli][INFO ] quiet : False [ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x1b27a28> [ceph_deploy.cli][INFO ] cluster : ceph [ceph_deploy.cli][INFO ] host : ['node1'] [ceph_deploy.cli][INFO ] func : <function disk at 0x1b10c08> [ceph_deploy.cli][INFO ] ceph_conf : None [ceph_deploy.cli][INFO ] default_release : False [node1][DEBUG ] connected to host: node1 [node1][DEBUG ] detect platform information from remote host [node1][DEBUG ] detect machine type [node1][DEBUG ] find the location of an executable [node1][INFO ] Running command: fdisk -l [node1][INFO ] Disk /dev/sdb: 75.2 GB, 75161927680 bytes, 146800640 sectors [node1][INFO ] Disk /dev/sdc: 53.7 GB, 53687091200 bytes, 104857600 sectors [node1][INFO ] Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors [node1][INFO ] Disk /dev/sdd: 42.9 GB, 42949672960 bytes, 83886080 sectors [node1][INFO ] Disk /dev/mapper/cl-root: 37.7 GB, 37706792960 bytes, 73646080 sectors [node1][INFO ] Disk /dev/mapper/cl-swap: 4160 MB, 4160749568 bytes, 8126464 sectors [node1][INFO ] Disk /dev/mapper/ceph--7104aa88--187b--455a--933b--fa44514ea24f-osd--block--49bdb336--8438--43ba--9505--7f1a23e570bc: 53.7 GB, 53682896896 bytes, 104849408 sectors [node1][INFO ] Disk /dev/mapper/ceph--cae55dd8--599b--4258--a179--48de13bf6204-osd--block--edacf21d--fdf3--4290--af0f--d07422fc8660: 42.9 GB, 42945478656 bytes, 83877888 sectors
1. 查詢osd 結構
[root@monitor1 ceph-cluster]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.53696 root default -3 0.10739 host node1 0 hdd 0.05859 osd.0 up 1.00000 1.00000 5 hdd 0.04880 osd.5 up 1.00000 1.00000 -5 0.10739 host node2 1 hdd 0.05859 osd.1 up 1.00000 1.00000 6 hdd 0.04880 osd.6 up 1.00000 1.00000 -7 0.10739 host node3 2 hdd 0.05859 osd.2 up 0 1.00000 7 hdd 0.04880 osd.7 up 0 1.00000 -9 0.10739 host node4 3 hdd 0.05859 osd.3 up 1.00000 1.00000 8 hdd 0.04880 osd.8 up 1.00000 1.00000 -11 0.10739 host node5 4 hdd 0.05859 osd.4 up 1.00000 1.00000 9 hdd 0.04880 osd.9 up 1.00000 1.00000 10 0 osd.10 down 0 1.00000
有時,一般在主機不多的「小」集羣中(例如,使用小型測試集羣),採用out
OSD 的事實可能會產生一個CRUSH轉角狀況,其中一些PG仍然停留在該 active+remapped
狀態。若是您在這種狀況下,您應該使用如下標記OSD in
:
[root@monitor1 ceph-cluster]# ceph osd in osd.10
返回到初始狀態而後,不是標記out
OSD,而是將其權重設置爲0
[root@monitor1 ceph-cluster]# ceph osd crush reweight osd.10 0
2. 地址osd進程
將OSD從羣集中取出後,它可能仍在運行。也就是說,OSD能夠是up
和out
。在從配置中刪除OSD以前,必須先中止OSD
[root@monitor1 ceph-cluster]# ssh node1 [root@monitor1 ceph-cluster]# systemctl stop ceph-osd@10
3. 刪除
從羣集映射中刪除OSD,刪除其身份驗證密鑰,從OSD映射中刪除OSD,並從ceph.conf
文件中刪除OSD 。若是主機有多個驅動器,則可能須要經過重複此過程爲每一個驅動器刪除OSD。
[root@monitor1 ceph-cluster]# ceph osd purge 10 --yes-i-really-mean-it
4. 修改ceph.conf 配置文件,刪除 osd.10 相關信息
5. 同步ceph.conf 到其餘節點
############################################
1. 關閉osd.10 進程
systemctl stop ceph-osd@10
2. 卸載掛載
umount /var/lib/ceph/osd/ceph-10
3. 把osd.10 下線
ceph osd out osd.10
4. 從CRUSH映射中刪除OSD
ceph osd crush remove osd.10
5.刪除osd驗證密鑰
ceph auth del osd.10
6. 刪除osd
ceph osd rm osd.10
當硬盤發生故障,或者管理員想要使用新的後端從新部署osd時, 須要更換osd,與刪除 osd不通,在osd被銷燬更換後,須要更換osd的id和crush映射
1. 模擬osd0 宕機
[root@node1 ~]# systemctl stop ceph-osd@0 [root@node1 ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/cl-root xfs 36G 6.4G 29G 18% / devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 84K 3.9G 1% /dev/shm tmpfs tmpfs 3.9G 8.9M 3.9G 1% /run tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 174M 841M 18% /boot tmpfs tmpfs 3.9G 24K 3.9G 1% /var/lib/ceph/osd/ceph-5 tmpfs tmpfs 3.9G 24K 3.9G 1% /var/lib/ceph/osd/ceph-0 tmpfs tmpfs 783M 16K 783M 1% /run/user/42 tmpfs tmpfs 783M 0 783M 0% /run/user/0 [root@node1 ~]# umount /var/lib/ceph/osd/ceph-0/
2. 直接刪除 /dev/sdc
root@node1 ~]# pvs /dev/ceph-7104aa88-187b-455a-933b-fa44514ea24f/osd-block-49bdb336-8438-43ba-9505-7f1a23e570bc: read failed after 0 of 4096 at 0: Input/output error /dev/ceph-7104aa88-187b-455a-933b-fa44514ea24f/osd-block-49bdb336-8438-43ba-9505-7f1a23e570bc: read failed after 0 of 4096 at 53682831360: Input/output error /dev/ceph-7104aa88-187b-455a-933b-fa44514ea24f/osd-block-49bdb336-8438-43ba-9505-7f1a23e570bc: read failed after 0 of 4096 at 53682888704: Input/output error /dev/ceph-7104aa88-187b-455a-933b-fa44514ea24f/osd-block-49bdb336-8438-43ba-9505-7f1a23e570bc: read failed after 0 of 4096 at 4096: Input/output error PV VG Fmt Attr PSize PFree /dev/sda2 cl lvm2 a-- 39.00g 4.00m /dev/sdd ceph-cae55dd8-599b-4258-a179-48de13bf6204 lvm2 a-- 40.00g 0 刪除過期的/dev/sdX設備節點並清理過期的設備映射器節點 [root@node1 ~]# dmsetup remove /dev/myvg/* [root@node1 ~]# echo 1 > /sys/block/sdb/device/delete
2. 銷燬OSD
[root@monitor1 ceph-cluster]# ceph osd destroy 0 --yes-i-really-mean-it destroyed osd.0
3. 更換硬盤
4.擦出osd 新硬盤數據
[root@node1 ~]# ceph-volume lvm zap /dev/sde --> Zapping: /dev/sde --> --destroy was not specified, but zapping a whole device will remove the partition table Running command: /usr/sbin/wipefs --all /dev/sde Running command: /bin/dd if=/dev/zero of=/dev/sde bs=1M count=10 stderr: 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied stderr: , 0.186683 s, 56.2 MB/s --> Zapping successful for: <Raw Device: /dev/sde> You have new mail in /var/spool/mail/root
5. 使用先前銷燬的 osd id 添加到集羣中
[root@node1 ~]# ceph-volume lvm create --osd-id 0 --data /dev/sde --bluestore --block.db /dev/sdb1 --block.wal /dev/sdb2
6. 啓動osd.0 節點
[root@node1 ~]# systemctl start ceph-osd@0
7. 查看node1 osd 0 狀態
/var/lib/ceph/osd/ceph-0 爲替換的osd
[root@node1 ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/cl-root xfs 36G 6.4G 29G 18% / devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 84K 3.9G 1% /dev/shm tmpfs tmpfs 3.9G 8.9M 3.9G 1% /run tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 174M 841M 18% /boot tmpfs tmpfs 3.9G 24K 3.9G 1% /var/lib/ceph/osd/ceph-5 tmpfs tmpfs 783M 16K 783M 1% /run/user/42 tmpfs tmpfs 783M 0 783M 0% /run/user/0 tmpfs tmpfs 3.9G 48K 3.9G 1% /var/lib/ceph/osd/ceph-0
8. monitor 上查看
若是osd.0 爲down狀態
執行 in 加入映射中 [root@monitor1 ceph-cluster]# ceph osd in 0 查看 [root@monitor1 ceph-cluster]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.53696 root default -3 0.10739 host node1 0 hdd 0.05859 osd.0 up 1.00000 1.00000 5 hdd 0.04880 osd.5 up 1.00000 1.00000 -5 0.10739 host node2 1 hdd 0.05859 osd.1 up 1.00000 1.00000 6 hdd 0.04880 osd.6 up 1.00000 1.00000 -7 0.10739 host node3 2 hdd 0.05859 osd.2 up 1.00000 1.00000 7 hdd 0.04880 osd.7 up 1.00000 1.00000 -9 0.10739 host node4 3 hdd 0.05859 osd.3 up 1.00000 1.00000 8 hdd 0.04880 osd.8 up 1.00000 1.00000 -11 0.10739 host node5 4 hdd 0.05859 osd.4 up 1.00000 1.00000 9 hdd 0.04880 osd.9 up 1.00000 1.00000
使用ceph-deploy
,能夠將客戶端管理密鑰和Ceph配置文件提供給其餘主機,以便主機上的用戶能夠將ceph
命令行用做管理用戶。
1. 要使主機可以以管理員權限執行ceph 命令,請使用admin命令 ceph-deploy admin monitor1 monitor2 monitor3 node1 node2 node3 node4 node5 2. 將更新的配置文件發送到集羣中的主機 ceph-deploy config push monitor1 monitor2 monitor3 node1 node2 node3 node4 node5 3. 要將集羣中ceph的配置文件 拉取過來 ceph-deploy config pull node1 .....
一個或者多個池已經達到起配合, 再也不容許寫入
查看池的配合和利用率
[root@monitor1 ceph-cluster]# ceph df detail GLOBAL: SIZE AVAIL RAW USED %RAW USED OBJECTS 520 GiB 410 GiB 110 GiB 21.20 0 POOLS: NAME ID QUOTA OBJECTS QUOTA BYTES USED %USED MAX AVAIL OBJECTS DIRTY READ WRITE RAW USED senyintpool 1 N/A 90 GiB 0 B 0 80 GiB 0 0 0 B 0 B 0 B
提升池配額
[root@monitor1 ceph-cluster]# ceph osd pool set-quota senyintpool max_bytes $((90 * 1024 * 1024 * 1024))
查看配額
[root@monitor1 ceph-cluster]# ceph osd pool get-quota senyintpool quotas for pool 'senyintpool': max objects: N/A max bytes : 90 GiB
[root@monitor1 ceph-cluster]# ceph df GLOBAL: SIZE AVAIL RAW USED %RAW USED 520 GiB 410 GiB 110 GiB 21.20 POOLS: NAME ID USED %USED MAX AVAIL OBJECTS senyintpool 1 0 B 0 80 GiB 0 輸出的RAW STORAGE部分概述了羣集管理的存儲量。 GLOBAL: 全局(或集羣的總數) SIZE:羣集管理的存儲容量。 AVAIL:羣集中可用的可用空間量。 RAW USED:用戶數據,內部開銷或預留容量消耗的原始存儲量。 %RAW USED:使用的原始存儲空間的百分比。將此數字與the一塊兒使用,以確保您沒有達到羣集的容量。則名義使用量將爲1MB,但實際使用量可能爲2MB或更多,具體取決於副本,克隆和快照的數量。 POOLS : NAME:池的名稱。 ID:池ID。 USED:以千字節爲單位存儲的名義數據量,除非該數字附加M表示兆字節或G表示千兆字節。 %USED:每一個池使用的名義存儲百分比。 MAX AVAIL:能夠寫入此池的名義數據量的估計值。 OBJECTS:每一個池存儲的名義對象數。
少於5個OSD設置pg_num爲128
5到10個OSD設置pg_num爲512
10到50個OSD設置pg_num爲1024
若是您有超過50個OSD,您須要瞭解權衡以及如何本身計算pg_num值
存儲具備吞吐量限制,他影響讀寫性能和可擴展性能, 因此存儲系統都支持條帶化以增長存儲系統的吞吐量並提高性能, 條帶化最多見的的方式是作raid,
在磁盤陣列中,數據是以條帶的方式貫穿在磁盤陣列全部硬盤中,ceph條帶化後,將得到N個帶有惟一object的id, object id 是進行線性映射生成的。
Ceph客戶端將計算對象應該在哪一個放置組中。它經過對對象ID進行散列並根據定義的池中的PG數量和池的ID應用操做來完成此操做
[root@monitor1 ceph-cluster]# ceph osd pool create fengpool 512 512
設置pool 配額
設置fengpool 最大的對象爲10000個
[root@monitor1 ceph-cluster]# ceph osd pool set-quota fengpool max_objects 10000
刪除pool配額, 值設置爲0
[root@monitor1 ceph-cluster]# ceph osd pool set-quota fengpool max_objects 0
刪除池
[root@monitor1 ceph-cluster]# ceph osd pool delete fengpool --yes-i-really-really-mean-it
若是本身建立的池建立了本身的規則,則應該考慮在再也不須要池時將其刪除
ceph osd pool get {pool-name} crush_rule
若是您建立的用戶嚴格使用再也不存在的池,則應考慮刪除這些用戶
ceph auth ls | grep -C 5 fengpool ceph auth del {user}
重命名池
ceph osd pool rename {current-pool-name} {new-pool-name}
統計池的信息
[root@monitor1 ceph-cluster]# rados df
獲取特定池的io 信息
[root@monitor1 ceph-cluster]# ceph osd pool stats fengpool pool fengpool id 2 nothing is going on
製做池的快照
ceph osd pool mksnap {pool-name} {snap-name}
刪除池的快照
ceph osd pool rmsnap {pool-name} {snap-name}
設置 pool的對象副本數
ceph osd pool set fengpool size 3
CRUSH算法肯定如何存儲和經過計算數據存儲位置檢索數據。CRUSH使Ceph客戶可以直接與OSD通訊,而不是經過集中式服務器或代理。經過算法肯定的存儲和檢索數據的方法,Ceph能夠避免單點故障,性能瓶頸以及對其可擴展性的物理限制。
CRUSH須要集羣的映射,並使用CRUSH映射在OSD中僞隨機存儲和檢索數據,並在集羣中統一分佈數據
CRUSH地圖包含OSD列表,用於將設備聚合到物理位置的「存儲桶」列表,以及告訴CRUSH如何在Ceph集羣池中複製數據的規則列表。經過反映安裝的基礎物理組織,CRUSH能夠建模 - 從而解決相關設備故障的潛在來源。典型的來源包括物理接近,共享電源和共享網絡。經過將此信息編碼到羣集映射中,CRUSH放置策略能夠跨不一樣的故障域分隔對象副本,同時仍保持所需的分佈。例如,爲了解決併發故障的可能性,可能須要確保數據副本在使用不一樣架子,機架,電源,控制器和/或物理位置的設備上。
部署OSD時,它們會自動放置在CRUSH映射中,該映射位於host
以其運行的主機的主機名命名的節點下 。這與默認的CRUSH故障域相結合,可確保副主機或擦除代碼分片在主機之間分離,單個主機故障不會影響可用性。可是,對於較大的羣集,管理員應仔細考慮他們選擇的故障域。例如,跨機架分離副本對於中型到大型集羣來講很常見。
CRUSH 結構
CRUSH映射包括描述集羣物理拓撲的層次結構,以及定義關於如何在這些設備上放置數據的策略的一組規則。層次結構ceph-osd
在葉子上有設備(守護進程),內部節點對應於其餘物理特徵或分組:主機,機架,行,數據中心等
設備是ceph-osd
能夠存儲數據的單獨守護程序。對於羣集中的每一個OSD守護程序,一般會在此處定義一個。設備由id(非負整數)和名稱標識,一般osd.N
在哪裏N
是設備ID。
設備還能夠具備與它們相關聯的設備類(例如, hdd
或ssd
),容許它們經過壓潰規則方便地成爲目標。
存儲桶是層次結構中內部節點的CRUSH術語:主機,機架,行等.CRUSH映射定義了一系列用於描述這些節點的類型。默認狀況下,這些類型包括:
osd (or device)
host
chassis
rack
row
pdu
pod
room
datacenter
region
root
規則定義有關如何跨層次結構中的設備分佈數據的策略
查看集羣定義的規則
[root@monitor1 ~]# ceph osd crush rule ls
replicated_rule
查看規則內容
[root@monitor1 ~]# ceph osd crush rule dump [ { "rule_id": 0, "rule_name": "replicated_rule", "ruleset": 0, "type": 1, "min_size": 1, "max_size": 10, "steps": [ { "op": "take", "item": -1, "item_name": "default" }, { "op": "chooseleaf_firstn", "num": 0, "type": "host" }, { "op": "emit" } ] } ]
1. 獲取CRUSH map。 2. 反編譯 CRUSH map。 3. 至少編輯一個設備,存儲桶和規則。 4. 從新編譯 CRUSH映射。 5. 設置CRUSH map。
crush 設計 SSD, SATA 混合實例
存儲節點上既有STAT硬盤 也有SSD盤, 把各個節點的SSD 和 SATA整合成獨立的存儲池, 爲不一樣的應用提供不一樣的性能
[root@monitor1 ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.53696 root default -3 0.10739 host node1 0 hdd 0.05859 osd.0 up 1.00000 1.00000 5 hdd 0.04880 osd.5 up 1.00000 1.00000 -5 0.10739 host node2 1 hdd 0.05859 osd.1 up 1.00000 1.00000 6 hdd 0.04880 osd.6 up 1.00000 1.00000 -7 0.10739 host node3 2 hdd 0.05859 osd.2 up 1.00000 1.00000 7 hdd 0.04880 osd.7 up 1.00000 1.00000 -9 0.10739 host node4 3 hdd 0.05859 osd.3 up 1.00000 1.00000 8 hdd 0.04880 osd.8 up 1.00000 1.00000 -11 0.10739 host node5 4 hdd 0.05859 osd.4 up 1.00000 1.00000 9 hdd 0.04880 osd.9 up 1.00000 1.00000
osd[0 - 4] 爲SSD, osd[5-9] 爲SATA硬盤
https://ceph.com/community/new-luminous-crush-device-classes/
luminous版本的ceph新增了一個功能crush class,這個功能又能夠稱爲磁盤智能分組。由於這個功能就是根據磁盤類型自動的進行屬性的關聯,而後進行分類。無需手動修改crushmap,極大的減小了人爲的操做
ceph中的每一個osd設備均可以選擇一個class類型與之關聯,默認狀況下,在建立osd的時候會自動識別設備類型,而後設置該設備爲相應的類。一般有三種class類型:hdd,ssd,nvme。
查詢 crush class
[root@monitor1 tmp]# ceph osd crush class ls [ "hdd" ]
經過對 ceph osd tree 查看 全部的 class 類都是 hdd, 若是自動設備檢測出錯,能夠手動修改
#刪除 class 類
[root@monitor1 tmp]# ceph osd crush rm-device-class osd.0 [root@monitor1 tmp]# ceph osd crush rm-device-class osd.1 [root@monitor1 tmp]# ceph osd crush rm-device-class osd.2 [root@monitor1 tmp]# ceph osd crush rm-device-class osd.3 [root@monitor1 tmp]# ceph osd crush rm-device-class osd.4
手動添加ssd類
[root@monitor1 tmp]# ceph osd crush set-device-class ssd osd.0 [root@monitor1 tmp]# ceph osd crush set-device-class ssd osd.1 [root@monitor1 tmp]# ceph osd crush set-device-class ssd osd.2 [root@monitor1 tmp]# ceph osd crush set-device-class ssd osd.3 [root@monitor1 tmp]# ceph osd crush set-device-class ssd osd.4
修改後的結果
[root@monitor2 ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.53696 root default -3 0.10739 host node1 5 hdd 0.04880 osd.5 up 1.00000 1.00000 0 ssd 0.05859 osd.0 up 1.00000 1.00000 -5 0.10739 host node2 6 hdd 0.04880 osd.6 up 1.00000 1.00000 1 ssd 0.05859 osd.1 up 1.00000 1.00000 -7 0.10739 host node3 7 hdd 0.04880 osd.7 up 1.00000 1.00000 2 ssd 0.05859 osd.2 up 1.00000 1.00000 -9 0.10739 host node4 8 hdd 0.04880 osd.8 up 1.00000 1.00000 3 ssd 0.05859 osd.3 up 1.00000 1.00000 -11 0.10739 host node5 9 hdd 0.04880 osd.9 up 1.00000 1.00000 4 ssd 0.05859 osd.4 up 1.00000 1.00000
查看crush class
[root@monitor1 tmp]# ceph osd crush class ls [ "hdd", "ssd" ]
把含有SSD 和SATA 聚合,並建立新的root層級,並保留默認的層級關係, 設計圖以下
4. 建立一個優先使用ssd 規則的 crush-rule
osd crush rule create-replicated <name> <root> <type> {<class>} create crush rule <name> for replicated pool to start from <root>, replicate across buckets of type <type>, using a choose mode of <firstn| indep> (default firstn; indep best for erasure pools)
[root@monitor1 tmp]# ceph osd crush rule create-replicated ssd-rule default host ssd
5.查看crush rule
[root@monitor1 tmp]# ceph osd crush rule ls
replicated_rule
ssd-rule
6 獲取 當前的crush map
[root@monitor1 tmp]# ceph osd getcrushmap -o /tmp/mycrushmap 36
7. 反編譯crush map
[root@monitor1 tmp]# crushtool -d /tmp/mycrushmap > /tmp/mycrushmap.txt
8. 查看crush map 文本
[root@monitor1 tmp]# cat mycrushmap.txt # begin crush map tunable choose_local_tries 0 tunable choose_local_fallback_tries 0 tunable choose_total_tries 50 tunable chooseleaf_descend_once 1 tunable chooseleaf_vary_r 1 tunable chooseleaf_stable 1 tunable straw_calc_version 1 tunable allowed_bucket_algs 54 # devices device 0 osd.0 class ssd device 1 osd.1 class ssd device 2 osd.2 class ssd device 3 osd.3 class ssd device 4 osd.4 class ssd device 5 osd.5 class hdd device 6 osd.6 class hdd device 7 osd.7 class hdd device 8 osd.8 class hdd device 9 osd.9 class hdd # types type 0 osd type 1 host type 2 chassis type 3 rack type 4 row type 5 pdu type 6 pod type 7 room type 8 datacenter type 9 region type 10 root # buckets host node1 { id -3 # do not change unnecessarily id -4 class hdd # do not change unnecessarily id -13 class ssd # do not change unnecessarily # weight 0.107 alg straw2 hash 0 # rjenkins1 item osd.0 weight 0.059 item osd.5 weight 0.049 } host node2 { id -5 # do not change unnecessarily id -6 class hdd # do not change unnecessarily id -14 class ssd # do not change unnecessarily # weight 0.107 alg straw2 hash 0 # rjenkins1 item osd.1 weight 0.059 item osd.6 weight 0.049 } host node3 { id -7 # do not change unnecessarily id -8 class hdd # do not change unnecessarily id -15 class ssd # do not change unnecessarily # weight 0.107 alg straw2 hash 0 # rjenkins1 item osd.2 weight 0.059 item osd.7 weight 0.049 } host node4 { id -9 # do not change unnecessarily id -10 class hdd # do not change unnecessarily id -16 class ssd # do not change unnecessarily # weight 0.107 alg straw2 hash 0 # rjenkins1 item osd.3 weight 0.059 item osd.8 weight 0.049 } host node5 { id -11 # do not change unnecessarily id -12 class hdd # do not change unnecessarily id -17 class ssd # do not change unnecessarily # weight 0.107 alg straw2 hash 0 # rjenkins1 item osd.4 weight 0.059 item osd.9 weight 0.049 } root default { id -1 # do not change unnecessarily id -2 class hdd # do not change unnecessarily id -18 class ssd # do not change unnecessarily # weight 0.537 alg straw2 hash 0 # rjenkins1 item node1 weight 0.107 item node2 weight 0.107 item node3 weight 0.107 item node4 weight 0.107 item node5 weight 0.107 } # rules rule replicated_rule { id 0 type replicated min_size 1 max_size 10 step take default step chooseleaf firstn 0 type host step emit } rule ssd-rule { id 1 type replicated min_size 1 max_size 10 step take default class ssd step chooseleaf firstn 0 type host step emit } # end crush map
看到 host 下 多出來了 id -6 class hdd, root default 下多了一個 id -18 class ssd ,而且 rule ssd-rule id 爲1
9. 建立一個使用 ssd-rule 規則的存儲池
osd pool create <poolname> <int[0-]> {<int[0-]>} {replicated|erasure} create pool {<erasure_code_profile>} {<rule>} {<int>}
[root@monitor1 tmp]# ceph osd pool create cinyipool 128 128 ssd-rule pool 'cinyipool' created
10. 查詢池信息, crush_rule 1
[root@monitor1 tmp]# ceph osd pool ls detail pool 1 'senyintpool' replicated size 2 min_size 1 crush_rule 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 168 flags hashpspool max_bytes 96636764160 stripe_width 0 pool 2 'fengpool' replicated size 2 min_size 1 crush_rule 0 object_hash rjenkins pg_num 512 pgp_num 512 last_change 174 flags hashpspool stripe_width 0 pool 3 'cinyipool' replicated size 2 min_size 1 crush_rule 1 object_hash rjenkins pg_num 128 pgp_num 128 last_change 201 flags hashpspool stripe_width 0
11. 建立對象測試cinyipool
[root@monitor1 tmp]# rados -p cinyipool ls [root@monitor1 ~]# rados -p cinyipool put test ceph-deploy-ceph.log [root@monitor1 ~]# rados -p cinyipool ls test
12. 查看對象osd組
[root@monitor1 ~]# ceph osd map cinyipool test osdmap e203 pool 'cinyipool' (3) object 'test' -> pg 3.40e8aab5 (3.35) -> up ([2,4], p2) acting ([2,4], p2)
############################################
徹底手動管理crush, 須要在/etc/ceph/ceph.conf配置中將掛鉤關掉
osd_crush_update_on_start=false
#######################################
1. 故障域隔離, 同份數據的不一樣副本分配到不一樣的故障域,下降數據損壞分線
2. 負載均衡, 數據可以均勻的分佈在磁盤容量不等的存儲幾點,避免部分節點空閒部分節點超載,從而影響系統性能。
3. 控制節點加入離開時引發的數量遷移量,當節點離開時,最優的數據遷移是隻有離線節點上的數據被遷移到其餘節點,正常的工做節點數據不會遷移
此過程建立ceph-mon
數據目錄,檢索監視器映射並監視密鑰環,並將ceph-mon
守護程序添加到羣集。若是這隻致使兩個監視器守護程序,則能夠經過重複此過程添加更多監視器,直到您有足夠數量的ceph-mon
守護程序來實現仲裁
1 .在安裝的新monitor機器上建立目錄
[root@monitor1 mon]# ssh node1 [root@node1 mon]# mkdir -p /var/lib/ceph/mon/ceph-monitor4
2. 建立一個臨時目錄{tmp} 保留建立過程當中的文件,此目錄應該與上一步中建立的監視器默認目錄不一樣,而且能夠執行刪除
[root@node1 ~]# mkdir /root/tmp
3. 檢索監視器的密鑰環,其中{tmp}
是檢索到的密鑰環的路徑,而且{key-filename}
是包含檢索到的監視器密鑰的文件的名稱
[root@node1 tmp]# ceph auth get mon. -o tmp/client.monitornode1.keyring [root@node1 tmp]# cat client.monitornode1.keyring [mon.] key = AQCXta1cAAAAABAADjzWdjX1BWVg6WxMYgru4w== caps mon = "allow *"
4. 檢索monitor映射
[root@node1 tmp]# ceph mon getmap -o /root/tmp/map-node1monitor
5. 建立監視器,指定 keyring monitor map
sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}
root@node1 tmp]# ceph-mon -i monitor4 --mkfs --monmap /root/tmp/map-node1monitor --keyring /root/tmp/client.monitornode1.keyring
6. 查看monitor map
[root@node1 tmp]# ceph mon dump dumped monmap epoch 7 epoch 7 fsid 7d518340-a55f-4061-98ff-debb0d85e00b last_changed 2019-04-18 15:29:20.594821 created 2019-04-10 18:01:43.338493 0: 172.16.230.21:6789/0 mon.monitor1 1: 172.16.230.22:6789/0 mon.monitor2 2: 172.16.230.23:6789/0 mon.monitor3
7. 啓動監視器,新monitor將自動加入集羣, 守護進程須要經過參數綁定到那個地址 --public-addr {ip:port}
[root@node1 tmp]# ceph-mon -i monitor4 --public-addr 172.16.230.24:6789
8. 再次查看 monitor map, monitor4 已經加入到了monitor map中
[root@node1 tmp]# ceph mon dump dumped monmap epoch 8 epoch 8 fsid 7d518340-a55f-4061-98ff-debb0d85e00b last_changed 2019-04-18 15:33:23.309986 created 2019-04-10 18:01:43.338493 0: 172.16.230.21:6789/0 mon.monitor1 1: 172.16.230.22:6789/0 mon.monitor2 2: 172.16.230.23:6789/0 mon.monitor3 3: 172.16.230.24:6789/0 mon.monitor4
9. 在ceph admin 修改ceph.conf,添加 [mon.monitor4]
[root@monitor1 ceph-cluster]# cat /etc/ceph/ceph.conf [global] fsid = 7d518340-a55f-4061-98ff-debb0d85e00b mon_initial_members = monitor1, monitor2, monitor3, monitor4 # 添加monitor4 mon_host = 172.16.230.21,172.16.230.22,172.16.230.23 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd pool default size = 3 osd pool default min size = 2 public network = 172.16.230.0/24 cluster network = 1.1.1.0/24 osd pool default pg num=250 osd pool defaultpgp num=250 [mon] mgr modules = dashboard [mon.monitor4] host=node1 #指定host 主機名爲node1
addr=172.16.230.24:6789
1. 中止進程
[root@node1 tmp]# ps -ef | grep ceph ceph 1460 1 0 Apr16 ? 00:25:47 /usr/bin/ceph-osd -f --cluster ceph --id 5 --setuser ceph --setgroup ceph ceph 7593 1 0 Apr16 ? 00:27:16 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph root 76314 1 1 15:33 ? 00:00:06 ceph-mon -i monitor4 --public-addr 172.16.230.24:6789 # 使用 systemctl stop ceph-mon@monitor4 沒法關閉,直接kill [root@node1 tmp]# kill -9 76314
2. 從mon集羣map 刪除monitor
[root@monitor1 ceph-cluster]# ceph mon rm monitor4 [root@monitor1 ceph-cluster]# ceph mon dump dumped monmap epoch 9 epoch 9 fsid 7d518340-a55f-4061-98ff-debb0d85e00b last_changed 2019-04-18 15:41:49.912011 created 2019-04-10 18:01:43.338493 0: 172.16.230.21:6789/0 mon.monitor1 1: 172.16.230.22:6789/0 mon.monitor2 2: 172.16.230.23:6789/0 mon.monitor3
3 . 修改配置文件
4. 同步配置文件
模擬monitor 集羣中 , monitor2 monitor3 宕機, monitor1 正常, 此時集羣不可用,如下爲日誌
1. 在存活的monitor1 關閉進程
[root@monitor1 ~]# systemctl stop ceph-mon@monitor1
2. . 在存活的monitor1 提取mon map
[root@monitor1 ~]# ceph-mon -i monitor1 --extract-monmap /tmp/monmap
3. 刪除未存活的有問題的monitor(monitor2 monitor3 刪除)
[root@monitor1 ~]# monmaptool /tmp/monmap --rm monitor2
[root@monitor1 ~]# monmaptool /tmp/monmap --rm monitor3
4. 把存活的monitor1 注入到 mon map中。monitor1
[root@monitor1 ~]# ceph-mon -i monitor1 --inject-monmap /tmp/monmap
5. 啓動monitor1 mon進程
[root@monitor1 ~]# systemctl start ceph-mon@monitor1
6. 確認ceph 狀態,
[root@monitor1 ~]# ceph -s cluster: id: 7d518340-a55f-4061-98ff-debb0d85e00b health: HEALTH_OK services: mon: 1 daemons, quorum monitor1 #變成一個monitor1。 mgr: monitor1(active), standbys: monitor3, monitor2 osd: 10 osds: 10 up, 10 in data: pools: 3 pools, 832 pgs objects: 1 objects, 14 KiB usage: 110 GiB used, 410 GiB / 520 GiB avail pgs: 832 active+clean
7. 修改ceph.conf, 而且同步配置文件。
查看mon leader
ceph quorum_status
顯示ceph密鑰
ceph auth ls
顯示pg映射
ceph pg dump
顯示osd 狀態
ceph osd stat
把crush map 導出到文件
ceph osd getcrushmap -o file
顯示osd映射
ceph osd dump
顯示osd tree
ceph osd tree
刪除osd
ceph osd rm osd.0
osd down
ceph osd down osd.0
marked down osd.0.
osd out
ceph osd out osd.0
osd in
ceph osd in osd.0
當磁盤發生故障,rados 會從新平衡,爲了儘可能減少由於數據遷移形成的性能降低,須要臨時關閉數據遷移,再新的osd添加完成後,再啓動
[root@monitor1 ceph-cluster]# ceph osd set --help
osd set full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover
noout mon在過300秒(mon_osd_down_out_interval)後 自動將down 的osd 標記爲out, 一旦out數據就會遷移,(使用noout 防止數據遷移)
nobackfill 防止集羣進行數據回填操做
norecover 防止硬盤數據發生恢復。
1. 設置集羣爲noout ceph osd set noout
ceph osd set nobackfill
ceph osd set norecover
2. 更換硬盤後, 添加osd節點
維護完成後,從新啓動osd
ceph osd unset noout
ceph osd unset nobackfill
ceph osd unset norecover
建立一個池
[root@monitor1 ceph-cluster]# ceph osd pool create fengjianpool 20 20
查看集羣狀態:
[root@monitor1 ceph-cluster]# ceph -s cluster: id: 7d518340-a55f-4061-98ff-debb0d85e00b health: HEALTH_WARN too few PGs per OSD (6 < min 30) services: mon: 3 daemons, quorum monitor1,monitor2,monitor3 mgr: monitor1(active), standbys: monitor3, monitor2 osd: 10 osds: 10 up, 10 in data: pools: 1 pools, 20 pgs objects: 0 objects, 0 B usage: 110 GiB used, 410 GiB / 520 GiB avail pgs: 20 active+clean
警告 osd分佈pg數量小於默認的30
查看 osd節點默認的osd pg數量
[root@monitor1 ceph-cluster]# ssh node1 [root@monitor1 ceph-cluster]# ceph daemon osd.0 config show | grep pg_warn "mon_pg_warn_max_object_skew": "10.000000", "mon_pg_warn_min_objects": "10000", "mon_pg_warn_min_per_osd": "30", #默認是30 "mon_pg_warn_min_pool_objects": "1000",
因爲建立池的時候 指定了6個PG, 致使分佈到OSD的pg 數小於警告閥值30, 能夠經過調整閥值,或者增大pool的PG 來消除警告
[root@monitor1 ceph-cluster]# ceph osd pool set fengjianpool pg_num 128 set pool 4 pg_num to 128 [root@monitor1 ceph-cluster]# ceph osd pool set fengjianpool pgp_num 128 set pool 4 pgp_num to 128 一般 PG 與 PGP 相等
再次查看集羣狀態
[root@monitor1 ceph-cluster]# ceph -s cluster: id: 7d518340-a55f-4061-98ff-debb0d85e00b health: HEALTH_OK services: mon: 3 daemons, quorum monitor1,monitor2,monitor3 mgr: monitor1(active), standbys: monitor3, monitor2 osd: 10 osds: 10 up, 10 in data: pools: 1 pools, 128 pgs objects: 0 objects, 0 B usage: 110 GiB used, 410 GiB / 520 GiB avail pgs: 128 active+clean
PG的規劃
公式
(TargePGsPerOSD) * (OSDNumber) * (DataPercent) PoolPGCount = ------------------------------------------------------------------- PoolSize
設計計算公式的目的是確保這個集羣擁有足夠多的PG,從而實現數據均勻分佈在各個osd上, 同時可以有效避免在恢復 和 回填的時候應爲pg/osd 比值太高所形成的問題,
例如:
在osd 接受IO請求的過程當中, 若是出現網絡抖動,致使IO阻塞,經過ceph health detail 查看阻塞的 osd,而後重啓osd
32 ops are blocked > 32.768 sec on osd.3 1 osds have slow requests io阻塞在osd.3 上了, 重啓osd.3 systemctl restart ceph-osd@3
Ceph文件系統(CephFS)是一個符合POSIX標準的文件系統,它使用Ceph存儲集羣來存儲其數據。
一 .自動建立mds
[root@monitor1 ceph-cluster]# ceph-deploy mds create monitor1 monitor2 monitor3
查看進程
[root@monitor3 ~]# ceph fs dump dumped fsmap epoch 12 e12 enable_multiple, ever_enabled_multiple: 0,0 compat: compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table,9=file layout v2,10=snaprealm v2} legacy client fscid: -1 No filesystems configured Standby daemons: 54415: 172.16.230.21:6801/2394929704 'monitor1' mds.-1.0 up:standby seq 2 54455: 172.16.230.23:6800/1603591467 'monitor3' mds.-1.0 up:standby seq 25 54459: 172.16.230.22:6800/3349427734 'monitor2' mds.-1.0 up:standby seq 2
Ceph文件系統至少須要兩個RADOS池,一個用於數據,一個用於元數據。配置這些池時,您可能會考慮:
[root@monitor1 ceph-cluster]# ceph osd pool create cephfs_data 256 256 [root@monitor1 ceph-cluster]# ceph osd pool create cephfs_metadata 256 256
建立文件系統
[root@monitor1 ceph-cluster]# ceph fs new cephfs cephfs_metadata cephfs_data
建立文件系統後,查看mds狀態
[root@monitor1 ceph-cluster]# ceph mds stat cephfs-1/1/1 up {0=monitor2=up:active}, 2 up:standby
使用內核驅動掛載
[root@monitor1 ceph-cluster]# mkdir /data/testmount [root@monitor1 ceph-cluster]# mount -t ceph 172.16.230.21:6789,172.16.230.22:6789,172.16.230.23:6789:/ /data/testmount/ -o name=admin,secret=AQAdv61c4OmVIxAAy217majZLxBO4Cl6+0pBTw==
或者使用 secretfile 掛載
[root@monitor1 ceph-cluster]# ceph-authtool -p /etc/ceph/ceph.client.admin.keyring" > admin.key
[root@monitor1 ceph-cluster]# mount -t ceph 172.16.230.21:6789,172.16.230.22:6789,172.16.230.23:6789:/ /data/testmount/ -o name=admin,secretfile=admin.key
查看掛載狀況 [root@monitor1 ceph-cluster]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/cl-root xfs 36G 9.9G 26G 28% / devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 84K 3.9G 1% /dev/shm tmpfs tmpfs 3.9G 185M 3.7G 5% /run tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 175M 840M 18% /boot tmpfs tmpfs 783M 16K 783M 1% /run/user/42 tmpfs tmpfs 783M 0 783M 0% /run/user/0 172.16.230.21:6789,172.16.230.22:6789,172.16.230.23:6789:/ ceph 520G 111G 410G 22% /data/testmount
linux fstab 自動掛載
172.16.230.21:6789,172.16.230.22:6789,172.16.230.23:6789:/ /mnt/ceph ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2
用戶空間掛載 CEPH 文件系統
1. 安裝 ceph-fuse
yum -y install ceph-fuse
2. 拷貝密鑰環文件
從ceph 集羣拷貝 ceph.conf 和 ceph.client.admin.keyring 到客戶端 /etc/ceph/目錄下
而且 屬於644 權限 chmod 644 /etc/ceph/ceph.client.admin.keyring
3. 使用ceph-fuse 掛載命令
[root@monitor1 data]# ceph-fuse -m 172.16.230.21:6789,172.16.230.22:6789,172.16.230.23:6789 /data/testmount ceph-fuse[501809]: starting ceph client 2019-04-22 13:56:48.920 7f625cd17c00 -1 init, newargv = 0x7f625e28faa0 newargc=7 ceph-fuse[501809]: starting fuse [root@monitor1 data]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/cl-root xfs 36G 9.9G 26G 28% / devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 84K 3.9G 1% /dev/shm tmpfs tmpfs 3.9G 241M 3.6G 7% /run tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 175M 840M 18% /boot tmpfs tmpfs 783M 16K 783M 1% /run/user/42 tmpfs tmpfs 783M 0 783M 0% /run/user/0 ceph-fuse fuse.ceph-fuse 54G 0 54G 0% /data/testmount
4. 直接使用ceph存儲默認身份驗證
ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 172.16.230.21:6789,172.16.230.22:6789,172.16.230.23:6789 /data/testmount
二手動建立mds
1. 在node1 上手動建立mds目錄,
[root@node1 mon]# mkdir /var/lib/ceph/mds/ceph-node1
2. 編輯ceph.conf
並添加MDS部分
[mds.{$id}] host = {hostname} [mds.node1] host=172.16.230.24
3. 建立身份驗證和密鑰環
ceph auth get-or-create mds.{$id} mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-{$id}/keyring [root@monitor1 ceph-cluster]# ceph auth get-or-create mds.node1 mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-node1/keyring
4. 啓動mds
[root@node1 ceph-node1]# systemctl restart ceph-mds@node1
5.查看映射關係
映射前 [root@monitor1 ceph-monitor1]# ceph mds stat cephfs-1/1/1 up {0=monitor2=up:active}, 2 up:standby 映射後 [root@monitor1 ceph-monitor1]# ceph mds stat cephfs-1/1/1 up {0=monitor2=up:active}, 3 up:standby
6. 刪除原數據服務器
若是用元數據已經被掛載,須要先卸載,再刪除
1. 關閉node1進程
[root@node1 ceph-node1]# systemctl stop ceph-mds@node1
2. 查看 映射關係
[root@monitor1 ceph-monitor1]# ceph mds stat cephfs-1/1/1 up {0=monitor2=up:active}, 2 up:standby
3. 修改admin 配置文件,去掉[mds.node1]
同步ceph到各個節點
ceph集羣 支持多個cephfs 文件系統,不過須要添加命令容許建立多個文件系統
[root@monitor1 ceph-cluster]# ceph fs flag set enable_multiple true --yes-i-really-mean-it
建立文件系統
ceph osd pool create senyintfs_data 128 128 ceph osd pool create senyintfs_metadata 128 128 ceph fs new senyintfs senyintfs_data senyintfs_metadata
查看文件系統
[root@monitor1 ceph-cluster]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
name: senyintfs, metadata pool: senyintfs_metadata, data pools: [senyintfs_data ]
查看fs map
[root@monitor1 ceph-cluster]# ceph fs dump
刪除cephfs
關閉全部mds進程 [root@monitor1 ~]# systemctl stop ceph-mds@monitor1 [root@monitor2 ~]# systemctl stop ceph-mds@monitor2 [root@monitor3 ~]# systemctl stop ceph-mds@monitor3
2. 刪除cephfs
[root@monitor1 ceph-cluster]# ceph fs rm senyintfs --yes-i-really-mean-it
3. 啓動mds
[root@monitor1 ceph-cluster]# ceph fs set cephfs max_file_size 65538
將集羣關閉
[root@monitor1 ceph-cluster]# ceph fs set cephfs down true
打開集羣
[root@monitor1 ceph-cluster]# ceph fs set cephfs down false cephfs marked up, max_mds = 1
經過如下方式限制元數據服務器(MDS)緩存的大小:
此外,您可使用mds_cache_reservation參數爲MDS操做指定緩存預留。緩存預留受限於內存或inode限制的百分比,默認設置爲5%。此參數的目的是讓MDS爲其緩存維護額外的內存保留,以便使用新的元數據操做。所以,MDS一般應低於其內存限制,由於它將從客戶端調用舊狀態,以便將未使用的元數據丟棄在其緩存中。
CephFS容許在系統中的任何目錄上設置配額。配額能夠限制 目錄層次結構中該點下面的字節數或文件數
限制:
1. 配額是合做的,非對抗性的。CephFS配額依賴於正在掛載文件系統的客戶端的合做,以在達到限制時中止編寫器。沒法阻止修改或對抗的客戶端編寫所需數據。不該依賴配額來防止在客戶端徹底不受信任的環境中填充系統。 2. 配額是不精確的。寫入文件系統的進程將在達到配額限制後的短期內中止。它們將不可避免地被容許在配置的限制上寫入一些數據。他們可以走多遠的配額主要取決於時間量,而不是數據量。通常來講,編寫者將在超過配置限制的十秒內中止。 3. 配額在內核客戶端4.17及更高版本中實現。 用戶空間客戶端(libcephfs,ceph-fuse)支持配額。Linux內核客戶端> = 4.17支持CephFS配額,但僅限於模擬+集羣。內核客戶端(甚至是最新版本)將沒法處理舊羣集上的配額,即便它們可能可以設置配額擴展屬性。 4. 與基於路徑的安裝限制一塊兒使用時,必須仔細配置配額。客戶端須要訪問配置了配額的目錄inode才能強制執行配置。若是客戶端/home/user基於MDS能力限制訪問特定路徑(例如),而且在他們無權訪問(例如/home)的祖先目錄上配置配額,則客戶端將不強制執行該配額。使用基於路徑的訪問限制時,請務必在客戶端受限制的目錄上配置配額(例如/home/user)或嵌套在其下的內容。 5. 已刪除或更改的快照文件數據不計入配額。
設置配額:
ceph.quota.max_files - 文件限制 ceph.quota.max_bytes - 字節限制 setfattr -n ceph.quota.max_bytes -v 100000000 /some/dir # 100 MB setfattr -n ceph.quota.max_files -v 10000 /some/dir # 10,000 files
查看配額
getfattr -n ceph.quota.max_bytes /some/dir
getfattr -n ceph.quota.max_files /some/dir
要刪除的配合
setfattr -n ceph.quota.max_bytes -v 0 /some/dir setfattr -n ceph.quota.max_files -v 0 /some/dir
塊是一個字節序列(例如,512字節的數據塊)。基於塊的存儲接口是使用旋轉介質(如硬盤,CD,軟盤甚至傳統的9軌磁帶)存儲數據的最經常使用方法。無處不在的塊設備接口使虛擬塊設備成爲與Ceph等海量數據存儲系統交互的理想選擇。
Ceph塊設備是精簡配置,可調整大小並存儲在Ceph集羣中多個OSD條帶化的數據。Ceph塊設備利用 RADOS功能,如快照,複製和一致性。Ceph的 RADOS塊設備(RBD)使用內核模塊或librbd
庫與OSD進行交互。
注意: 內核模塊可使用Linux頁面緩存。對於librbd
基於應用程序,Ceph支持RBD緩存。
1. 建立pool
ceph osd pool fengjian 128 12
2. 初始化pool給rbd使用
[root@monitor1 ~]# rbd pool init fengjian
3. 建立使用塊設備的用戶。
默認使用ceph集羣的admin帳戶,此用戶對集羣有徹底訪問權限,建議設置用戶權限。
4. 建立塊設備
rbd create fengjian/test_image --size 10G --object-size 24 --image-feature layering
# --object-size 建立的object 大小, 24即 2^24, 16MB, 默認爲 2^22, 4MB
# --image-feature layering 只使用layering功能
5. 查看池, 查看池中的塊設備
[root@node5 ~]# ceph osd lspools 12 fengjian [root@node5 ~]# rbd ls fengjian -l NAME SIZE PARENT FMT PROT LOCK test2_image 10 GiB 2 test_image 10 GiB 2
6. 查看詳細的塊設備信息
[root@node5 ~]# rbd info fengjian/test_image rbd image 'test_image': size 10 GiB in 2560 objects order 22 (4 MiB objects) id: 1494a6b8b4567 block_name_prefix: rbd_data.1494a6b8b4567 format: 2 features: layering op_features: flags: create_timestamp: Sun May 5 15:52:05 2019
7. 調整塊設備的大小
# 增長塊設備 [root@node5 ~]# rbd resize fengjian/test_image --size 5G Resizing image: 100% complete...done. #縮小塊設備,須要加參數--allow-shrink [root@node5 ~]# rbd resize fengjian/test_image --size 2048 --allow-shrink
8. 映射與解除映射 rbd
映射 rbd map fengjia/test2_image mkfs.xfs /dev/rbd0 mkdir /data/cephrbd0 mount /dev/rbd0 /data/cephrbd0 解除映射 umount /data/cephrbd0 rbd unmap /dev/rbd0
9.刪除塊設備
[root@node5 ~]# rbd rm fengjian/test2_image
10. trash 垃圾塊 刪除, 查看, 恢復
1 先把塊挪到垃圾箱中 rbd trash move fengjian/test2_image 2. 查看垃圾箱中的塊 rbd trash ls fengjian 14a5e6b8b4567 test3_image 1700d6b8b4567 test2_image 3. 從垃圾箱中恢復 rbd trash restore fengjian/14a5e6b8b4567 3. 或者從垃圾箱中刪除 rbd trash rm fengjian/14a5e6b8b4567
ceph 內核操做
獲取image列表
1. 獲取ceph 的全部pool ceph osd lspools 2. 獲取池中的 全部imges rbd ls -l fengjian
映射塊設備
將rbd image映射到內核模塊, 須要制定pool 的名字,image名字 和用戶名。
rbd device map fengjian/test_image (--id admin)
若是使用cephx身份驗證,必須制定密碼, 可能來自 祕鑰環或者包含祕鑰文件
rbd device map rbd/image --id admin --keyring /path/to/keyring
rbd device map rbd/image --id admin --keyfile /path/to/file
顯示映射的塊設備
rbd device list
取消映射的塊設備
rbd device unmap /dev/rbd/{poolname}/imagename rbd device unmap /dev/rbd/fengjian/rbd0 或者使用 rbd device unmap /dev/rbd0
rbd 快照
快照是特定時間點圖像狀態的只讀副本
1 建立快照
[root@monitor1 ~]# rbd device map fengjian/test_image /dev/rbd0 [root@monitor1 ~]# rbd device ls id pool image snap device 0 fengjian test_image - /dev/rbd0 格式化rbd0 [root@monitor1 ~]# mkfs.xfs /dev/rbd0 -f 掛載rbd [root@monitor1 ~]# mount /dev/rbd0 /data/testmount/ 建立快照 [root@monitor1 ~]# rbd snap create fengjian/test_image@test_image_snap 查看快照 [root@monitor1 ~]# rbd snap ls fengjian/test_image SNAPID NAME SIZE TIMESTAMP 8 test_image_snap 7 GiB Thu May 30 17:56:19 2019 拷貝文件到目錄中 [root@monitor1 ~]# cp /root/icbc-api-sdk-cop_v2_20190508.zip /data/testmount 恢復快照--必須卸載rbd [root@monitor1 ~]# umount /data/testmount/ 恢復快照 [root@monitor1 ~]# rbd snap rollback fengjian/test_image@test_image_snap 掛載目錄 [root@monitor1 ~]# mount /dev/rbd0 /data/testmount/ [root@monitor1 ~]# cd /data/testmount/ [root@monitor1 testmount]# ls
刪除快照
[root@monitor1 testmount]# rbd snap rm fengjian/test_image@test_image_snap Removing snap: 100% complete...done.
刪除image中的全部快照
[root@monitor1 testmount]# rbd snap rm fengjian/test_image
#建立一個快照 rbd snap create fengjian/test_image@test_image_snap #查看快照 rbd snap ls fengjian/test_image #在克隆以前,確保快照處於protected狀態 rbd snap protect fengjian/test_image #建立一個新的pool1: ceph osd pool create linuxpool 128 128 #克隆到pool1: rbd clone fengjian/test_image@test_image_snap linuxpool/new_image #查看快照的children: rbd children fengjian/test_image@test_image_snap #linuxpool/new_image #扁平化能夠斷開父子間的依賴關係: rbd flatten linuxpool/new_image
Ceph對象網關是一個對象存儲接口,它構建在librados
應用程序之上, 爲Ceph存儲集羣提供RESTful網關。Ceph對象存儲支持兩個接口:
Ceph對象存儲使用Ceph對象網關守護程序(radosgw
),它是一個用於與Ceph存儲集羣交互的HTTP服務器。因爲它提供與OpenStack Swift和Amazon S3兼容的接口,所以Ceph對象網關具備本身的用戶管理。Ceph對象網關能夠將數據存儲在用於存儲來自Ceph文件系統客戶端或Ceph塊設備客戶端的數據的相同Ceph存儲集羣中。S3和Swift API共享一個公共命名空間,所以您可使用一個API編寫數據並使用另外一個API檢索它
概念和術語
AccessKey 、 SecreKey :使用S3 須要頒發AccessKey 和 SecretKey, AccesKey 用於標識客戶的身份, SecretKey 做爲私鑰形式存放於客戶端,不在網絡中傳遞,SecretKey一般用做計算請求籤名的祕鑰,用於保證請求是來自制定的客戶, 使用AccessKey進行身份識別,加上secretKey進行數字簽名,便可完成應用接入與認證受權。
1. Regin(區域)
建立Bucket時,須要選擇Region,Region 通常於標識資源存儲的物理位置,好比中國區,歐洲區等
2. Region的外網域名
如 s3.cn.ceph.com 標識中國區的S3服務對外接入地址
3.Service(服務)
S3 提供給用戶的虛擬存儲空間,在這個虛擬空間中,每一個用戶能夠擁有一個到多個Bucket
4. Bucket(存儲空間)
Bucket 是存放object的容器,全部的object都必須存放在特定的Bucket中,在RGWz中默認每一個用戶最多能夠常見1000個Bucket,每一個
Bucket中能夠存放無限個object,Bucket下的Object 是一個評級的結構,Bucket的名稱全局惟一且命名規則與DNS名字規則相同。
5. Object:
在S3中,用戶操做的基本數據單元是object, 單個object容許存儲0~5TB的數據,object包括key和data,其中 key是object的名字, data是object的數據,
安裝 radosgw
[root@monitor1 yum.repos.d]# yum -y install ceph-radosgw
建立rgw實例
[root@monitor1 ceph-cluster]# ceph-deploy rgw create monitor1 monitor2 monitor3 ......... [ceph_deploy.rgw][INFO ] The Ceph Object Gateway (RGW) is now running on host monitor3 and default port 7480
#使用civeweb 方式比較簡單,使用nginx做爲前端服務的。
安裝nginx
[root@monitor1 yum.repos.d]# yum -y install nginx
bucket index是整個RGW裏面一個很是關鍵的數據結構,用於存儲bucket的索引數據,默認狀況下單個bucket的index所有存儲在一個shard文件(shard數量爲0,主要以OMAP-keys方式存儲在leveldb中),隨着單個bucket內的Object數量增長,整個shard文件的體積也在不斷增加,當shard文件體積過大就會引起各類問題,常見的問題有:
參考:
https://blog.csdn.net/lyf0327/article/details/83315207
http://xiaqunfeng.cc/2017/07/04/ceph-Luminous%E6%96%B0%E5%8A%9F%E8%83%BD%E4%B9%8Bcrush-class/