ceph的一些學習過程

內容比較雜,個人學習ceph的一些理解。不涉及底層。只是使用過程的理解。

公共網絡和集羣網絡區分

官方建議用兩個網絡運營 Ceph 存儲集羣:一個公共網(前端)和一個集羣網(後端)。
上面部署 只用了一個網卡 公共網和集羣網使用的同一個網絡。

測試使用雙網絡。。。在虛擬機上測試。
虛擬機設置兩個網絡適配器
三個 ceph 集羣節點設置兩個就夠了,客戶端和集羣通信還是使用的公共網絡。
假設橋接的是公共網絡 NAT的是 集羣網絡,公共網絡要不能訪問集羣網絡。
ip addr
這時 ceph的配置文件應該是類似於

mon_initial_members = ceph-1
mon_host = 192.168.199.81
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

public_network = 192.168.199.0/24
cluster_network = 192.168.136.0/24

public_network 表示公共網絡網段
cluster_network 表示集羣網絡網段
mon_host 表示 監視器 所在主機。客戶端與集羣通信也是通過這個監視器完成的(應該吧)。

完成後查看,發現狀態正常(我這個是重新把ceph 集羣安裝了一遍。中間修改cluster_network和public_network 還需要更改 map 這個還不太明白)
集羣狀態正常

現在把其中一個節點的 NAT網絡關掉,也就是集羣網絡。 測試ceph-2
網絡正常
修改 ens34 網卡

vi /etc/sysconfig/network-scripts/ifcfg-ens34

修改ONBOOT 爲 no

ONBOOT=no

重啓網絡

systemctl restart network

NAT網絡失效

查看ceph集羣狀態
ceph 集羣

發現集羣狀態爲 WARN 少了一個 osd。看來集羣節點之間通信確實使用的集羣網。cluster_network 設置是生效的。

這時候再將NAT網絡開啓。。等了一段時間發現 ceph狀態還是沒有恢復正常
狀態WARN
查看osd 樹
ceph osd tree
keyikandao 編號爲1的osd 狀態 是down 主機時 ceph-2 也是就剛停止又重啓集羣網的主機。。。
這時候需要重新啓動該節點的osd 服務 在ceph-2主機執行

 systemctl start [email protected]

重新啓動osd服務
發現狀態正常了。。。

mon和mgr的設置

mon 維護集羣狀態的映射,包括監視器映射、管理器映射、OSD映射、MDS映射和擁擠映射。這些映射是Cephdaemons相互協調所需的關鍵集羣狀態。監視器還負責管理守護進程和客戶端之間的身份驗證。冗餘和高可用性通常需要至少三個監視器。
mgr 負責跟蹤運行時指標和ceph集羣的當前狀態,包括存儲利用率、當前性能指標和系統負載。cephManager守護進程還宿主基於python的模塊來管理和公開集羣信息,包括基於web的集羣信息。Ceph Dashboard和RESTAPI。高可用性通常至少需要兩名manager。一般會在部署mon的節點都部署一個mgr(儘管並不強制要求必須部署在一起)。這個CephManager是版本 luminous版本之後 才推出的,在這個版本後成爲必備組件。
**部署額外的管理器守護進程可以確保,如果一個守護進程或主機失敗,另一個守護進程可以在不中斷服務的情況下接管。**這個意思就是說一個集羣中部署了多個mgr 實時起作用的只有一個。
只有一個狀態位active
兩個準備接手,一個正在活躍。

ceph建議的是mon 節點最好不要少於三個 然後保證在ceph集羣節點數的半數以上。對於只有三個節點的。測試環境。可以三個節點都安裝mon。(另,看到有些文檔建議模擬節點的個數應該是單數,這個不太明白原因)

創建集羣時加入

mon的創建,使用ceph-deploy部署ceph集羣時。
設置

ceph-deploy new host1,... 

可將mon節點寫入ceph.conf配置文件。
然後再使用 命令

ceph-deploy admin host1 ...

