ceph mimic版本 部署安裝


 

 

 

 

 

 

 

 

 

 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節點

##########################################################################

sdc用於osd, bluestore 在 sdc上自動創建db和wal ,不使用ssd硬盤的情況下
注意:老版本的ceph-deploy --overwrite-conf osd prepare/activate 已過期了,我們使用ceph-deploy osd create
[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 capsceph 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,這在密鑰環包含管理員密鑰時是合適的。但是,如果您打算為特定用戶或用戶組使用密鑰環,請確保執行chownchmod建立適當的密鑰環所有權和訪問權限。

 

第一種創建用戶方法:

當 添加用戶到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

 

 

有時,通常在主機很少的“小”集群中(例如,使用小型測試集群),采用outOSD 的事實可能會產生一個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可以是upout在從配置中刪除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。

設備還可以具有與它們相關聯設備類(例如, hddssd),允許它們通過壓潰規則方便地成為目標。

 

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對象存儲支持兩個接口:

  1. S3兼容:提供對象存儲功能,其接口與Amazon S3 RESTful API的大部分兼容。
  2. 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文件體積過大就會引發各種問題,常見的問題有:

  1. 對index pool進行scrub或deep-scrub的時候,如果shard對應的Object過大,會極大消耗底層存儲設備性能,造成io請求超時。
  2. 底層deep-scrub的時候耗時過長,會出現request blocked,導致大量http請求超時而出現50x錯誤,從而影響到整個RGW服務的可用性。
  3. 當壞盤或者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/

https://cloud.tencent.com/developer/article/1032858


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM