內容比較雜,個人學習ceph的一些理解。不涉及底層。只是使用過程的理解。
公共網絡和集羣網絡區分
官方建議用兩個網絡運營 Ceph 存儲集羣:一個公共網(前端)和一個集羣網(後端)。
上面部署 只用了一個網卡 公共網和集羣網使用的同一個網絡。
測試使用雙網絡。。。在虛擬機上測試。
三個 ceph 集羣節點設置兩個就夠了,客戶端和集羣通信還是使用的公共網絡。
假設橋接的是公共網絡 NAT的是 集羣網絡,公共網絡要不能訪問集羣網絡。
這時 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
查看ceph集羣狀態
發現集羣狀態爲 WARN 少了一個 osd。看來集羣節點之間通信確實使用的集羣網。cluster_network 設置是生效的。
這時候再將NAT網絡開啓。。等了一段時間發現 ceph狀態還是沒有恢復正常
查看osd 樹
keyikandao 編號爲1的osd 狀態 是down 主機時 ceph-2 也是就剛停止又重啓集羣網的主機。。。
這時候需要重新啓動該節點的osd 服務 在ceph-2主機執行
systemctl start [email protected]
發現狀態正常了。。。
mon和mgr的設置
mon 維護集羣狀態的映射,包括監視器映射、管理器映射、OSD映射、MDS映射和擁擠映射。這些映射是Cephdaemons相互協調所需的關鍵集羣狀態。監視器還負責管理守護進程和客戶端之間的身份驗證。冗餘和高可用性通常需要至少三個監視器。
mgr 負責跟蹤運行時指標和ceph集羣的當前狀態,包括存儲利用率、當前性能指標和系統負載。cephManager守護進程還宿主基於python的模塊來管理和公開集羣信息,包括基於web的集羣信息。Ceph Dashboard和RESTAPI。高可用性通常至少需要兩名manager。一般會在部署mon的節點都部署一個mgr(儘管並不強制要求必須部署在一起)。這個CephManager是版本 luminous版本之後 才推出的,在這個版本後成爲必備組件。
**部署額外的管理器守護進程可以確保,如果一個守護進程或主機失敗,另一個守護進程可以在不中斷服務的情況下接管。**這個意思就是說一個集羣中部署了多個mgr 實時起作用的只有一個。
兩個準備接手,一個正在活躍。
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在運行
這個錯誤需要看他人博客。具體應該是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
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存儲。不過這是–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
接着設置 /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 節點的硬盤和分區
和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 。
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上。