可將配置文件 放入到ceph集羣主機的對應位置。在ceph集羣未啓動時,這樣設置的mon就加入了ceph集羣。但是,當ceph集羣已經啓動,更改配置文件是沒用的。最重要的是要將新的mon 加入 ceph集羣的映射 map。

集羣創建完成後新增mon

新增mon需要設置 配置文件public_network
修改配置文件

vi ceph.conf
public_network = 192.168.199.0/24

將配置文件設置到所有集羣主機

ceph-deploy --overwrite-conf admin ceph-1 ceph-2 ceph-3

使用ceph-deploy新增mon節點的方法手動添加 還是看官方文檔吧。

ceph-deploy mon add host1

使用該方法一次只能添加一個mon

ceph-deploy mon create host1 [host2 host3]

create可以一次創建多個mon節點

將ceph-2,ceph-3也作爲mon節點

ceph-deploy mon create ceph-2 ceph-3

如果未添加配置文件的public_network。創建完畢。可能提示

[ceph-3][WARNIN] ceph-3 is not defined in `mon initial members`
[ceph-3][WARNIN] monitor ceph-3 does not exist in monmap

查看 ceph 集羣狀態,發現並沒有新增的mon在運行
ceph -mon
這個錯誤需要看他人博客。具體應該是mon 的keyring 不一致。
https://blog.csdn.net/weixin_33924220/article/details/92602783
enmmmm 試了好久,還是沒有加進去。這個我也不知道如何解決。最好先設置public_network 再添加mon 節點。有那麼一點可能是時間同步問題。
設置一下 chronyd 或者ntp

添加mon節點後 可以將新建的mon節點寫到配置文件中。

新增mgr

ceph-deploy mgr create ceph-2 ceph-3

3mon3mgr

mon和mgr的移除

在移除mon之前要確保移除後ceph集羣可以形成新的法定人數。
mon移除

ceph-deploy mon destroy host1 [host2]
ceph-deploy mon destroy ceph-1

移除一個後 2個mon似乎難以形成法定人數。。再重新將ceph-1的mon加上去。然後移除兩個。。。重點是ceph.conf 配置文件中mon只有 ceph-1。所以在添加ceph-2和ceph-3的mon後,最好也寫入配置文件。 host和host之間要,隔開

如果移除了"quorum_leader_name" 再重新選定法定人的過程比較艱難。感覺很難成功。。可能是因爲集羣太小 mon 太少的緣故。

使用ceph-deploy new 建立的mon不要去移除,因爲寫在了配置文件,移除可能有意外的結果。。一般只要停止該節點的mon 服務就會導致mon集羣失敗。。。別說移除了。
對於三節點的ceph集羣。。。如果只使用new創建了 一個mon ,那麼是可以運行的,但是如果後續增加了,如果有兩個了,那麼刪除掉一個會導致,無法形成法定人數。。。。

如果一個節點本來有mon 使用ceph-deploy destroy 命令刪除後。再添加使用指令

ceph-deploy mon create 

纔有可能成功。。。不過一旦低於法定人數。。。再創建一個mon 也是很難再次恢復ceoh-mon的健康狀態,可能有各種意想不到的問題

Ceph 用 Paxos 算法,要求法定人數裏的大多數達成一致。可以只用一個監視器形成法定人數,然而你不能用兩個監視器確定大多數。大多數監視器的比例必須像: 1:1 、 2:3 、 3:4 、 3:5 、 4:6 等等。
這個過程我們大多是情況下是不能控制的。還有,並不是說有四個mon監視器的話,就只有三個監視器是一致的,大多情況下,四個監視器都是一致的,3:4 只是說 有一個監視器意外情況壞掉了,那麼mon依靠3個還是可以形成法定人數。。但是當有2個mon壞掉了。比如手動停止了服務,2個mon是無法形成法定人數的。
我之前一直理解構成ceph節點中設置mon的節點數:總結點數。。。偏差的有點大。

