ceph 尋址過程
1. file --- object映射, 把file分割成N個相同的對象
2. object - PG 映射, 利用靜態hash得到objectID的偽隨機值,在 "位與" mask 上使得object獲取屬於自己的PG
3. pg -- osd 映射, 將pg映射到實際的存儲單元osd, RADOS 利用 crush 算法, 由pgid得到一組n個osd,再由osd daemon 執行映射到本地的object在本地系統中存儲,訪問,數據維護, 此次映射功能直接受到crush map 以及rule應縣個,只有cluster map 和 rule不發生改變時,pg 和osd的映射關系才固定。
1. 基本概念
ceph 的組件采用插件的機制,包括后端存儲,KV 數據庫,磁盤管理等。各組件之間可以靈活的組合。
基於后端存儲包括 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 上面。
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. 環境准備
3、 統一主機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,有以下幾種設備選擇:
- A block device, a block.wal, and a block.db device
- A block device and a block.wal device
- A block device and a block.db device
- A single block device
參考:http://docs.ceph.com/docs/master/ceph-volume/lvm/prepare/#bluestore
block device也有如下三種選項:
- 整塊磁盤
- 磁盤分區
- 邏輯卷(a logical volume of LVM)
配置使用整塊磁盤時,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在池中存儲數據,池是用於存儲對象的邏輯組。池管理放置組的數量,副本的數量以及池的CRUSH規則。要將數據存儲在池中,您必須擁有一個具有池權限的經過身份驗證的用戶。Ceph可以快照池。有關其他詳細信息,請參閱池。
- 放置組: Ceph將對象映射到放置組(PG)。放置組(PG)是邏輯對象池的分片或片段,它將對象作為一組放入OSD中。當Ceph將數據存儲在OSD中時,放置組會減少每個對象元數據的數量。更多數量的放置組(例如,每個OSD 100個)可以實現更好的平衡。有關其他詳細信息,請參閱 放置組。
- CRUSH地圖: CRUSH是允許Ceph在沒有性能瓶頸的情況下擴展的重要組成部分,不受可擴展性的限制,並且沒有單點故障。CRUSH映射將群集的物理拓撲結構提供給CRUSH算法,以確定應存儲對象及其副本的數據的位置,以及如何跨故障域執行此操作以增加數據安全性等。有關其他詳細信息,請參閱CRUSH Maps。
- 平衡器:平衡器是一種功能,可以自動優化設備間PG的分布,實現平衡的數據分布,最大化可以存儲在群集中的數據量,並在OSD之間均勻分配工作負載。
OSD相互監控
完成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/
添加刪除monitor
為了實現高可用性,您應該運行至少具有三個監視器的生產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
添加OSD
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
刪除osd(mimic 版本) 節點
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 到其他節點
############################################
刪除老版本osd
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被銷毀更換后,需要更換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 .....
POOL FULL
一個或者多個池已經達到起配合, 不再允許寫入
查看池的配合和利用率
[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:每個池存儲的名義對象數。
PG數量
少於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 map
CRUSH算法確定如何存儲和通過計算數據存儲位置檢索數據。CRUSH使Ceph客戶能夠直接與OSD通信,而不是通過集中式服務器或代理。通過算法確定的存儲和檢索數據的方法,Ceph可以避免單點故障,性能瓶頸以及對其可擴展性的物理限制。
CRUSH需要集群的映射,並使用CRUSH映射在OSD中偽隨機存儲和檢索數據,並在集群中統一分布數據
CRUSH地圖包含OSD列表,用於將設備聚合到物理位置的“存儲桶”列表,以及告訴CRUSH如何在Ceph集群池中復制數據的規則列表。通過反映安裝的基礎物理組織,CRUSH可以建模 - 從而解決相關設備故障的潛在來源。典型的來源包括物理接近,共享電源和共享網絡。通過將此信息編碼到群集映射中,CRUSH放置策略可以跨不同的故障域分隔對象副本,同時仍保持所需的分布。例如,為了解決並發故障的可能性,可能需要確保數據副本在使用不同架子,機架,電源,控制器和/或物理位置的設備上。
部署OSD時,它們會自動放置在CRUSH映射中,該映射位於host
以其運行的主機的主機名命名的節點下 。這與默認的CRUSH故障域相結合,可確保副主機或擦除代碼分片在主機之間分離,單個主機故障不會影響可用性。但是,對於較大的群集,管理員應仔細考慮他們選擇的故障域。例如,跨機架分離副本對於中型到大型集群來說很常見。
CRUSH 結構
CRUSH映射包括描述集群物理拓撲的層次結構,以及定義關於如何在這些設備上放置數據的策略的一組規則。層次結構ceph-osd
在葉子上有設備(守護進程),內部節點對應於其他物理特征或分組:主機,機架,行,數據中心等
DEVICES
設備是ceph-osd
可以存儲數據的單獨守護程序。對於群集中的每個OSD守護程序,通常會在此處定義一個。設備由id(非負整數)和名稱標識,通常osd.N
在哪里N
是設備ID。
設備還可以具有與它們相關聯的設備類(例如, hdd
或ssd
),允許它們通過壓潰規則方便地成為目標。
TYPES AND BUCKETS
存儲桶是層次結構中內部節點的CRUSH術語:主機,機架,行等.CRUSH映射定義了一系列用於描述這些節點的類型。默認情況下,這些類型包括:
osd (or device)
host
chassis
rack
row
pdu
pod
room
datacenter
region
root
crush rule
規則定義有關如何跨層次結構中的設備分布數據的策略
查看集群定義的規則
[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" } ] } ]
手動編輯crush 地圖
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
#######################################
crsh 一致性hash
1. 故障域隔離, 同份數據的不同副本分配到不同的故障域,降低數據損壞分線
2. 負載均衡, 數據能夠均勻的分布在磁盤容量不等的存儲幾點,避免部分節點空閑部分節點超載,從而影響系統性能。
3. 控制節點加入離開時引起的數量遷移量,當節點離開時,最優的數據遷移是只有離線節點上的數據被遷移到其他節點,正常的工作節點數據不會遷移
添加刪除monitor
此過程創建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
模擬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 的重新平衡
當磁盤發生故障,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
PG問題處理:
創建一個池
[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 比值過高所造成的問題,
例如:
PG阻塞
在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文件系統
Ceph文件系統(CephFS)是一個符合POSIX標准的文件系統,它使用Ceph存儲集群來存儲其數據。
MDS 元數據部署
一 .自動創建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池,一個用於數據,一個用於元數據。配置這些池時,您可能會考慮:
- 對元數據池使用更高的復制級別,因為此池中的任何數據丟失都可能導致整個文件系統無法訪問。
- 使用較低延遲的存儲(如SSD)作為元數據池,因為這將直接影響客戶端上文件系統操作的觀察延遲。
[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
使用 fuse 掛載
用戶空間掛載 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管理命令
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)緩存的大小:
- 內存限制:Luminous版本中引入的新行為。使用mds_cache_memory_limit參數。我們建議使用內存限制而不是inode計數限制。
- Inode計數:使用mds_cache_size參數。默認情況下,禁用通過inode計數限制MDS緩存。
此外,您可以使用mds_cache_reservation參數為MDS操作指定緩存預留。緩存預留受限於內存或inode限制的百分比,默認設置為5%。此參數的目的是讓MDS為其緩存維護額外的內存保留,以便使用新的元數據操作。因此,MDS通常應低於其內存限制,因為它將從客戶端調用舊狀態,以便將未使用的元數據丟棄在其緩存中。
cephfs 配額設置
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
ceph rbd塊設備
塊是一個字節序列(例如,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對象網關
Ceph對象網關是一個對象存儲接口,它構建在librados
應用程序之上, 為Ceph存儲集群提供RESTful網關。Ceph對象存儲支持兩個接口:
- S3兼容:提供對象存儲功能,其接口與Amazon S3 RESTful API的大部分兼容。
- Swift兼容:提供對象存儲功能,其接口與OpenStack Swift API的大部分兼容。
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文件體積過大就會引發各種問題,常見的問題有:
- 對index pool進行scrub或deep-scrub的時候,如果shard對應的Object過大,會極大消耗底層存儲設備性能,造成io請求超時。
- 底層deep-scrub的時候耗時過長,會出現request blocked,導致大量http請求超時而出現50x錯誤,從而影響到整個RGW服務的可用性。
- 當壞盤或者osd故障需要恢復數據的時候,恢復一個大體積的shard文件將耗盡存儲節點性能,甚至可能因為OSD響應超時而導致整個集群出現雪崩。
ceph 優化配置文件
[global] auth cluster required = cephx auth service required = cephx auth client required = cephx cephx require signatures = False # Kernel RBD does NOT support signatures! cephx cluster require signatures = True cephx service require signatures = False fsid = e19a0961-d284-41e3-b890-9322f2d4ad36 max open files = 131072 osd pool default pg num = 1024 osd pool default pgp num = 1024 osd pool default size = 2 osd pool default min size = 1 osd pool default crush rule = 0 cluster addr = 172.16.254.13 public addr = 172.16.230.13 cluster network = 172.16.254.0/24 public network = 172.16.230.0/24 debug_lockdep = 0/0 debug_context = 0/0 debug_crush = 0/0 debug_buffer = 0/0 debug_timer = 0/0 debug_filer = 0/0 debug_objecter = 0/0 debug_rados = 0/0 debug_rbd = 0/0 debug_journaler = 0/0 debug_objectcatcher = 0/0 debug_client = 0/0 debug_osd = 0/0 debug_optracker = 0/0 debug_objclass = 0/0 debug_filestore = 0/0 debug_journal = 0/0 debug_ms = 0/0 debug_monc = 0/0 debug_tp = 0/0 debug_auth = 0/0 debug_finisher = 0/0 debug_heartbeatmap = 0/0 debug_perfcounter = 0/0 debug_asok = 0/0 debug_throttle = 0/0 debug_mon = 0/0 debug_paxos = 0/0 debug_rgw = 0/0 osd crush update on start = false mon_pg_warn_max_per_osd = 3000 mds_session_blacklist_on_timeout = false mon_max_pg_per_osd = 3000 rgw_num_rados_handles = 2 rgw_num_async_rados_threads = 64 mon_osd_reporter_subtree_level = osd_domain mon_osd_down_out_subtree_limit = " " mon_osd_min_in_ratio = 0.66 mon_pg_warn_max_object_skew = 0 mds_standby_replay = true mds_reconnect_timeout = 30 mds_session_timeout = 20 [mon] mon_allow_pool_delete = true mon clock drift allowed = 2 mon clock drift warn backoff = 30 [mon.node1] host = node1 mon addr = 172.16.230.13 [mon.node2] host = node2 mon addr = 172.16.230.14 [mon.node3] host = node3 mon addr = 172.16.230.15 [osd] osd max object namespace len = 64 osd_max_object_name_len = 1024 osd mkfs type = xfs osd mkfs options xfs = -f -i size=2048 osd mount options xfs = noatime,largeio,inode64,swalloc osd_op_thread_timeout = 30 s3store_max_ops = 100 s3cache_max_dirty_objects = 2000 bluestore = true enable experimental unrecoverable data corrupting features = bluestore rocksdb bluestore fsck on mount = true osd objectstore = bluestore bluestore_fsck_on_mkfs_deep = false bluestore_fsck_on_mount_deep = false journal_max_write_bytes = 10485760 journal_max_write_entries = 100 journal_queue_max_ops = 300 journal_queue_max_bytes = 33554432 osd_op_threads = 2 osd_client_message_cap = 5000 [osd.0] host = node1 bluestore block path = /dev/sdavgdata/sda-block1 [osd.1] host = node2 bluestore block path = /dev/sdavgdata/sda-block1 [osd.2] host = node3 bluestore block path = /dev/sdavgdata/sda-block1 [osd.3] host = node2 bluestore block path = /dev/sdbvgdata/sdb-block1 [osd.4] host = node1 bluestore block path = /dev/sdbvgdata/sdb-block1 [osd.5] host = node3 bluestore block path = /dev/sdbvgdata/sdb-block1 [osd.6] host = node2 bluestore block path = /dev/sdgvg/sdg-block1 bluestore block db path = /dev/sdavg/sda-db-0f754ef0-edce-45af-aa25-ed087ed329d3 bluestore block wal path = /dev/sdavg/sda-wal-cf6592ae-22fe-428c-9db8-4e1b3b8b1fd8 [osd.7] host = node3 bluestore block path = /dev/sdgvg/sdg-block1 bluestore block db path = /dev/sdavg/sda-db-0f754ef0-edce-45af-aa25-ed087ed329d3 bluestore block wal path = /dev/sdavg/sda-wal-cf6592ae-22fe-428c-9db8-4e1b3b8b1fd8 [osd.8] host = node1 bluestore block path = /dev/sdgvg/sdg-block1 bluestore block db path = /dev/sdavg/sda-db-0f754ef0-edce-45af-aa25-ed087ed329d3 bluestore block wal path = /dev/sdavg/sda-wal-cf6592ae-22fe-428c-9db8-4e1b3b8b1fd8 [osd.9] host = node2 bluestore block path = /dev/sdcvg/sdc-block1 bluestore block db path = /dev/sdbvg/sdb-db-24d7ed5b-88c0-42cc-a397-f435e719e39a bluestore block wal path = /dev/sdbvg/sdb-wal-d3eb3b40-38ea-46e0-aec3-2d68f86a6ba0 [osd.10] host = node3 bluestore block path = /dev/sdcvg/sdc-block1 bluestore block db path = /dev/sdbvg/sdb-db-24d7ed5b-88c0-42cc-a397-f435e719e39a bluestore block wal path = /dev/sdbvg/sdb-wal-d3eb3b40-38ea-46e0-aec3-2d68f86a6ba0 [osd.11] host = node1 bluestore block path = /dev/sdcvg/sdc-block1 bluestore block db path = /dev/sdbvg/sdb-db-24d7ed5b-88c0-42cc-a397-f435e719e39a bluestore block wal path = /dev/sdbvg/sdb-wal-d3eb3b40-38ea-46e0-aec3-2d68f86a6ba0 [osd.12] host = node2 bluestore block path = /dev/sdmvg/sdm-block1 bluestore block db path = /dev/sdavg/sda-db-1f5dfd2e-a2ad-424a-8399-4d4b9b03f8a8 bluestore block wal path = /dev/sdavg/sda-wal-4788bca9-888e-4db6-96db-6acd922609d9 [osd.13] host = node3 bluestore block path = /dev/sdmvg/sdm-block1 bluestore block db path = /dev/sdavg/sda-db-1f5dfd2e-a2ad-424a-8399-4d4b9b03f8a8 bluestore block wal path = /dev/sdavg/sda-wal-4788bca9-888e-4db6-96db-6acd922609d9 [osd.14] host = node1 bluestore block path = /dev/sdmvg/sdm-block1 bluestore block db path = /dev/sdavg/sda-db-1f5dfd2e-a2ad-424a-8399-4d4b9b03f8a8 bluestore block wal path = /dev/sdavg/sda-wal-4788bca9-888e-4db6-96db-6acd922609d9 [osd.15] host = node2 bluestore block path = /dev/sddvg/sdd-block1 bluestore block db path = /dev/sdbvg/sdb-db-23b626fd-259a-4f72-957c-f2495bb978fa bluestore block wal path = /dev/sdbvg/sdb-wal-edd70a12-ac98-48bb-b1c2-0338776d9964 [osd.16] host = node3 bluestore block path = /dev/sddvg/sdd-block1 bluestore block db path = /dev/sdbvg/sdb-db-23b626fd-259a-4f72-957c-f2495bb978fa bluestore block wal path = /dev/sdbvg/sdb-wal-edd70a12-ac98-48bb-b1c2-0338776d9964 [osd.17] host = node1 bluestore block path = /dev/sddvg/sdd-block1 bluestore block db path = /dev/sdbvg/sdb-db-23b626fd-259a-4f72-957c-f2495bb978fa bluestore block wal path = /dev/sdbvg/sdb-wal-edd70a12-ac98-48bb-b1c2-0338776d9964 [osd.18] host = node2 bluestore block path = /dev/sdivg/sdi-block1 bluestore block db path = /dev/sdavg/sda-db-7aefabfa-d1ab-461b-a39c-9a4545d8d75d bluestore block wal path = /dev/sdavg/sda-wal-4a388d88-fe95-472f-a00b-94e1abae7a91 [osd.19] host = node3 bluestore block path = /dev/sdivg/sdi-block1 bluestore block db path = /dev/sdavg/sda-db-7aefabfa-d1ab-461b-a39c-9a4545d8d75d bluestore block wal path = /dev/sdavg/sda-wal-4a388d88-fe95-472f-a00b-94e1abae7a91 [osd.20] host = node1 bluestore block path = /dev/sdivg/sdi-block1 bluestore block db path = /dev/sdavg/sda-db-7aefabfa-d1ab-461b-a39c-9a4545d8d75d bluestore block wal path = /dev/sdavg/sda-wal-4a388d88-fe95-472f-a00b-94e1abae7a91 [osd.21] host = node2 bluestore block path = /dev/sdkvg/sdk-block1 bluestore block db path = /dev/sdbvg/sdb-db-096cae87-b3da-426f-aa41-dcc625ebcc9c bluestore block wal path = /dev/sdbvg/sdb-wal-ac9d1bb5-cf4a-4285-8299-e96c09d400d8 [osd.22] host = node3 bluestore block path = /dev/sdkvg/sdk-block1 bluestore block db path = /dev/sdbvg/sdb-db-096cae87-b3da-426f-aa41-dcc625ebcc9c bluestore block wal path = /dev/sdbvg/sdb-wal-ac9d1bb5-cf4a-4285-8299-e96c09d400d8 [osd.23] host = node1 bluestore block path = /dev/sdkvg/sdk-block1 bluestore block db path = /dev/sdbvg/sdb-db-096cae87-b3da-426f-aa41-dcc625ebcc9c bluestore block wal path = /dev/sdbvg/sdb-wal-ac9d1bb5-cf4a-4285-8299-e96c09d400d8 [osd.24] host = node2 bluestore block path = /dev/sdlvg/sdl-block1 bluestore block db path = /dev/sdavg/sda-db-55f7eba6-309f-4b3b-a352-7203febe79e5 bluestore block wal path = /dev/sdavg/sda-wal-8112d8c8-a452-4c92-b712-9f3abd2e8937 [osd.25] host = node1 bluestore block path = /dev/sdlvg/sdl-block1 bluestore block db path = /dev/sdavg/sda-db-55f7eba6-309f-4b3b-a352-7203febe79e5 bluestore block wal path = /dev/sdavg/sda-wal-8112d8c8-a452-4c92-b712-9f3abd2e8937 [osd.26] host = node3 bluestore block path = /dev/sdlvg/sdl-block1 bluestore block db path = /dev/sdavg/sda-db-55f7eba6-309f-4b3b-a352-7203febe79e5 bluestore block wal path = /dev/sdavg/sda-wal-8112d8c8-a452-4c92-b712-9f3abd2e8937 [osd.27] host = node2 bluestore block path = /dev/sdfvg/sdf-block1 bluestore block db path = /dev/sdbvg/sdb-db-a4fdf1c5-0c62-4d2d-ab11-0e72091a30ab bluestore block wal path = /dev/sdbvg/sdb-wal-6b149894-636a-4cc7-ad03-c96f3b8c040d [osd.28] host = node3 bluestore block path = /dev/sdfvg/sdf-block1 bluestore block db path = /dev/sdbvg/sdb-db-a4fdf1c5-0c62-4d2d-ab11-0e72091a30ab bluestore block wal path = /dev/sdbvg/sdb-wal-6b149894-636a-4cc7-ad03-c96f3b8c040d [osd.29] host = node1 bluestore block path = /dev/sdfvg/sdf-block1 bluestore block db path = /dev/sdbvg/sdb-db-a4fdf1c5-0c62-4d2d-ab11-0e72091a30ab bluestore block wal path = /dev/sdbvg/sdb-wal-6b149894-636a-4cc7-ad03-c96f3b8c040d [osd.30] host = node2 bluestore block path = /dev/sdhvg/sdh-block1 bluestore block db path = /dev/sdavg/sda-db-c9d6edff-a28a-46a0-b021-8f8f59a92eec bluestore block wal path = /dev/sdavg/sda-wal-3f3af9ad-1fc4-4456-bf92-e042c2253945 [osd.31] host = node1 bluestore block path = /dev/sdhvg/sdh-block1 bluestore block db path = /dev/sdavg/sda-db-c9d6edff-a28a-46a0-b021-8f8f59a92eec bluestore block wal path = /dev/sdavg/sda-wal-3f3af9ad-1fc4-4456-bf92-e042c2253945 [osd.32] host = node3 bluestore block path = /dev/sdhvg/sdh-block1 bluestore block db path = /dev/sdavg/sda-db-c9d6edff-a28a-46a0-b021-8f8f59a92eec bluestore block wal path = /dev/sdavg/sda-wal-3f3af9ad-1fc4-4456-bf92-e042c2253945 [osd.33] host = node2 bluestore block path = /dev/sdnvg/sdn-block1 bluestore block db path = /dev/sdbvg/sdb-db-7a9322d7-f79c-4a1b-8283-9c55f00da234 bluestore block wal path = /dev/sdbvg/sdb-wal-7582639e-f77b-4031-82f0-8d344ded3885 [osd.34] host = node1 bluestore block path = /dev/sdnvg/sdn-block1 bluestore block db path = /dev/sdbvg/sdb-db-7a9322d7-f79c-4a1b-8283-9c55f00da234 bluestore block wal path = /dev/sdbvg/sdb-wal-7582639e-f77b-4031-82f0-8d344ded3885 [osd.35] host = node3 bluestore block path = /dev/sdnvg/sdn-block1 bluestore block db path = /dev/sdbvg/sdb-db-7a9322d7-f79c-4a1b-8283-9c55f00da234 bluestore block wal path = /dev/sdbvg/sdb-wal-7582639e-f77b-4031-82f0-8d344ded3885 [osd.36] host = node2 bluestore block path = /dev/sdjvg/sdj-block1 bluestore block db path = /dev/sdavg/sda-db-1f6e823e-a03d-4ea3-8432-8a95d90d3f03 bluestore block wal path = /dev/sdavg/sda-wal-15ea59e1-dfd2-4d1c-9572-201e7ca71a29 [osd.37] host = node1 bluestore block path = /dev/sdjvg/sdj-block1 bluestore block db path = /dev/sdavg/sda-db-1f6e823e-a03d-4ea3-8432-8a95d90d3f03 bluestore block wal path = /dev/sdavg/sda-wal-15ea59e1-dfd2-4d1c-9572-201e7ca71a29 [osd.38] host = node3 bluestore block path = /dev/sdjvg/sdj-block1 bluestore block db path = /dev/sdavg/sda-db-1f6e823e-a03d-4ea3-8432-8a95d90d3f03 bluestore block wal path = /dev/sdavg/sda-wal-15ea59e1-dfd2-4d1c-9572-201e7ca71a29 [osd.39] host = node2 bluestore block path = /dev/sdevg/sde-block1 bluestore block db path = /dev/sdbvg/sdb-db-fc6c4020-2f76-4266-b26d-d8a253c04c9c bluestore block wal path = /dev/sdbvg/sdb-wal-66a4bfa3-340e-4d58-94e3-949257f9105a [osd.40] host = node1 bluestore block path = /dev/sdevg/sde-block1 bluestore block db path = /dev/sdbvg/sdb-db-fc6c4020-2f76-4266-b26d-d8a253c04c9c bluestore block wal path = /dev/sdbvg/sdb-wal-66a4bfa3-340e-4d58-94e3-949257f9105a [osd.41] host = node3 bluestore block path = /dev/sdevg/sde-block1 bluestore block db path = /dev/sdbvg/sdb-db-fc6c4020-2f76-4266-b26d-d8a253c04c9c bluestore block wal path = /dev/sdbvg/sdb-wal-66a4bfa3-340e-4d58-94e3-949257f9105a [mds.node1] host = node1 mds addr = 172.16.230.13 [mds.node2] host = node2 mds addr = 172.16.230.14 [mds.node3] host = node3 mds addr = 172.16.230.15 [client.rgw.node1] host = node1 keyring = /etc/ucsm/ucsm.client.radosgw.keyring rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock log file = /var/log/ceph/ucsm-rgw-node1.log rgw data = /var/lib/ceph/radosgw/ucsm-rgw.node1 rgw enable usage log = true rgw enable ops log = true rgw frontends = "civetweb port=7480" [client.rgw.node2] host = node2 keyring = /etc/ucsm/ucsm.client.radosgw.keyring rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock log file = /var/log/ceph/ucsm-rgw-node2.log rgw data = /var/lib/ceph/radosgw/ucsm-rgw.node2 rgw enable usage log = true rgw enable ops log = true rgw frontends = "civetweb port=7480" [client.rgw.node3] host = node3 keyring = /etc/ucsm/ucsm.client.radosgw.keyring rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock log file = /var/log/ceph/ucsm-rgw-node3.log rgw data = /var/lib/ceph/radosgw/ucsm-rgw.node3 rgw enable usage log = true rgw enable ops log = true rgw frontends = "civetweb port=7480" [mgr] mgr modules = restful mon_warn_on_pool_no_app = false mon_pg_warn_max_per_osd = 3000 mon_max_pg_per_osd = 3000 [mgr.node1] host = node1 mgr addr = 172.16.230.13 mgr data = /var/lib/ceph/mgr/ucsm-node1 [mgr.node2] host = node2 mgr addr = 172.16.230.14 mgr data = /var/lib/ceph/mgr/ucsm-node2 [mgr.node3] host = node3 mgr addr = 172.16.230.15 mgr data = /var/lib/ceph/mgr/ucsm-node3
參考:
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/