1. 程式人生 > 其它 >字串大小寫轉換和字串的比較

字串大小寫轉換和字串的比較

目錄
參考連結
中文文件: http://docs.ceph.org.cn/ (相對較老)
英文文件: https://docs.ceph.com/en/latest/

倉庫源:
https://mirrors.aliyun.com/ceph/ #阿里雲映象倉庫
http://mirrors.163.com/ceph/ #網易映象倉庫
https://mirrors.tuna.tsinghua.edu.cn/ceph/ #清華大學映象源

一、Ceph 簡介

Ceph是一個開源的分散式儲存系統。

Ceph提供物件儲存/塊裝置/檔案儲存型別。

1.1 Ceph 元件

Ceph儲存叢集至少需要一個Ceph Monitor、Ceph Manager和Ceph OSD(Object Storage Daemon)。執行Ceph檔案系統客戶端時也需要Ceph Metadata Server。

Monitors: Ceph Monitor(ceph-mon)維護叢集狀態的圖表,包括監控器圖、管理器圖、OSD圖、MDS圖和CRUSH圖。這些是重要的叢集狀態,Ceph守護程序相互協調所需的圖表。Monitors還負責管理守護程序和客戶機之間的身份驗證。為了實現冗餘和高可用性,通常至少需要三個Monitors。

Managers: Ceph Manager守護程序(ceph-mgr)負責跟蹤執行時指標和Ceph叢集的當前狀態,包括儲存利用率、當前效能指標和系統負載。Ceph Manager守護程序還承載基於python的模組,用於管理和公開Ceph叢集資訊,包括基於web的Ceph Dashboard和REST API。對於高可用性,通常至少需要兩個Managers。

Ceph OSDs: Ceph OSD(ceph-osd)用於儲存資料,處理資料複製/恢復/再均衡等操作,並通過檢測其他Ceph OSD守護程序的心跳,向Ceph Monitors和Managers提供一些監控資訊。為了實現冗餘和高可用性,一般至少需要3個Ceph OSDs。

MDSs:  Ceph Metadata Server(MDS, ceph-mds)為Ceph檔案系統儲存元資料(Ceph塊裝置和 Ceph物件儲存不使用MDS)。Ceph Metadata Servers允許POSIX檔案系統的使用者執行基本命令(如ls、find等),而不會給Ceph儲存叢集帶來巨大的負擔。

Ceph將資料作為物件(objects) 儲存在邏輯儲存池中。Ceph使用CRUSH演算法計算出哪個PG應該包含該物件,並進一步計算出哪個osd應該儲存該PG。CRUSH演算法使Ceph儲存叢集能夠動態伸縮、重新均衡和恢復。

1.2 Ceph叢集結構

Ceph儲存叢集提供了物件、塊和檔案儲存功能,它可靠性高、管理簡便、並且是開源軟體。Ceph可提供極大的伸縮性——供成千使用者訪問PB乃至EB級的資料。Ceph節點以普通硬體和智慧守護程序作為支撐點,Ceph儲存叢集啟動大量節點,它們之間靠相互通訊來複制資料、並動態地重分佈資料。

1.3 Ceph存取資料流程

客戶端把物件寫入目標PG的主OSD,然後這個主OSD再用它的CRUSH圖副本找出用於放物件副本的第二、第三個 OSD,並把資料複製到適當的PG所對應的第二、第三 OSD(要多少副本就有多少 OSD ),最終,確認資料成功儲存後反饋給客戶端。

Ceph儲存系統支援"池"概念,它是儲存物件的邏輯分割槽

每個儲存池都有很多PG,CRUSH動態的把它們對映到OSD 。Ceph客戶端要存物件時,CRUSH將把各物件對映到某個PG。

儲存流程:

1.計算檔案到物件的對映 oid:
計算檔案到物件的對映,假如file為客戶端要讀寫的檔案,得到oid(objectid)=ino+ono
    ino: inode  number(INO),File的元資料序列號,File的唯一id。
    ono: object number(ONO),File切分產生的某個object的序號,預設以4M切分一個塊大小。