未找到 ceph-deploy移除mgr的指令。

查看mon狀態的指令

可以查看監視器

ceph quorum_status --format json-pretty

查看詳細狀態

ceph mon_status --format json-pretty

osd的一些指令。

osd的移除。直接看官方文檔翻譯吧。http://docs.ceph.org.cn/rados/operations/add-or-rm-osds/
https://ceph.readthedocs.io/en/latest/rados/operations/add-or-rm-osds/#removing-osds-manual

osd的創建。有filestore 和bluestore 的區別。這個概念,有點大。。還不是很瞭解。filestore存在寫放大的問題,要寫到journal一次,data一次且存儲通過xfs等文件系統,維護文件系統多了開銷,,,bluestore直接使用裸盤存儲,上面沒有文件系統。。。相比較在使用ssd 等新存儲設備bluestore更佔優勢。
轉自http://www.itworld123.com/2019/06/04/storage/ceph/Ceph%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8EBlueStore%E7%AE%80%E6%9E%90/
bluestore
filestore

創建osd,bluestore是默認格式

ceph-deploy osd create --data /dev/sdb ceph-3

等同於

ceph-deploy osd create --data /dev/sdb --bluestore ceph-3

如果osd 格式爲 filestore 要指定–journal,日誌文件的位置

[root@ceph-admin my-cluster]# ceph-deploy osd create -h
usage: ceph-deploy osd create [-h] [--data DATA] [--journal JOURNAL]
                              [--zap-disk] [--fs-type FS_TYPE] [--dmcrypt]
                              [--dmcrypt-key-dir KEYDIR] [--filestore]
                              [--bluestore] [--block-db BLOCK_DB]
                              [--block-wal BLOCK_WAL] [--debug]
                              [HOST]

positional arguments:
  HOST                  Remote host to connect

optional arguments:
  -h, --help            show this help message and exit
  --data DATA           The OSD data logical volume (vg/lv) or absolute path
                        to device
  --journal JOURNAL     Logical Volume (vg/lv) or path to GPT partition
  --zap-disk            DEPRECATED - cannot zap when creating an OSD
  --fs-type FS_TYPE     filesystem to use to format DEVICE (xfs, btrfs)
  --dmcrypt             use dm-crypt on DEVICE
  --dmcrypt-key-dir KEYDIR
                        directory where dm-crypt keys are stored
  --filestore           filestore objectstore
  --bluestore           bluestore objectstore
  --block-db BLOCK_DB   bluestore block.db path
  --block-wal BLOCK_WAL
                        bluestore block.wal path
  --debug               Enable debug mode on remote ceph-volume calls
[root@ceph-admin my-cluster]# 

–journal JOURNAL Logical Volume (vg/lv) or path to GPT partition
日誌文件位置一定是一個gpt 分區或者 邏輯卷 lvm卷管理。
官方建議data 數據盤和 journal日誌最好不要放在一個盤中。另,日誌放在ssd硬盤上更有效率。
使用/dev/sdb 作爲osd data /dev/sdc1 分區作爲osd journal
使用fdisk 工具創建一個 gpt 分區,大小2G。

fdisk /dev/sdc

設置gpt 格式分區

g

設置分區

n

設置完成。大致如下

Command (m for help): p

Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: A8B68C02-E822-4A2A-89FE-3DC512113DE5


#         Start          End    Size  Type            Name
 1         2048      4196351      2G  Linux filesyste 

創建osd指令,再安裝ceph-deploy 的節點設置

ceph-deploy osd create --data /dev/sdb --journal /dev/sdc1 --filestore ceph-1

/dev/sdb 是一個裸硬盤。ceph-deploy 自動部署工具創建osd時會將其先設置成一個 lvm 卷組,再創建一個邏輯卷作爲osd存儲點。
osd的邏輯卷
無非就是卷組名和邏輯卷的名字長了一點。。。

我們也可以直接 設置一個 邏輯卷 。當作osd存儲。不過這是–data 應該是
–data 卷組名/邏輯卷名。

