ceph mimic版本 部署安裝

 

 

 

 

 

 

 

 

 

 ceph 尋址過程前端

1. file --- object映射, 把file分割成N個相同的對象node

2. object - PG 映射, 利用靜態hash獲得objectID的僞隨機值,在 "位與" mask 上使得object獲取屬於本身的PGpython

3. pg -- osd 映射, 將pg映射到實際的存儲單元osd, RADOS 利用 crush 算法, 由pgid獲得一組n個osd,再由osd daemon 執行映射到本地的object在本地系統中存儲,訪問,數據維護, 這次映射功能直接受到crush map 以及rule應縣個,只有cluster map 和 rule不發生改變時,pg 和osd的映射關係才固定。linux

 

 

 

1. 基本概念nginx

ceph 的組件採用插件的機制,包括後端存儲,KV 數據庫,磁盤管理等。各組件之間能夠靈活的組合。web

基於後端存儲包括 filestore, kvstore,memstore 和 bluestore。 Ceph Luminous 引用了 bluestore 的存儲類型,不依賴文件系統,直接管理物理磁盤,相比filestore 在 io 寫入的時候路徑更短,也避免了二次寫入的問題,性能會更加好。算法

KV 存儲主要包括LevelDB, MemDB 和新的 RocksDB。RocksDB 是 Facebook 基於 LevelDB 開發的 key-value 數據,並對閃存(flash)有更友好的優化。數據庫

RocksDB 本來只基於文件系統的。可是得益於它自己的靈活性,bluestore 實現了一套 RocksDB 的 Env 接口,還在BlueStore 上面實現了一套 BlueFS 的接口與BluestoreEnv 對接。使得 RocksDB 能夠存儲在 BlueStore 上面。bootstrap

 

BlueStore選擇將DB 和WAL 分區交給BlueFs來使用,此時這兩個分區分別存儲BlueStore後端產生的元數據和日誌文件,這樣整個存儲系統經過元數據對數據的操做效率極高,同時經過日誌事務來維持系統的穩定性,整個系統相對來講穩定性就極高後端

 

後端存儲使用 bluestore 時,wal 是 RocksDB 的write-ahead log,提早寫的日誌,  至關於以前的 journal 數據,db 是 RocksDB 的metadata 信息。在磁盤選擇原則是 block.wal > block.db > block

若是全部的數據都在單塊盤上,那是沒有必要指定 wal &db 的大小的。

若是 wal & db 是在不一樣的盤上,因爲 wal/db 通常都會分的比較小,是有滿的可能性的。若是滿了,這些數據會遷移到下一個快的盤上(wal - db - main)。因此最少不會由於數據滿了,而形成沒法寫入
 
使用混合機械和固態硬盤設置時,block.db爲Bluestore建立足夠大的邏輯卷很是重要 。一般,block.db應該具備 儘量大的邏輯卷。

建議block.db尺寸不小於4% block。例如,若是block大小爲1TB,則block.db 不該小於40GB。

若是不使用快速和慢速設備的混合,則不須要爲block.db(或block.wal)建立單獨的邏輯卷。Bluestore將在空間內自動管理這些內容block


使用bluestore 時的 osd 分區
 
若是是使用的 ceph-disk 管理磁盤,他會創建一個 100MB 的分區,來存放 keyring / whoami 這些信息,這和以前的邏輯是同樣的。

若是使用 ceph-volume 管理磁盤,/var/lib/ceph/osd/ceph-0 分區會從tmpfs 掛載過來(也就是內存)

 

 

Ceph Monitor(ceph-mon)維護集羣狀態的映射,包括監視器映射,管理器映射,OSD映射和CRUSH映射。這些映射是Ceph守護進程相互協調所需的關鍵集羣狀態。監視器還負責管理守護進程和客戶端之間的身份驗證。冗餘和高可用性一般至少須要三個監視器。


Ceph Manager守護程序(ceph-mgr)負責跟蹤運行時指標和Ceph集羣的當前狀態,包括存儲利用率,當前性能指標和系統負載。Ceph Manager守護進程還託管基於python的插件來管理和公開Ceph集羣信息,包括基於Web的儀表板和REST API。高可用性一般至少須要兩名經理。

Ceph OSD(對象存儲守護進程 ceph-osd)存儲數據,處理數據複製,恢復,從新平衡,並經過檢查其餘Ceph OSD守護進程來獲取心跳,爲Ceph監視器和管理器提供一些監視信息。冗餘和高可用性一般至少須要3個Ceph OSD。