2. 通過hash演算法計算出檔案對應的pool中的PG
通過一致性HASH計算Object到PG,Object->PG對映hash(oid)&mask->pgid

3. 通過CRUSH把物件對映到PG中的OSD
通過CRUSH演算法計算PG到OSD,PG->OSD對映:[CRUSH(pgid)->(osd1,osd2,osd3)]

4. PG中的主OSD將物件寫入到硬碟
5. 主OSD將資料同步給備份OSD,並等待備份OSD返回確認
6. 主OSD將寫入完成返回給客戶端

二、通過ceph-deploy快速安裝部署ceph叢集儲存

ceph-deploy是一種僅依靠SSH訪問伺服器、sudo和一些Python來部署Ceph的方法。它不需要伺服器、資料庫或任何類似的東西。

ceph推薦使用2塊萬兆網絡卡(2個網路),public網路用於客戶端訪問,cluster網路用於叢集管理及資料同步.

注: 本實驗簡單採用一塊網絡卡(public和cluster共用)。阿里雲ECS,映象已經經過一些優化(映象源/時間同步/openssh/允許root登入等).

叢集伺服器採用ubuntu18系統,如下:

1. 一臺ceph-deploy伺服器,用於部署ceph叢集
172.26.128.89/172.26.128.89

2. 三臺伺服器Monitor伺服器,用於ceph叢集ceph-mon監視伺服器
172.26.128.90/172.26.128.90
172.26.128.91/172.26.128.91
172.26.128.92/172.26.128.92

3. 兩個Manager伺服器,用於ceph-mgr管理伺服器
172.26.128.93/172.26.128.93
172.26.128.94/172.26.128.94

4. 四臺OSD伺服器,用於ceph叢集ceph-osd儲存伺服器,每臺2塊或以上的磁碟
172.26.128.95/172.26.128.95
172.26.128.96/172.26.128.96
172.26.128.97/172.26.128.97
172.26.128.98/172.26.128.98
各儲存伺服器磁碟劃分: /dev/vdb /dev/vdc  #20G

5. 2臺客戶端測試伺服器ceph-client(centos和ubuntu各一臺)
172.26.128.99/172.26.128.99
172.26.128.100/172.26.128.100

2.1 基礎環境配置

基礎環境配置:

1. 時間同步(伺服器時間必須同步,阿里雲ecs自有時間同步,本實驗忽略) 
2. 關閉selinux和防火牆(線上根據實際情況選擇是否關閉,阿里雲ubuntu映象預設關閉selinux和防火牆,本實驗忽略) 
3. 更改主機名
4. 配置域名解析(實驗通過繫結host,線上需配置dns解析)
5. 設定倉庫源
6. 新增普通使用者並設定sudo許可權

2.1.1 更改主機名

IP: 172.26.128.89 HostName: ceph-deploy
IP: 172.26.128.90 HostName: ceph-mon1
IP: 172.26.128.91 HostName: ceph-mon2
IP: 172.26.128.92 HostName: ceph-mon3
IP: 172.26.128.93 HostName: ceph-mgr1
IP: 172.26.128.94 HostName: ceph-mgr2
IP: 172.26.128.95 HostName: ceph-node1
IP: 172.26.128.96 HostName: ceph-node2
IP: 172.26.128.97 HostName: ceph-node3
IP: 172.26.128.98 HostName: ceph-node4
按照上述ip和主機名對應關係更改,命令如下如下:

hostname ceph-deploy
echo ceph-deploy > /etc/hostname

2.1.2 新增域名解析

本實驗通過host方式,線上要通過域名解析

cat >> /etc/hosts<< EOF
# ceph host
172.26.128.89 ceph-deploy
172.26.128.90 ceph-mon1
172.26.128.91 ceph-mon2
172.26.128.92 ceph-mon3
172.26.128.93 ceph-mgr1
172.26.128.94 ceph-mgr2
172.26.128.95 ceph-node1
172.26.128.96 ceph-node2
172.26.128.97 ceph-node3
172.26.128.98 ceph-node4
# ceph host
EOF

