@
Ceph 最新官網檔案 https://docs.ceph.com/en/latest
Ceph GitHub原始碼地址 https://github.com/ceph/ceph
Ceph是一個開源的、自我修復和自我管理的統一分散式儲存系統。目前最新版本為Quincy
ceph目前已得到眾多雲端計算廠商的支援並被廣泛應用。RedHat及OpenStack kubernetes都可與Ceph整合以支援虛擬機器器映象的後端儲存。Ceph是統一儲存解決方案,根據場景劃分可以將Ceph分為三大塊,分別是物件儲存(相容swift s3協定)、塊裝置儲存和檔案系統服務。在虛擬化領域裡,比較常用到的是Ceph的塊裝置儲存,比如在OpenStack專案裡,Ceph的塊裝置儲存可以對接OpenStack的cinder後端儲存、Glance的映象儲存和虛擬機器器的資料儲存,比較直觀的是Ceph叢集可以提供一個raw格式的塊儲存來作為虛擬機器器範例的硬碟;SDS 能將儲存軟體與硬體分隔開的儲存架構。
傳統儲存存在問題,儲存處理能力不足、儲存空間能力不足、單點問題。傳統儲存 DAS、NAS、SAN、RAID擴容問題不方便,將一堆磁碟,放在一個控制器裡,縱向擴充套件scale up,擴容cpu、記憶體、硬碟可能更貴;分散式儲存 (效能是不如傳統儲存,比如資料庫) 無中心節點 普通伺服器儲存資料(硬碟,cpu,記憶體) ,但可以橫向擴充套件 scale out 擴伺服器,加節點 (節點可以橫向擴充套件,無中心節點,偏向軟體和人才要求 ) ,使用傳統儲存價效比很低,除非對特定效能有需求。
Ceph中資料以PG為單位進行組織,因此當資料池中加入新的儲存單元(OSD)時,通過調整OSDMAP會帶來資料重平衡。正如提到的,如果涉及到多個OSD的擴容是可能導致可用PG中OSD小於min_size,從而發生PG不可用、IO阻塞的情況。為了儘量避免這種情況的出現,只能將擴容粒度變小,比如每次只擴容一個OSD或者一個機器、一個機櫃(主要取決於儲存隔離策略),但是這樣註定會帶來極大的運維工作量,甚至連擴容速度可能都趕不上資料增長速度。
在頻繁資料遷移過程中帶來的IO爭用問題。當叢集規模變大後,硬碟損壞、PG數量擴充可能會變得常態化。
在解決了資料遷移過程中的PG可用性問題和IO爭用問題後,提到的PG數量調整問題自然也就解決了。
儲存成本問題主要是講叢集可用率問題,即Ceph叢集規模增大後,偽隨機演演算法導致了儲存資源分佈不均衡,磁碟利用率方差過大的問題。
Ceph本身是一個十分複雜的體系,要做到穩定運維非常看重團隊的實力。
Ceph在實現統一儲存,支援物件、塊和檔案儲存。Ceph非常可靠,易於管理且免費。Ceph具有管理大量資料的能力和可伸縮性,支援數以千計的使用者端存取pb到eb的資料。Ceph節點利用普通硬體和智慧守護行程,Ceph儲存叢集容納大量節點,這些節點相互通訊以動態地複製和重分發資料。通過ceph面板或使用者端登入到ceph叢集後看到3個服務:RADOSGW、RBD、CEPH FS。
ceph儲存叢集,提供了一個基於RADOS的無限可延伸的Ceph儲存叢集,基於RADOS儲存可延伸的,可靠的儲存 pb級叢集服務。Ceph儲存叢集由多種守護行程組成:
Ceph將資料作為物件儲存在邏輯儲存池中。Ceph使用CRUSH演演算法計算出哪個放置組(PG)應該包含該物件,哪個OSD應該儲存該放置組。
CRUSH演演算法使Ceph儲存叢集能夠動態地擴充套件、平衡和恢復。儲存叢集使用者端和每個Ceph OSD Daemon使用CRUSH演演算法高效地計算資料位置資訊,而不是依賴於一箇中央查詢表。
Ceph的高階特性包括一個通過librados與Ceph儲存叢集的本地介面,以及許多構建在librados之上的服務介面。
Ceph client和Ceph OSD Daemons都使用CRUSH演演算法來高效地計算物件位置資訊,而不是依賴於一箇中央查詢表,提供了更好的資料管理機制,工作分配給叢集中的所有使用者端和OSD守護行程來實現大規模擴充套件;CRUSH使用智慧資料複製來確保彈性更適合超規模儲存。
Ceph依賴於Ceph使用者端和Ceph OSD守護行程對叢集拓撲的瞭解,包括5個地圖,統稱為「叢集地圖」:
每個對映維護其操作狀態更改的迭代歷史。Ceph Monitors維護叢集對映的主副本,包括叢整合員、狀態、更改和Ceph儲存叢集的總體健康狀況。
Ceph儲存叢集部署都要從設定每個Ceph節點、網路和Ceph儲存叢集開始。一個Ceph儲存叢集至少需要一個Ceph Monitor、Ceph Manager和Ceph OSD (Object Storage Daemon)。執行Ceph檔案系統使用者端時也需要Ceph後設資料伺服器。如果是在生產中使用Ceph,官方有提供硬體建議(CPU、RAM、記憶體、資料儲存、網路、故障最低硬體建議)和作業系統建議(Ceph的依賴性、平臺),詳細可以查閱官方檔案。比如推薦若干條件
Ceph官方釋出版本號目前按照英文字母大寫開頭的單詞編排,有三個組成部分,生產使用要選擇x.2後面越大越好,代表解決問題越多越穩定。x.y.z. x表示釋出週期(例如,13表示Mimic)。Y表示釋出型別:
由於ceph元件較多,手工安裝步驟較多,因此官方提供幾種不同的快速安裝Ceph的方法,推薦方法有如下兩種
其他方法有,比較早使用或者目前已在使用大多數都應該使用的是Ceph-deploy方式:
cephadm不依賴於外部設定工具如Ansible、Rook和Salt。Cephadm管理Ceph叢集的完整生命週期,cephadm先在單個節點上建立一個由一個監視器和一個管理器組成小型Ceph叢集,後續cephadm使用業務流程介面擴充套件叢集,新增所有主機並提供所有Ceph守護行程和服務。這些都通過Ceph命令列介面(CLI)或儀表板(GUI)來執行。
Python 3安裝步驟如下
# 官網下載
wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz
# 解壓
tar -xvf Python-3.10.6.tgz
# 建立安裝部署目錄
mkdir python3
# 進入目錄
cd Python-3.10.6
# 安裝依賴包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
# 如果需要openssl編譯安裝則選擇下面步驟
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz --no-check-certificate
tar -xvf openssl-1.1.1q.tar.gz
mkdir /usr/local/openssl
cd openssl-1.1.1
./config --prefix=/usr/local/openssl
make
make installq
# 安裝python3
mkdir -p /home/commons/python3
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
# 修改
./configure --prefix=/home/commons/python3
make
make install
# 建立軟連結
ln -s /home/commons/python3/bin/python3.10 /usr/local/bin/python3
ln -s /home/commons/python3/bin/python3.10 /usr/local/bin/pip3
ln -s /home/commons/python3/bin/python3.10 /usr/bin/python3
# 可以加入環境變數
vi ~/.bash_profile
export PYTHON_HOME=/home/commons/python3/
export PATH=$PYTHON_HOME/bin:$PATH
source ~/.bash_profile
# 檢視版本
python3 --version
# 各自linux發行版的特定安裝方法,一些Linux發行版可能已經包含了最新的Ceph包。在這種情況下,您可以直接安裝cephadm。例如:
# Ubuntu:
apt install -y cephadm
# CentOS Stream
dnf search release-ceph
dnf install --assumeyes centos-release-ceph-quincy
dnf install --assumeyes cephadm
# Fedora:
dnf -y install cephadm
# openSUSE或SLES
zypper install -y cephadm
# 使用curl獲取獨立指令碼的最新版本。
curl --silent --insecure --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
# 由於官方獲取不到,jsdelivr的地址
curl --silent --remote-name --location https://cdn.jsdelivr.net/gh/ceph/ceph@quincy/src/cephadm/cephadm
#安裝cephadm,ceph需要python3和epel源;在執行安裝步驟有時會報錯無效的gpg金鑰,可以將ceph.repo檔案中gpgcheck引數改成0,表示不適用金鑰驗證
vi /etc/yum.repos.d/ceph.repo
# 使cephadm指令碼可執行
chmod +x cephadm
# 在cephadm指令碼import ssl後面加入下面語句
ssl._create_default_https_context = ssl._create_unverified_context
# 驗證cephadm命令是否可用
./cephadm --help
# 其實到這一步,cephadm就已經能夠部署叢集了,但是沒有安裝全部功能,也沒有把命令安裝成作業系統命令,新增ceph指定版本的系統包映象源,這裡我們安裝octopus版。本地apt或yum庫中會多出一些映象地址。
#使用cephadm指令碼生成需要的yum源(可以替換為國內源提高下載速度) 可選
sed -i 's#download.ceph.com#mirrors.aliyun.com/ceph#' /etc/yum.repos.d/ceph.repo #可選
rpm --import 'https://download.ceph.com/keys/release.asc' #可選
# 新增倉庫
./cephadm add-repo --release octopus
# cephadm 安裝
./cephadm install
which cephadm
cephadm bootstrap --mon-ip 192.168.5.53
執行上面後在Pulling container image步驟會需要一段時間,出現下面的返回後表示安裝成功,可看到儀表盤存取地址
bootstrap完成後伺服器若干docker容器執行,prometheus+grafana作為監控系統,alertmanager提供告警功能(叢集有異常會傳送郵件或簡訊),node-exporter將主機暴露給ceph叢集,讓別的伺服器直連存取OSD;ceph-mon容器提供Monitor守護行程,為叢集提供叢集執行圖;ceph-mgr其實是ceph manager守護行程,為叢集提供librados介面;ceph-crash是Crush演演算法容器;檢視拉取映象和啟動的容器如下:
一個ceph叢集算是建立出來了,ceph叢集包括了Mon程序+librados介面;只要我們再安裝OSD,一個完全的Ceph儲存叢集就建立好了;目前這個ceph沒有儲存的功能,僅僅是個管理器。存取https://ckserver2:8443/ ,輸入使用者密碼後,先修改密碼然後再登入
# (注)如果儀表盤(dashboard)密碼忘了,可以使用以下命令重置密碼
ceph dashboard ac-user-set-password admin redhat
# 使用ceph命令第一種方法:cephadm安裝需要切換shell才可以使用ceph命令
cephadm shell
ceph -s
ceph -s
# 使用ceph命令第二種方法:要執行ceph命令,也可以執行如下命令:
cephadm shell -- ceph -s
# 使用ceph命令第三種方法:可以安裝ceph-common包,其中包含所有ceph命令,包括ceph、rbd、mount。ceph(用於掛載cepphfs檔案系統),等等:。也即是如果沒有安裝ceph工具包,那麼需要先執行cephadm shell命令,再執行ceph操作
cephadm add-repo --release quincy
cephadm install ceph-common
# 檢驗ceph命令在主機上安裝成功
ceph -v
# 檢驗主機上的ceph命令能成功連線叢集,獲取叢集狀態
ceph status
典型的Ceph叢集在不同的主機上有3到5個監視器守護行程。如果叢集中有5個或更多節點,建議部署5個監視器。
# 首先在新主機的根使用者authorized_keys檔案中安裝叢集的公共SSH金鑰
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node3
本篇先到此,待續.......
**本人部落格網站 **IT小神 www.itxiaoshen.com