Ceph元數據服務器(MDS ceph-mds)表明Ceph文件系統存儲元數據(即,Ceph塊設備和Ceph對象存儲不使用MDS)。Ceph的元數據服務器容許POSIX文件系統的用戶來執行基本的命令(如 ls,find沒有放置在一個Ceph存儲集羣的巨大負擔,等等)。

 

 

2. 環境準備

 

 

三、 統一主機hosts

[root@monitor1 ceph-cluster]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.230.21 monitor1
172.16.230.22 monitor2
172.16.230.23 monitor3
172.16.230.24 node1
172.16.230.25 node2
172.16.230.26 node3
172.16.230.27 node4
172.16.230.28 node5

for i in {22..28}; do scp /etc/hosts root@172.16.230.$i:/etc/; done

 

4. 時間同步

[root@master1 ~]# crontab -l
#Ansible: 每隔5分鐘同步時間服務器
*/5 * * * *  /usr/sbin/ntpdate 192.168.20.220

 

5. ssh密碼打通

6. 修改visudo

找到 Defaults requiretty 選項,直接註釋掉,這樣 ceph-deploy 就能夠用以前建立的用戶(建立部署 Ceph 的用戶 )鏈接了。

 

7. 設置阿里yum源

[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

 8. ntp時間同步

*/1 * * * *  /usr/sbin/ntpdate ntp5.aliyun.com

 

9.安裝ceph-deploy包

[root@master1 ~]# yum -y install ceph-deploy

 

 10. 建立配置文件目錄

 [root@master1 ~]# mkdir /opt/ceph-cluster

 

 11. 清除集羣

想要從新開始,請執行如下操做以清除配置
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys

要清除Ceph包
ceph-deploy purge {ceph-node} [{ceph-node}]
例:
ceph-deploy  purge monitor1  osd1

 

12. 建立羣集

[root@master1 ~]# mkdir  /opt/ceph-cluster
[root@master1 ~]# cd  /opt/ceph-cluster
[root@master1 ceph-cluster]# ceph-deploy new monitor1 monitor2 monitor3

當前目錄會生成 Ceph配置文件,監視器密鑰密鑰環和新羣集的日誌文件
ceph.conf   ceph-eploy-ceph.log   ceph.mon.keyring

 

 13. 修改ceph.conf 配置文件

[global]
fsid = a5e478b2-f3bf-4fbf-930a-69a6686502d1
mon_initial_members = monitor1, monitor2, monitor3
mon_host = 172.16.230.21,172.16.230.22,172.16.230.23
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2                        # 修改的副本數
public network = 172.16.230.0/24                 # 指定public 網絡
cluster network = 1.1.1.0/24                     # 指定cluster 網絡
mon_allow_pool_delete = true # 容許刪除pool, 須要重啓monitor

 

 14. 安裝ceph 

#全部節點安裝ceph ceph-radosgw

yum -y install ceph ceph-radosgw

 

15. 初始監視器並收集密鑰

 [root@monitor1 ceph-cluster]# ceph-deploy mon create-initial 

執行完成後會在/etc/ceph目錄多如下內容
ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-rbd.keyring
ceph.bootstrap-rbd-mirror.keyring

 

16. 將ceph.client.admin.keyring拷貝到各個節點上

[root@monitor1 ceph-cluster]# ceph-deploy --overwrite-con  admin  monitor1 monitor2 monitor3 node1 node2 node3 node4 node5

 

17. 查看osd節點分區狀況

首先看一下塊設備信息

[root@node1 ~]# lsblk 
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0           2:0    1    4K  0 disk 
sda           8:0    0   40G  0 disk 
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   39G  0 part 
  ├─cl-root 253:0    0 35.1G  0 lvm  /
  └─cl-swap 253:1    0  3.9G  0 lvm  [SWAP]
sdb           8:16   0   70G  0 disk 
sdc           8:32   0   50G  0 disk 
sr0          11:0    1 1024M  0 rom

 

18.銷燬osd節點硬盤數據

[root@monitor1 ceph-cluster]# ceph-deploy disk zap node1 /dev/sdc
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node2 /dev/sdc
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node3 /dev/sdc
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node4 /dev/sdc
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node5 /dev/sdc

 

 

建立一個bluestore的osd,有如下幾種設備選擇:

  • 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響應超時而致使整個集羣出現雪崩。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

參考:

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

相關文章
相關標籤/搜索