2.1.3 設定倉庫源

所有伺服器設定ceph倉庫源(阿里雲映象源)

wget -q -O- 'https://mirrors.aliyun.com/ceph/keys/release.asc' | sudo apt-key add -
ceph_stable_release=pacific 
echo deb https://mirrors.aliyun.com/ceph/debian-$ceph_stable_release/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt update -y 

2.1.4 新增部署ceph的普通使用者(cephyd)

較新版的ceph-deploy支援用--username選項提供可無密碼使用sudo的使用者名稱(包括root,不建議這樣做)。使用 ceph-deploy --username {username} 命令時,指定的使用者必須能夠通過無密碼SSH連線到Ceph節點,因為ceph-deploy中途不會提示輸入密碼。

推薦在叢集內的所有Ceph節點上給ceph-deploy建立一個特定的使用者(比如cephuser、cephadmin 這樣的使用者去管理ceph叢集。

注:不要用"ceph"這個名字。從Infernalis版起,使用者名稱"ceph"保留給了Ceph守護程序。如果Ceph節點上已經有了"ceph"使用者,升級前必須先刪掉這個使用者。

本實驗在包含ceph-deploy節點、ceph-osd節點、ceph-mon節點和ceph-mgr節點等建立cephyd使用者)。

1. 在各ceph節點建立新使用者。
groupadd -r -g 2022 cephyd && useradd -r -m -s /bin/bash -u 2022 -g 2022 cephyd && echo cephyd:7QR59*TAI | chpasswd

2. 確保各ceph節點上新建立的使用者都有sudo許可權
echo "cephyd ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephyd
sudo chmod 0440 /etc/sudoers.d/cephyd

2.1.5 配置允許ceph-deploy伺服器無密碼SSH登入至ceph叢集各節點

因為ceph-deploy不支援輸入密碼,所以必須在ceph-deploy節點上生成SSH金鑰並把其公鑰分發到ceph叢集各節點
。 ceph-deploy會嘗試給初始monitors生成SSH金鑰對。

生成SSH金鑰對,不要用sudo或root使用者。提示"Enter passphrase"時,直接回車,口令即為空:

在ceph-deploy伺服器上操作:

1. 切換至cephyd使用者
root@ceph-deploy:~# su - cephyd

2. 生成金鑰對
cephyd@ceph-deploy:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cephyd/.ssh/id_rsa):
Created directory '/home/cephyd/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/cephyd/.ssh/id_rsa.
Your public key has been saved in /home/cephyd/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:t+nL8wT6ndIiEsQDPZIPlxjL/1vCXA1oHhs49F03svM cephyd@ceph-deploy
The key's randomart image is:
+---[RSA 2048]----+
|    .=..    o o  |
|   .*o=o o . + . |
|    oBo.* o o    |
|     .=+ + o o   |
|     ...S + . E  |
|      .+ + +     |
|       .* +..    |
|      . .B+o..   |
|       ...=*+    |
+----[SHA256]-----+

3.  分發公鑰到各被管理節點:
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]
cephyd@ceph-deploy:~$ ssh-copy-id [email protected]

4. 修改ceph-deploy管理節點上的~/.ssh/config檔案,這樣ceph-deploy就能用你所建的使用者名稱登入ceph節點了,而無需每次執行ceph-deploy都要指定--username {username} 。這樣做同時也簡化了ssh和scp的用法。把 {username} 替換成你建立的使用者名稱。

cephyd@ceph-deploy:~$ cat >> ~/.ssh/config<< EOF
######## ceph #######

HOST ceph-deploy
HostName 172.26.128.89
User cephyd
PORT 22

HOST ceph-mon1
HostName 172.26.128.90
User cephyd
PORT 22

HOST ceph-mon2
HostName 172.26.128.91
User cephyd
PORT 22