比如 在 ceph-2 節點設置。
設置一個卷組 使用 /dev/sdb 卷組名爲 vg_osd1(這裏省略了將/dev/sdb設置成lvm物理卷的步驟,因爲在創建lvm卷組時會自動設置/dev/sdb)

vgcreate vg_osd1 /dev/sdb

創建一個邏輯卷 使用卷組全部空間 邏輯卷卷名 lv_osd1

lvcreate -l 100%FREE vg_osd1 -n lv_osd1

lvs
接着設置 /dev/sdc 設置一個GPT格式的分區。(只是爲了統一osd的類型,bluestore 類型同樣可以這樣設置作爲osd存儲)

fdisk /dev/sdc
g
n

w

不再多說。。。
測試 創建osd

ceph-deploy osd create --data vg_osd1/lv_osd1 --journal /dev/sdc1 --filestore ceph-2

創建完成 查看 ceph-2 節點的硬盤和分區
lsblk
和ceph-1 差不多隻不過vg卷組和lv卷名是自己設置的。
前面 說 不建議把數據和日誌放在一個硬盤,會影響速率。
這說明是可以放在一個硬盤上的。
可以測試在一個硬盤生成的卷組中創建兩個邏輯卷,一個作爲data 一個作爲journal
在ceph-3 節點測試
創建卷組vg_osd1

vgcreate vg_osd1 /dev/sdb

創建作爲data 的邏輯卷lv_osd1

lvcreate -L 8G vg_osd1 -n lv_osd1

剩餘空間創建作爲journal的邏輯卷lv_osd1_journal

lvcreate -l 100%FREE vg_osd1 -n lv_osd1_journal

創建osd

ceph-deploy osd create --data vg_osd1/lv_osd1 --journal vg_osd1/lv_osd1_journal --filestore ceph-3 

journal 這次也是一個 vg/lv 。

ceph-3的硬盤情況
sdb 下有兩個lvm 邏輯卷。一個作爲data 一個作爲journal。

其它指令

查看法定人數狀態

ceph quorum_status --format json-pretty

ceph的卸載

附,一些ceph的理解。屬於轉載

轉自https://www.cnblogs.com/me115/p/6366374.html

Pool 、PG和OSD
Pool是存儲對象的邏輯分區,它規定了數據冗餘的類型和對應的副本分佈策略;支持兩種類型:副本(replicated)和 糾刪碼( Erasure Code)。

PG( placement group)是一個放置策略組,它是對象的集合,該集合裏的所有對象都具有相同的放置策略;簡單點說就是相同PG內的對象都會放到相同的硬盤上; PG是 ceph的核心概念, 服務端數據均衡和恢復的最小粒度就是PG;

OSD是負責物理存儲的進程,一般配置成和磁盤一一對應,一塊磁盤啓動一個OSD進程;

下面這張圖形象的描繪了它們之間的關係:

  • 一個Pool裏有很多PG,
  • 一個PG裏包含一堆對象;一個對象只能屬於一個PG;
  • PG有主從之分,一個PG會有主副本和從副本,主從PG分佈在不同的osd上。

傳說中的經典圖
這個圖其實我是覺得不是特別形象的。。。
首先搞清楚了一個概念,存儲池算一個邏輯分區,和osd算是同一級。(不能這麼說,只是類比一下)一個存儲池有許多的PG 構成,這些PG會分佈在不同的OSD上,且由於一般存儲池都是副本池,所以一個PG可能有副本。由主副本構成的就是一個完整的存儲池。

網上找來的一個關係圖,我感覺更清晰明瞭一點。
三副本存儲池
一個對象只能存儲在一個PG裏,一個PG裏可以許多不同的對象。一個PG屬於一個存儲池,一個存儲池中很多個PG,一個存儲池中的PG可能分佈在不同的OSD上,且在三副本存儲池中,一個PG會有三個副本,分佈在不同的OSD上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章