【Distributed】分布式Ceph存储系统之相关应用
文章目錄
- 一、創建 CephFS 文件系統 MDS 接口
- 1. 服務端操作
- 1.1 在管理節點創建 mds 服務
- 1.2 查看各個節點的 mds 服務
- 1.3 創建存儲池,啟用 ceph 文件系統
- 1.4 查看mds狀態
- 1.5 創建用戶
- 2. 客戶端操作
- 2.1 客戶端要在 public 網絡內
- 2.2 在客戶端創建工作目錄
- 2.3 在 ceph 的管理節點給客戶端拷貝文件
- 2.4 在客戶端安裝 ceph 軟件包
- 2.5 在客戶端制作秘鑰文件
- 2.6 客戶端掛載
- 方式一:基于內核
- 方式二:基于 fuse 工具
- 二、創建 Ceph 塊存儲系統 RBD 接口
- 1. 創建一個名為 rbd-demo 的專門用于 RBD 的存儲池
- 2. 將存儲池轉換為 RBD 模式
- 3. 初始化存儲池
- 4. 創建鏡像
- 5. 鏡像管理
- 5.1 查看鏡像的詳細信息
- 5.2 修改鏡像大小
- 5.3 刪除鏡像
- 6. Linux客戶端使用
- 6.1 管理節點操作
- 6.2 linux客戶端操作
- 7. 快照管理
- 7.1 在客戶端寫入文件
- 7.2 在管理節點對鏡像創建快照
- 7.3 列出指定鏡像所有快照
- 7.4 回滾鏡像到指定
- 7.5 限制鏡像可創建快照數
- 7.6 刪除快照
- 7.7 快照分層
- 7.8 快照展平
- 8. 鏡像的導出導入
- 8.1 導出鏡像
- 8.2 導入鏡像
- 三、創建 Ceph 對象存儲系統 RGW 接口
- 1. 對象存儲概念
- 2. 創建 RGW 接口
- 2.1 管理節點創建守護進程
- 2.2 開啟 http+https ,更改監聽端口
- 2.3 創建 RadosGW 賬戶
- 2.4 S3 接口訪問測試
- 四、OSD 故障模擬與恢復
- 1. 模擬 OSD 故障
- 2. 將壞掉的 osd 踢出集群
- 方法一
- 方法二
- 3. 把原來壞掉的 osd 修復后重新加入集群
一、創建 CephFS 文件系統 MDS 接口
1. 服務端操作
1.1 在管理節點創建 mds 服務
cd /etc/ceph ceph-deploy mds create node01 node02 node031.2 查看各個節點的 mds 服務
ssh root@node01 systemctl status ceph-mds@node01 ssh root@node02 systemctl status ceph-mds@node02 ssh root@node03 systemctl status ceph-mds@node031.3 創建存儲池,啟用 ceph 文件系統
??ceph 文件系統至少需要兩個 rados 池,一個用于存儲數據,一個用于存儲元數據。此時數據池就類似于文件系統的共享目錄。
ceph osd pool create cephfs_data 128 #創建數據Pool ceph osd pool create cephfs_metadata 128 #創建元數據Pool #創建 cephfs,命令格式:ceph fs new <FS_NAME> <CEPHFS_METADATA_NAME> <CEPHFS_DATA_NAME> ceph fs new mycephfs cephfs_metadata cephfs_data #啟用ceph,元數據Pool在前,數據Pool在后ceph fs ls #查看cephfs1.4 查看mds狀態
??一個up,其余兩個待命,目前的工作的是node01上的mds服務
ceph -s mds: mycephfs:1 {0=node01=up:active} 2 up:standbyceph mds stat mycephfs:1 {0=node01=up:active} 2 up:standby1.5 創建用戶
語法格式:ceph fs authorize <fs_name> client.<client_id> <path-in-cephfs> rw #賬戶為 client.zhangsan,用戶 name 為 zhangsan,zhangsan 對ceph文件系統的 / 根目錄(注意不是操作系統的根目錄)有讀寫權限 ceph fs authorize mycephfs client.zhangsan / rw | tee /etc/ceph/zhangsan.keyring# 賬戶為 client.lisi,用戶 name 為 lisi,lisi 對文件系統的 / 根目錄只有讀權限,對文件系統的根目錄的子目錄 /test 有讀寫權限 ceph fs authorize mycephfs client.lisi / r /test rw | tee /etc/ceph/lisi.keyring2. 客戶端操作
2.1 客戶端要在 public 網絡內
2.2 在客戶端創建工作目錄
mkdir /etc/ceph2.3 在 ceph 的管理節點給客戶端拷貝文件
#拷貝的文件分別是 ceph 的配置文件 ceph.conf 和賬號的秘鑰環文件 zhangsan.keyring、lisi.keyring scp ceph.conf zhangsan.keyring lisi.keyring root@client:/etc/ceph2.4 在客戶端安裝 ceph 軟件包
cd /opt wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate rpm -ivh ceph-release-1-1.el7.noarch.rpm yum install -y ceph2.5 在客戶端制作秘鑰文件
cd /etc/ceph ceph-authtool -n client.zhangsan -p zhangsan.keyring > zhangsan.key #把 zhangsan 用戶的秘鑰導出到 zhangsan.keyl ceph-authtool -n client.lisi -p lisi.keyring > lisi.key #把 lisi 用戶的秘鑰導出到 lisi.key2.6 客戶端掛載
方式一:基于內核
語法格式: mount -t ceph node01:6789,node02:6789,node03:6789:/ <本地掛載點目錄> -o name=<用戶名>,secret=<秘鑰> mount -t ceph node01:6789,node02:6789,node03:6789:/ <本地掛載點目錄> -o name=<用戶名>,secretfile=<秘鑰文件> 示例一: mkdir -p /data/zhangsan mount -t ceph node01:6789,node02:6789,node03:6789:/ /data/zhangsan -o name=zhangsan,secretfile=/etc/ceph/zhangsan.key示例二: mkdir -p /data/lisi mount -t ceph node01:6789,node02:6789,node03:6789:/ /data/lisi -o name=lisi,secretfile=/etc/ceph/lisi.key #驗證用戶權限 cd /data/lisi echo 123 > 2.txt -bash:2.txt:權限不夠echo 123 > test/2.txt cat test/2.txt 123 示例三: #停掉 node02 上的 mds 服務 ssh root@node02 "systemctl stop ceph-mds@node02"ceph -s#測試客戶端的掛載點仍然是可以用的,如果停掉所有的 mds,客戶端就不能用了方式二:基于 fuse 工具
#在 ceph 的管理節點給客戶端拷貝 ceph 的配置文件 ceph.conf 和賬號的秘鑰環文件 zhangsan.keyring、lisi.keyring scp ceph.client.admin.keyring root@client:/etc/ceph #在客戶端安裝 ceph-fuse yum install -y ceph-fuse #客戶端掛載 cd /data/aa ceph-fuse -m node01:6789,node02:6789,node03:6789 /data/aa [-o nonempty] #掛載時,如果掛載點不為空會掛載失敗,指定 -o nonempty 可以忽略二、創建 Ceph 塊存儲系統 RBD 接口
1. 創建一個名為 rbd-demo 的專門用于 RBD 的存儲池
ceph osd pool create rbd-demo 64 642. 將存儲池轉換為 RBD 模式
ceph osd pool application enable rbd-demo rbd3. 初始化存儲池
rbd pool init -p rbd-demo # -p 等同于 --pool4. 創建鏡像
rbd create -p rbd-demo --image rbd-demo1.img --size 10G可簡寫為: rbd create rbd-demo/rbd-demo2.img --size 10G5. 鏡像管理
#查看存儲池下存在哪些鏡像 rbd ls -l -p rbd-demo5.1 查看鏡像的詳細信息
rbd info -p rbd-demo --image rbd-demo1.img rbd image 'rbd-demo.img':size 10 GiB in 2560 objects #鏡像的大小與被分割成的條帶數order 22 (4 MiB objects) #條帶的編號,有效范圍是12到25,對應4K到32M,而22代表2的22次方,這樣剛好是4Msnapshot_count: 0id: 5fc98fe1f304 #鏡像的ID標識block_name_prefix: rbd_data.5fc98fe1f304 #名稱前綴format: 2 #使用的鏡像格式,默認為2features: layering, exclusive-lock, object-map, fast-diff, deep-flatten #當前鏡像的功能特性op_features: #可選的功能特性flags:5.2 修改鏡像大小
rbd resize -p rbd-demo --image rbd-demo1.img --size 20Grbd info -p rbd-demo --image rbd-demo1.img#使用 resize 調整鏡像大小,一般建議只增不減,如果是減少的話需要加選項 --allow-shrink rbd resize -p rbd-demo --image rbd-demo1.img --size 5G --allow-shrink5.3 刪除鏡像
#直接刪除鏡像 rbd rm -p rbd-demo --image rbd-demo2.img rbd remove rbd-demo/rbd-demo2.img#推薦使用 trash 命令,這個命令刪除是將鏡像移動至回收站,如果想找回還可以恢復 rbd trash move rbd-demo/rbd-demo1.imgrbd ls -l -p rbd-demorbd trash list -p rbd-demo 3879e456ea41 rbd-demo1.img#還原鏡像 rbd trash restore rbd-demo/3879e456ea41rbd ls -l -p rbd-demo6. Linux客戶端使用
??客戶端使用 RBD 有兩種方式:
- 通過內核模塊KRBD將鏡像映射為系統本地塊設備,通常設置文件一般為:/dev/rbd*
- 另一種是通過librbd接口,通常KVM虛擬機使用這種接口。
??本例主要是使用Linux客戶端掛載RBD鏡像為本地磁盤使用。開始之前需要在所需要客戶端節點上面安裝 ceph-common 軟件包,因為客戶端需要調用rbd命令將RBD鏡像映射到本地當作一塊普通硬盤使用。并還需要把 ceph.conf 配置文件和授權keyring文件復制到對應的節點。
6.1 管理節點操作
#在管理節點創建并授權一個用戶可訪問指定的 RBD 存儲池 #示例,指定用戶標識為client.osd-mount,對另對OSD有所有的權限,對Mon有只讀的權限 ceph auth get-or-create client.osd-mount osd "allow * pool=rbd-demo" mon "allow r" > /etc/ceph/ceph.client.osd-mount.keyring#修改RBD鏡像特性 #CentOS7默認情況下只支持layering和striping特性,需要將其它的特性關閉 rbd feature disable rbd-demo/rbd-demo1.img object-map,fast-diff,deep-flatten#將用戶的keyring文件和ceph.conf文件發送到客戶端的/etc/ceph目錄下 cd /etc/ceph scp ceph.client.osd-mount.keyring ceph.conf root@client:/etc/ceph6.2 linux客戶端操作
#安裝 ceph-common 軟件包 yum install -y ceph-common #斷開映射 rbd unmap rbd-demo/rbd-demo1.img#執行客戶端映射 cd /etc/ceph rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount#查看映射 rbd showmapped rbd device list#斷開映射 rbd unmap rbd-demo/rbd-demo1.img #格式化并掛載 mkfs.xfs /dev/rbd0mkdir -p /data/bb mount /dev/rbd0 /data/bbdf-hT #在線擴容 #在管理節點調整鏡像的大小 rbd resize rbd-demo/rbd-demo1.img --size 30G#在客戶端刷新設備文件 xfs_growfs /dev/rbd0 #刷新xfs文件系統容量 resize2fs /dev/rbd0 #刷新ext4類型文件系統容量7. 快照管理
??對 rbd 鏡像進行快照,可以保留鏡像的狀態歷史,另外還可以利用快照的分層技術,通過將快照克隆為新的鏡像使用。
7.1 在客戶端寫入文件
echo 1111 > /data/bb/11.txt echo 2222 > /data/bb/22.txt echo 3333 > /data/bb/33.txt7.2 在管理節點對鏡像創建快照
rbd snap create --pool rbd-demo --image rbd-demo1.img --snap demo1_snap1可簡寫為: rbd snap create rbd-demo/rbd-demo1.img@demo1_snap17.3 列出指定鏡像所有快照
rbd snap list rbd-demo/rbd-demo1.img#用json格式輸出: rbd snap list rbd-demo/rbd-demo1.img --format json --pretty-format7.4 回滾鏡像到指定
??在回滾快照之前,需要將鏡像取消鏡像的映射,然后再回滾。
#在客戶端操作 rm -rf /data/bb/* umount /data/bb rbd unmap rbd-demo/rbd-demo1.img #在管理節點操作 rbd snap rollback rbd-demo/rbd-demo1.img@demo1_snap1 #在客戶端重新映射并掛載 rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount mount /dev/rbd0 /data/bb ls /data/bb #發現數據還原回來了7.5 限制鏡像可創建快照數
rbd snap limit set rbd-demo/rbd-demo1.img --limit 3#解除限制: rbd snap limit clear rbd-demo/rbd-demo1.img7.6 刪除快照
#刪除指定快照: rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap1#刪除所有快照: rbd snap purge rbd-demo/rbd-demo1.img7.7 快照分層
??快照分層支持用快照的克隆生成新鏡像,這種鏡像與直接創建的鏡像幾乎完全一樣,支持鏡像的所有操作。唯一不同的是克隆鏡像引用了一個只讀的上游快照,而且此快照必須要設置保護模式。
#快照克隆 1)將上游快照設置為保護模式: rbd snap create rbd-demo/rbd-demo1.img@demo1_snap666 rbd snap protect rbd-demo/rbd-demo1.img@demo1_snap666 rbd snap list rbd-demo/rbd-demo1.img2)克隆快照為新的鏡像 rbd clone rbd-demo/rbd-demo1.img@demo1_snap666 --dest rbd-demo/rbd-demo666.img rbd ls -l -p rbd-demo3)命令查看克隆完成后快照的子鏡像 rbd children rbd-demo/rbd-demo1.img@demo1_snap6667.8 快照展平
通常情況下通過快照克隆而得到的鏡像會保留對父快照的引用,這時候不可以刪除該父快照,否則會有影響。 rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap666 #報錯 snapshot 'demo1_snap666' is protected from removal.如果要刪除快照但想保留其子鏡像,必須先展平其子鏡像,展平的時間取決于鏡像的大小 1) 展平子鏡像 rbd flatten rbd-demo/rbd-demo666.img2)取消快照保護 rbd snap unprotect rbd-demo/rbd-demo1.img@demo1_snap6663)刪除快照 rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap666rbd ls -l -p rbd-demo #在刪除掉快照后,查看子鏡像依然存在8. 鏡像的導出導入
8.1 導出鏡像
rbd export rbd-demo/rbd-demo1.img /opt/rbd-demo1.img8.2 導入鏡像
#卸載客戶端掛載,并取消映射 umount /data/bb rbd unmap rbd-demo/rbd-demo1.img#清除鏡像下的所有快照,并刪除鏡像 rbd snap purge rbd-demo/rbd-demo1.img rbd rm rbd-demo/rbd-demo1.imgrbd ls -l -p rbd-demo#導入鏡像 rbd import /opt/rbd-demo1.img rbd-demo/rbd-demo1.imgrbd ls -l -p rbd-demo三、創建 Ceph 對象存儲系統 RGW 接口
1. 對象存儲概念
??對象存儲(object storage)是非結構數據的存儲方法,對象存儲中每一條數據都作為單獨的對象存儲,擁有唯一的地址來識別數據對象,通常用于云計算環境中。不同于其他數據存儲方法,基于對象的存儲不使用目錄樹。
??雖然在設計與實現上有所區別,但大多數對象存儲系統對外呈現的核心資源類型大同小異。從客戶端的角度來看,分為以下幾個邏輯單位:
- Amazon S3:提供了用戶(User)、存儲桶(Bucket)、對象(Object)。三者的關系是:1.User 將 Object 存儲到系統上的 Bucket。2.存儲桶屬于某個用戶并可以容納對象,一個存儲桶用于存儲多個對象。3.同一個用戶可以擁有多個存儲桶,不同用戶允許使用相同名稱的Bucket,因此User名稱即可做為Bucket的名稱空間。
-
OpenStack Swift:提供了user、container和object分別對應于用戶、存儲桶和對象,不過它還額外為user提供了父級組件account,用于表示一個項目或用戶,因此一個account中可以包含一到多個user,它們可共享使用同一組container,并為container提供名稱空間。
-
RadosGW:提供了user、subuser、bucket和object,其中的user對應于S3的user,而subuser則對應于Swift的user,不過user和subuser都不支持為bucket提供名稱空間,因此不同用戶的存儲桶不允許同名;不過,自jewel版本起,RadosGW引入了tenant(租戶)用于為user和bucket提供名稱空間,但他是個可選組件。
??從上可以看出大多數對象存儲的核心資源類型大同小異,如 Amazon S3、OpenStack Swift 與 RadosGw。其中 S3 與 Swift 互不兼容,RadosGw 為了兼容 S3 與 Swift, Ceph 在 RadosGW 集群的基礎上提供了 RGW(RadosGateway)數據抽象層和管理層,它可以原生兼容 S3 和 Swift 的 API。
??S3和Swift它們可基于http或https完成數據交換,由RadosGW內建的Civetweb提供服務,它還可以支持代理服務器包括nginx、haproxy等以代理的形式接收用戶請求,再轉發至RadosGW進程。
??RGW 的功能依賴于對象網關守護進程實現,負責向客戶端提供 REST API 接口。出于冗余負載均衡的需求,一個 Ceph 集群上通常不止一個 RadosGW 守護進程。
2. 創建 RGW 接口
如果需要使用到類似 S3 或者 Swift 接口時候才需要部署/創建 RadosGW 接口,RadosGW 通常作為對象存儲(Object Storage)使用,類于阿里云OSS。
2.1 管理節點創建守護進程
#在管理節點創建一個 RGW 守護進程(生產環境下此進程一般需要高可用,后續介紹) cd /etc/ceph ceph-deploy rgw create node01ceph -sservices:mon: 3 daemons, quorum node01,node02,node03 (age 3h)mgr: node01(active, since 12h), standbys: node02mds: mycephfs:1 {0=node02=up:active} 2 up:standbyosd: 6 osds: 6 up (since 12h), 6 in (since 25h)rgw: 1 daemon active (node01)#創建成功后默認情況下會自動創建一系列用于 RGW 的存儲池 ceph osd pool ls rgw.root default.rgw.control #控制器信息 default.rgw.meta #記錄元數據 default.rgw.log #日志信息 default.rgw.buckets.index #為 rgw 的 bucket 信息,寫入數據后生成 default.rgw.buckets.data #是實際存儲的數據信息,寫入數據后生成 #默認情況下 RGW 監聽 7480 號端口 ssh root@node01 netstat -lntp | grep 7480curl node01:7480 <?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName/></Owner><Buckets/> </ListAllMyBucketsResult>2.2 開啟 http+https ,更改監聽端口
RadosGW 守護進程內部由 Civetweb 實現,通過對 Civetweb 的配置可以完成對 RadosGW 的基本管理。
#要在 Civetweb 上啟用SSL,首先需要一個證書,在 rgw 節點生成證書 #1)生成CA證書私鑰 openssl genrsa -out civetweb.key 2048#2)生成CA證書公鑰 openssl req -new -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=192.168.145.30"#3)將生成的證書合并為pem cat civetweb.key civetweb.crt > /etc/ceph/civetweb.pem #更改監聽端口 Civetweb 默認監聽在 7480 端口并提供 http 協議,如果需要修改配置需要在管理節點編輯 ceph.conf 配置文件 cd /etc/cephvim ceph.conf ...... [client.rgw.node01] rgw_host = node01 rgw_frontends = "civetweb port=80+443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"------------------------------------------------------------●rgw_host:對應的RadosGW名稱或者IP地址 ●rgw_frontends:這里配置監聽的端口,是否使用https,以及一些常用配置: ?port:如果是https端口,需要在端口后面加一個s。 ?ssl_certificate:指定證書的路徑。 ?num_threads:最大并發連接數,默認為50,根據需求調整,通常在生產集群環境中此值應該更大 ?request_timeout_ms:發送與接收超時時長,以ms為單位,默認為30000 ?access_log_file:訪問日志路徑,默認為空?error_log_file:錯誤日志路徑,默認為空 ------------------------------------------------------------ #修改完 ceph.conf 配置文件后需要重啟對應的 RadosGW 服務,再推送配置文件 ceph-deploy --overwrite-conf config push node0{1..3}ssh root@node01 systemctl restart ceph-radosgw.target#在 rgw 節點上查看端口 netstat -lntp | grep -w 80 netstat -lntp | grep 443#在客戶端訪問驗證 curl http://192.168.145.30:80 curl -k https://192.168.145.30:4432.3 創建 RadosGW 賬戶
#在管理節點使用 radosgw-admin 命令創建 RadosGW 賬戶 radosgw-admin user create --uid="rgwuser" --display-name="rgw test user" ......"keys": [{"user": "rgwuser","access_key": "M7V46PDGQPR6793SZAY4","secret_key": "faxJWw7BzWVHKzgyXJcUc07CSYvu5Tb8FBPa4aTI"}],#創建成功后將輸出用戶的基本信息,其中最重要的兩項信息為 access_key 和 secret_key 。用戶創建成后功,如果忘記用戶信息可以使用下面的命令查看 radosgw-admin user info --uid="rgwuser"2.4 S3 接口訪問測試
#1)在客戶端安裝 python3、python3-pip yum install -y python3 python3-pippython3 -V Python 3.6.8pip3 -V pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)#2)安裝 boto 模塊,用于測試連接 S3 pip3 install boto#3)測試訪問 S3 接口 echo 123123 > /opt/123.txt vim test.py#coding:utf-8 import ssl import boto.s3.connection from boto.s3.key import Key try:_create_unverified_https_context = ssl._create_unverified_context except AttributeError:pass else:ssl._create_default_https_context = _create_unverified_https_context#test用戶的keys信息 access_key = "M7V46PDGQPR6793SZAY4" #輸入 RadosGW 賬戶的 access_key secret_key = "faxJWw7BzWVHKzgyXJcUc07CSYvu5Tb8FBPa4aTI" #輸入 RadosGW 賬戶的 secret_key#rgw的ip與端口 host = "192.168.145.30" #輸入 RGW 接口的 public 網絡地址#如果使用443端口,下述鏈接應設置is_secure=True port = 443 #如果使用80端口,下述鏈接應設置is_secure=False #port = 80 conn = boto.connect_s3(aws_access_key_id=access_key,aws_secret_access_key=secret_key,host=host,port=port,is_secure=True,validate_certs=False,calling_format=boto.s3.connection.OrdinaryCallingFormat() )#一:創建存儲桶 #conn.create_bucket(bucket_name='bucket01') #conn.create_bucket(bucket_name='bucket02')#二:判斷是否存在,不存在返回None exists = conn.lookup('bucket01') print(exists) #exists = conn.lookup('bucket02') #print(exists)#三:獲得一個存儲桶 #bucket1 = conn.get_bucket('bucket01') #bucket2 = conn.get_bucket('bucket02')#四:查看一個bucket下的文件 #print(list(bucket1.list())) #print(list(bucket2.list()))#五:向s3上存儲數據,數據來源可以是file、stream、or string #5.1、上傳文件 #bucket1 = conn.get_bucket('bucket01') # name的值是數據的key #key = Key(bucket=bucket1, name='myfile') #key.set_contents_from_filename('/opt/123.txt') # 讀取 s3 中文件的內容,返回 string 即文件 123.txt 的內容 #print(key.get_contents_as_string())#5.2、上傳字符串 #如果之前已經獲取過對象,此處不需要重復獲取 bucket2 = conn.get_bucket('bucket02') key = Key(bucket=bucket2, name='mystr') key.set_contents_from_string('hello world') print(key.get_contents_as_string())#六:刪除一個存儲桶,在刪除存儲桶本身時必須刪除該存儲桶內的所有key bucket1 = conn.get_bucket('bucket01') for key in bucket1:key.delete() bucket1.delete() 4)按照以上步驟執行 python 腳本測試 python3 test.py四、OSD 故障模擬與恢復
1. 模擬 OSD 故障
??如果 ceph 集群有上千個 osd,每天壞 2~3 個太正常了,我們可以模擬 down 掉一個 osd
#如果 osd 守護進程正常運行,down 的 osd 會很快自恢復正常,所以需要先關閉守護進程 #在node1節點 ssh root@node01 systemctl stop ceph-osd@0#down 掉 osd,node1節點 ceph osd down 0 #在管理節點 ceph osd tree2. 將壞掉的 osd 踢出集群
方法一
#將 osd.0 移出集群,集群會開始自動同步數據 ceph osd out osd.0#將 osd.0 移除 crushmap ceph osd crush remove osd.0#刪除守護進程對應的賬戶信息 ceph auth rm osd.0ceph auth list#刪掉 osd.0 ceph osd rm osd.0ceph osd stat ceph -s方法二
ceph osd out osd.0#使用綜合步驟,刪除配置文件中針對壞掉的 osd 的配置 ceph osd purge osd.0 --yes-i-really-mean-it3. 把原來壞掉的 osd 修復后重新加入集群
#在 osd 節點創建 osd,無需指定名,會按序號自動生成 cd /etc/cephceph osd create #創建賬戶,指定操作權限 ceph-authtool --create-keyring /etc/ceph/ceph.osd.0.keyring --gen-key -n osd.0 --cap mon 'allow profile osd' --cap mgr 'allow profile osd' --cap osd 'allow *'#導入新的賬戶秘鑰 ceph auth import -i /etc/ceph/ceph.osd.0.keyringceph auth list#更新對應的 osd 文件夾中的密鑰環文件 ceph auth get-or-create osd.0 -o /var/lib/ceph/osd/ceph-0/keyring #加入 crushmap ceph osd crush add osd.0 1.000 host=node01 #1.000 代表權重#加入集群 ceph osd in osd.0ceph osd tree #重啟 osd 守護進程 systemctl restart ceph-osd@0ceph osd tree #稍等片刻后 osd 狀態為 up #如果重啟失敗 報錯: Job for ceph-osd@0.service failed because start of the service was attempted too often. See "systemctl status ceph-osd@0.service" and "journalctl -xe" for details. To force a start use "systemctl reset-failed ceph-osd@0.service" followed by "systemctl start ceph-osd@0.service" again.#運行 systemctl reset-failed ceph-osd@0.service && systemctl restart ceph-osd@0.service總結
以上是生活随笔為你收集整理的【Distributed】分布式Ceph存储系统之相关应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 页边距和页眉页脚的设置
- 下一篇: oci 创建nlb的terraform代