HOST ceph-mon3
HostName 172.26.128.92
User cephyd
PORT 22

HOST ceph-mgr1
HostName 172.26.128.93
User cephyd
PORT 22

HOST ceph-mgr2
HostName 172.26.128.94
User cephyd
PORT 22

HOST ceph-node1
HostName 172.26.128.95
User cephyd
PORT 22

HOST ceph-node2
HostName 172.26.128.96
User cephyd
PORT 22

HOST ceph-node3
HostName 172.26.128.97
User cephyd
PORT 22

HOST ceph-node4
HostName 172.26.128.98
User cephyd
PORT 22

HOST ceph-client1
HostName 172.26.128.99
User cephyd
PORT 22

HOST ceph-client2
HostName 172.26.128.100
User cephyd
PORT 22

######## ceph #######
EOF


5. 測試免密登入
cephyd@ceph-deploy:~$ ssh ceph-mon1 'date'
Sun Aug 15 16:14:29 CST 2021
cephyd@ceph-deploy:~$ ssh cephyd@ceph-mon1 'date'
Sun Aug 15 16:14:40 CST 2021

2.2 叢集部署

通過ceph-deploy從叢集管理節點建立一個Ceph儲存叢集。

它包含一個Monitor、一個Manager和四個OSD守護程序。一旦叢集達到active+clean狀態,再擴充套件它:增加第五個OSD、增加元資料伺服器和兩個Ceph Monitors。

先在管理節點上建立一個目錄(ceph-cluster),用於儲存ceph-deploy生成的配置檔案和金鑰對。

cephyd@ceph-deploy:~$ mkdir ceph-cluster
cephyd@ceph-deploy:~$ cd ceph-cluster/
cephyd@ceph-deploy:~/ceph-cluster$ pwd
/home/cephyd/ceph-cluster

2.2.1 建立叢集

1. 安裝CEPH部署工具
sudo apt-get install ceph-deploy

2. 建立叢集
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy new --cluster-network 172.26.128.0/20 --public-network 172.26.128.0/20 ceph-mon1

3. 檢視驗證 
應該有一個ceph配置檔案、一個monitor金鑰和一個日誌檔案

cephyd@ceph-deploy:~/ceph-cluster$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
cephyd@ceph-deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = 003cb89b-8812-4172-a327-6a774c687c6c
public_network = 172.26.128.0/20
cluster_network = 172.26.128.0/20
mon_initial_members = ceph-mon1
mon_host = 172.26.128.90
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

4. 安裝ceph
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-deploy ceph-mon1 ceph-mon2 ceph-mon3 ceph-mgr1 ceph-mgr2 ceph-node1 ceph-node2 ceph-node3 ceph-node4

5. 配置初始 monitor(s)、並收集所有金鑰:
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mon create-initial


6. 驗證
在mon定節點已經自動安裝並啟動了ceph-mon服務,並且後期在ceph-deploy節點初始化目錄會生成一些ceph.bootstrap-mds/mgr/osd/rgw等服務的keyring認證檔案,這些初始化檔案擁有對ceph叢集的最高許可權,所以一定要儲存好。
cephyd@ceph-deploy:~/ceph-cluster$ ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring  ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring  ceph.bootstrap-rgw.keyring  ceph.conf                  ceph.mon.keyring

cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mon1 'ps auxf | grep ceph-mon | grep -v grep'
ceph       27405  0.0  1.0 480388 40024 ?        Ssl  17:01   0:00 /usr/bin/ceph-mon -f --cluster ceph --id ceph-mon1 --setuser ceph --setgroup ceph

7. 分發admin金鑰
在ceph-deploy節點把配置檔案和admin金鑰拷貝至Ceph叢集需要執行ceph管理命令的節點,從而不需要後期通過 ceph命令對ceph叢集進行管理配置的時候每次都需要指定ceph-mon節點地址和ceph.client.admin.keyring檔案,另外各ceph-mon節點也需要同步ceph的叢集配置檔案與認證檔案。 
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-deploy ceph-node1 ceph-node2 ceph-node3 ceph-node4

8. 驗證金鑰
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node1 'ls -l /etc/ceph/'
total 12
-rw------- 1 root root 151 Aug 15 17:12 ceph.client.admin.keyring
-rw-r--r-- 1 root root 267 Aug 15 17:12 ceph.conf
-rw-r--r-- 1 root root  92 Jul  8 22:17 rbdmap
-rw------- 1 root root   0 Aug 15 17:10 tmpkzzYdt

9. 認證檔案的屬主和屬組為了安全考慮,預設設定為了root使用者和root組,如果需要ceph使用者也能執行ceph命令,那麼就需要對ceph使用者進行授權,
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node1 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node2 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node3 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node4 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'

10. 建立Manger伺服器
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mgr create ceph-mgr1
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph -s
  cluster:
    id:     003cb89b-8812-4172-a327-6a774c687c6c
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum ceph-mon1 (age 49m)
    mgr: ceph-mgr1(active, since 8m)
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

11. 解決HEALTH_WARN報警
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph config set mon auth_allow_insecure_global_id_reclaim false
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph -s
  cluster:
    id:     003cb89b-8812-4172-a327-6a774c687c6c
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum ceph-mon1 (age 51m)
    mgr: ceph-mgr1(active, since 10m)
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

12. 列出node節點磁碟
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node1
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node3
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node4

13. 擦除磁碟
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node1 /dev/vdb /dev/vdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node2 /dev/vdb /dev/vdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node3 /dev/vdb /dev/vdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node4 /dev/vdb /dev/vdc

14. 新增osd
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node1 --data /dev/vdb
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node1 --data /dev/vdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node2 --data /dev/vdb
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node2 --data /dev/vdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node3 --data /dev/vdb
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node3 --data /dev/vdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node4 --data /dev/vdb
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node4 --data /dev/vdc

15. 驗證
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph health
HEALTH_OK
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph -s
  cluster:
    id:     003cb89b-8812-4172-a327-6a774c687c6c
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum ceph-mon1 (age 3h)
    mgr: ceph-mgr1(active, since 3h)
    osd: 6 osds: 6 up (since 74s), 6 in (since 82s)

  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   32 MiB used, 120 GiB / 120 GiB avail
    pgs:     1 active+clean

cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node1 'ps auxf | grep ceph-osd | grep -v grep'
ceph       31901  0.2  1.5 1032196 59156 ?       Ssl  20:32   0:01 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph       33478  0.2  1.5 1030084 58904 ?       Ssl  20:36   0:00 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node2 'ps auxf | grep ceph-osd | grep -v grep'
ceph       31364  0.3  1.4 1030080 57068 ?       Ssl  20:40   0:00 /usr/bin/ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph
ceph       32955  0.3  1.5 1030084 58716 ?       Ssl  20:41   0:00 /usr/bin/ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node3 'ps auxf | grep ceph-osd | grep -v grep'
ceph       31417  0.3  1.4 1030088 57200 ?       Ssl  20:41   0:00 /usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph
ceph       33012  0.3  1.4 998340 56368 ?        Ssl  20:41   0:00 /usr/bin/ceph-osd -f --cluster ceph --id 5 --setuser ceph --setgroup ceph

2.2.2 測試叢集

要把物件存入 Ceph 儲存叢集,客戶端必須做到:

  1. 指定物件名
  2. 指定儲存池

Ceph客戶端查出最新叢集執行圖,用CRUSH演算法計算出如何把物件對映到PG,然後動態地計算如何把PG分配到OSD。要定位物件,只需要物件名和儲存池名字即可,例如:

ceph osd map {poolname} {object-name}

為了測試叢集的資料存取功能,這裡首先建立一個用於測試的儲存池ydpool,並設定其PG數量為32個。

cephyd@ceph-deploy:~$ sudo ceph osd pool create ydpool 32 32
pool 'ydpool' created
cephyd@ceph-deploy:~$ sudo ceph pg ls-by-pool ydpool | awk '{print $1,$2,$15}'
cephyd@ceph-deploy:~$ sudo ceph osd pool ls
device_health_metrics
ydpool
cephyd@ceph-deploy:~$ sudo rados lspools
device_health_metrics
ydpool

目前ceph環境還沒部署使用塊裝置和檔案系統,也沒有使用物件儲存的客戶端,但是ceph的rados命令可以實現訪問 ceph物件儲存的功能:

2.2.2.1 上傳檔案

1. 上傳檔案
把lastlog檔案上傳到 mypool 並指定物件 id 為 msg1
cephyd@ceph-deploy:~$ sudo rados put msg1 lastlog --pool=ydpool

2. 列出檔案
cephyd@ceph-deploy:~$ sudo rados ls --pool=ydpool
msg1
cephyd@ceph-deploy:~$ sudo rados -p ydpool  ls
msg1

3. 檢視檔案資訊
ceph osd map 命令可以獲取到儲存池中資料物件的具體位置資訊:
cephyd@ceph-deploy:~$ sudo ceph osd map ydpool msg1
osdmap e48 pool 'ydpool' (2) object 'msg1' -> pg 2.c833d430 (2.10) -> up ([7,4,0], p7) acting ([7,4,0], p7)
表示檔案放在了儲存池id為2的c833d430的PG上,10為當前PG的id,2.10表示資料是在id為2的儲存池當中id為10的 PG中儲存,線上的OSD編號7,4,0,主OSD為7, 活動的OSD7,4,0,三個OSD表示資料放一共3個副本,PG中的OSD是 ceph的crush演算法計算出三份資料儲存在哪些OSD。

2.2.2.2 下載檔案

cephyd@ceph-deploy:~$ sudo rados get msg1 --pool=ydpool /tmp/yd.txt
cephyd@ceph-deploy:~$ ll -h /tmp/yd.txt
-rw-r--r-- 1 root root 18M Aug 15 21:21 /tmp/yd.txt

2.2.2.3 修改檔案

cephyd@ceph-deploy:~$ sudo rados put msg1 lastlog --pool=ydpool
cephyd@ceph-deploy:~$ sudo rados get msg1 --pool=ydpool /tmp/yd2.txt

2.2.2.4 刪除檔案

cephyd@ceph-deploy:~$ sudo rados rm msg1 --pool=ydpool

2.3 擴充套件ceph叢集實現高可用

主要是擴充套件ceph叢集的Monitor節點以及Manager節點,以實現叢集高可用。

2.3.1 擴充套件ceph-mon節點

ceph-mon是原生具備自選舉以實現高可用機制的ceph服務,節點數量通常是奇數。

新增節點:

cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mon add ceph-mon2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mon add ceph-mon3

驗證
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph -s
  cluster:
    id:     003cb89b-8812-4172-a327-6a774c687c6c
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 7s)
    mgr: ceph-mgr1(active, since 4h)
    osd: 8 osds: 8 up (since 65m), 8 in (since 65m)

  data:
    pools:   2 pools, 33 pgs
    objects: 0 objects, 0 B
    usage:   251 MiB used, 160 GiB / 160 GiB avail
    pgs:     33 active+clean

cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph quorum_status
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph quorum_status --format json-pretty

2.3.2 擴充套件ceph-mgr節點

cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mgr create ceph-mgr2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-mgr2

驗證
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph -s
  cluster:
    id:     003cb89b-8812-4172-a327-6a774c687c6c
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 5m)
    mgr: ceph-mgr1(active, since 4h), standbys: ceph-mgr2
    osd: 8 osds: 8 up (since 71m), 8 in (since 71m)

  data:
    pools:   2 pools, 33 pgs
    objects: 0 objects, 0 B
    usage:   251 MiB used, 160 GiB / 160 GiB avail
    pgs:     33 active+clean

2.3.2 從RADOS移除OSD

Ceph叢集中的一個OSD是一個ceph-osd節點的服務程序且對應於一個物理磁碟裝置,是一個專用的守護程序。在OSD裝置出現故障,或管理員出於管理之需確實要移除特定的OSD裝置時,需要先停止相關的守護程序,而後再進行移除操作。

對於Luminous及其之後的版 本來說,停止和移除命令的格式分別如下所示:

  1. 停用裝置:ceph osd out {osd-num}
  2. 停止程序:sudo systemctl stop ceph-osd@{osd-num}
  3. 移除裝置:ceph osd purge {id} --yes-i-really-mean-it

實戰:

1. 檢視osd
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd ls
0
1
2
3
4
5
6
7

2. 檢視msg檔案資訊
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd map ydpool msg1
osdmap e48 pool 'ydpool' (2) object 'msg1' -> pg 2.c833d430 (2.10) -> up ([7,4,0], p7) acting ([7,4,0], p7)`

3. 移除osd 7後msg1會轉移並保持3副本
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd out 7
marked out osd.7.
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node4 'sudo systemctl stop ceph-osd@7'
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd purge 7 --yes-i-really-mean-it
purged osd.7
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd ls
0
1
2
3
4
5
6
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd map ydpool msg1
osdmap e53 pool 'ydpool' (2) object 'msg1' -> pg 2.c833d430 (2.10) -> up ([6,1,4], p6) acting ([6,1,4], p6)

2.4 初步使用rbd塊裝置

塊是一個位元組序列(例如,一個512位元組的資料塊)。
Ceph塊裝置是精簡配置的、大小可調且將資料條帶化儲存到叢集內的多個OSD。Ceph塊裝置利用RADOS的多種能力,如快照、複製和一致性。Ceph的RADOS塊裝置(RBD)使用核心模組或librbd庫與OSD互動。

RBD(RADOS Block Devices)即為塊儲存的一種,RBD通過librbd庫與OSD進行互動,RBD為KVM等虛擬化技術和雲服務(如OpenStack和CloudStack)提供高效能和無限可擴充套件性的儲存後端,這些系統依賴於libvirt和QEMU實用程式與RBD進行整合,客戶端基於librbd庫即可將RADOS儲存叢集用作塊裝置,不過,用於rbd的儲存池需要事先啟用rbd功能並進行初始化。

2.4.1 建立RBD

建立一個名為ydrbd1的儲存池,並在啟用rbd功能後對其進行初始化:

1.建立儲存池
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create ydrbd1 64 64
pool 'ydrbd1' created

2. 開啟rbd功能
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool application enable ydrbd1 rbd
enabled application 'rbd' on pool 'ydrbd1'

3. 初始化
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd pool init -p ydrbd1

2.4.2 建立img

rbd儲存池不能直接用於塊裝置,需要事先在其中按需建立映像(image),並把映像檔案作為塊裝置使用,rbd命令可用於建立、檢視及刪除塊裝置上在的映像(image),以及克隆映像、建立快照、將映像回滾到快照和檢視快照等管理操作。

建立名為ydimg1和ydimg2的映像:

1. 建立
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd create ydimg1 --size 5G --pool ydrbd1
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd create ydimg2 --size 3G --pool ydrbd1 --image-format 2 --image-feature layering
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd ls --pool ydrbd1
ydimg1
ydimg2
# 後續步驟會使用ydimg2 ,由於centos系統核心較低無法掛載使用,因此只開啟部分特性。除了layering其他特性需要高版本核心支援

2. 檢視資訊
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd --image ydimg1 --pool ydrbd1 info
rbd image 'ydimg1':
	size 5 GiB in 1280 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 12d8b31313b9
	block_name_prefix: rbd_data.12d8b31313b9
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_features:
	flags:
	create_timestamp: Mon Aug 16 12:19:41 2021
	access_timestamp: Mon Aug 16 12:19:41 2021
	modify_timestamp: Mon Aug 16 12:19:41 2021
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd --image ydimg2 --pool ydrbd1 info
rbd image 'ydimg2':
	size 3 GiB in 768 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 37b4e008baeb
	block_name_prefix: rbd_data.37b4e008baeb
	format: 2
	features: layering
	op_features:
	flags:
	create_timestamp: Mon Aug 16 12:20:15 2021
	access_timestamp: Mon Aug 16 12:20:15 2021
	modify_timestamp: Mon Aug 16 12:20:15 2021

2.4.3 客戶端使用塊儲存

1. 檢視cep狀態
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph df
--- RAW STORAGE ---
CLASS     SIZE    AVAIL     USED  RAW USED  %RAW USED
hdd    120 GiB  120 GiB  192 MiB   192 MiB       0.16
TOTAL  120 GiB  120 GiB  192 MiB   192 MiB       0.16

--- POOLS ---
POOL                   ID  PGS  STORED  OBJECTS    USED  %USED  MAX AVAIL
device_health_metrics   1    1     0 B        8     0 B      0     38 GiB
ydpool                  2   32  11 MiB        1  34 MiB   0.03     38 GiB
ydrbd1                  3   64   405 B        7  48 KiB      0     38 GiB

2, 安裝ceph並同步認證資訊
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck  ceph-client1
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-client1
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-client1 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'

3. 客戶端對映
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-client1
cephyd@ceph-client1:~$ sudo rbd -p ydrbd1 map ydimg2
/dev/rbd0
cephyd@ceph-client1:~$ lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
rbd0   251:0    0   3G  0 disk 
rbd1   251:16   0   3G  0 disk
vda    252:0    0  40G  0 disk
└─vda1 252:1    0  40G  0 part /
cephyd@ceph-client1:~$ sudo fdisk -l /dev/rbd0

4. 格式化並掛載
cephyd@ceph-client1:~$ sudo mkfs.ext4 -m0 /dev/rbd0
cephyd@ceph-client1:~$ sudo mkdir /data
cephyd@ceph-client1:~$ sudo mount /dev/rbd0 /data/
cephyd@ceph-client1:~$ sudo cp /var/log/lastlog /data
cephyd@ceph-client1:~$ sudo df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            922M     0  922M   0% /dev
tmpfs           189M  2.9M  187M   2% /run
/dev/vda1        40G  4.2G   34G  12% /
tmpfs           945M     0  945M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           945M     0  945M   0% /sys/fs/cgroup
tmpfs           189M     0  189M   0% /run/user/2022
/dev/rbd0       2.9G  9.1M  2.9G   1% /data

5. 驗證
cephyd@ceph-client1:~$ sudo dd if=/dev/zero of=/data/ceph-test-file bs=1MB count=300
300+0 records in
300+0 records out
300000000 bytes (300 MB, 286 MiB) copied, 0.492302 s, 609 MB/s
cephyd@ceph-client1:~$ df -h
cephyd@ceph-client1:~$ ll -h /data/
total 287M
drwxr-xr-x  3 root root 4.0K Aug 16 12:43 ./
drwxr-xr-x 23 root root 4.0K Aug 16 12:41 ../
-rw-r--r--  1 root root 287M Aug 16 12:43 ceph-test-file
-rw-r--r--  1 root root  18M Aug 16 12:41 lastlog
drwx------  2 root root  16K Aug 16 12:40 lost+found/
cephyd@ceph-client1:~$ sudo ceph df
--- RAW STORAGE ---
CLASS     SIZE    AVAIL     USED  RAW USED  %RAW USED
hdd    120 GiB  118 GiB  2.4 GiB   2.4 GiB       2.01
TOTAL  120 GiB  118 GiB  2.4 GiB   2.4 GiB       2.01

--- POOLS ---
POOL                   ID  PGS   STORED  OBJECTS     USED  %USED  MAX AVAIL
device_health_metrics   1    1      0 B        8      0 B      0     37 GiB
ydpool                  2   32   11 MiB        1   34 MiB   0.03     37 GiB
ydrbd1                  3   64  352 MiB      104  1.0 GiB   0.92     37 GiB