CEPH安裝和配置
官⽅⽂檔是最好的 https://ceph.io/install/
此文檔的ceph版本是nautilus 也就是14的版本
Ceph: 開源的分布式存儲系統。主要分為對象存儲、塊裝置存儲、檔案系統服務 。Ceph核心元件包括:Ceph OSDs、Monitors、Managers、MDSs。Ceph存儲叢集 至少需要一個Ceph Monitor Ceph Monitor,Ceph Manager Ceph Manager和Ceph OSD(對象存儲守護進 程)。運作Ceph Filesystem用戶端時也需要Ceph中繼資料伺服器( Metada ta Server ta Server )。
Ceph OSDs: Ceph OSD 守護程序(ceph-osd)的功能是存儲資料,處理資料的 複制、恢複、回填、再均衡,并通過檢查其他 OSD 守護程序的心跳來向 Ceph M onitors 提供一些監控資訊。備援和高可用性通常至少需要3個Ceph OSD。當 Ce ph 存儲叢集設定為有2個副本時,至少需要2個 OSD 守護程序,叢集才能達到 a ctive+clean 狀态( Ceph 預設有3個副本,但你可以調整副本數)。
Monitors: Ceph Monitor(ceph-mon) 維護着展示叢集狀态的各種圖表, 包括螢幕圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 儲存着發生 在Monitors 、 OSD 和 PG上的每一次狀态變更的曆史資訊(稱為 epoch )。監 視器還負責管理守護程序和用戶端之間的身份驗證。備援和⾼可⽤性通常至少 需要三個螢幕。
Managers: Ceph Manager守護程序(ceph-mgr)負責跟蹤運作時名額和Ceph 叢集的目前狀态,包括存儲使用率,目前性能名額和系統負載。Ceph Manager守 護程序還托管基于python的插件來管理和公開Ceph叢集資訊,包括基于Web的Cep h Manager Dashboard和 REST API。高可用性通常至少需要兩個管理器。
MDSs: Ceph 中繼資料伺服器( MDS )為 Ceph 檔案系統存儲中繼資料(也就是 說,Ceph 塊裝置和 Ceph 對象存儲不使用MDS )。中繼資料伺服器使得 POSIX 文 件系統的使用者們,可以在不對 Ceph 存儲叢集造成負擔的前提下,執行諸如 ls 、find 等基本指令
環境準備
機器個數 3台(每台除系統盤外,有單獨一塊盤供ceph叢集使用)
系統Kylin Linux Advanced Server V10 (Sword)
預操作
1、關閉防火牆
systemctl stop firewalld.service
systemctl disable firewalld.service
2、修改yum源
baseurl = https://update.cs2c.com.cn/NS/V10/V10SP2-CTYUN/$basearch/
3、建立yum緩存
yum clean all
yum makecache
預安裝
安裝ceph相關的python 依賴庫(python版本是python2.7)
yum install python2-pip
pip install pyOpenSSL
pip install werkzeug
正式安裝
安裝ceph-deploy (部署ceph叢集的工具)
yum install ceph-deploy
配置主機名(3台機器分别是node1, node2, node3)下面以設定node1為例
hostnamectl set-hostname node1
做hosts檔案映射(3台機器都要做)
cat >> /etc/hosts << EOF
192.168.1.1 node1 #ip根據自己實際情況配置
192.168.1.2 node2 #ip根據自己實際情況配置
192.168.1.3 node3 #ip根據自己實際情況配置
EOF
建立cephuser使用者(3台機器都要建立該使用者,用于部署ceph叢集)下面以設定node1為例
useradd -m -s /bin/bash cephuser #建立cephuser使用者
passwd cephuser #設定密碼
12345 #這個是密碼内容,可自定義,注意密碼強度
- 注意:建立使用者時切不可以建立ceph⽤戶名,因為ceph⽤戶名被保留
配置cephuser使用者sudo 免密碼
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
sudo chmod 0440 /etc/sudoers.d/cephuser
設定免密碼登陸(3台機器都要做,切到cephuser使用者)
su - cephuser
ssh-keygen ####一路回車到底
ssh-copy-id cephu[email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
建立ssh config檔案
修改 管理節點的/root/.ssh/config檔案,以便ceph-deploy可以以建立的使用者身份登入到Ceph節點,而無需您指定每次執行的時間。這具有簡化和使用的額外好處 。替換為您建立的使用者名:
--username {username} ceph-deploy ssh scp {username}
mkdir .ssh #切換到root使用者 node1上操作即可
把下面内容添加到/root/.ssh/config
cat > /root/.ssh/config << EOF
Host node1
Hostname node1
User cephuser
Host node2
Hostname node2
User cephuser
Host node3
Hostname node3
User cephuser
EOF
建⽴⼀個叢集配置⽂件夾, 并⽣成叢集配置⽂件(node1 cephuser使用者下執行)
su - cephuser
mkdir my-cluster
cd my-cluster
ceph-deploy new node1 node2 node3 #在node1上操作即可
修改叢集配置(cephuser使用者下執行)
vi ceph.conf
public_network = 192.168.1.0/24 #根據⽹絡情況下,加⼊該⾏
在每個節點上安裝ceph基礎軟體(cephuser使用者下執行)
部署初始化monitors并收集所有的key(cephuser使用者下執行)
ceph-deploy mon create-initial
部署admin節點(cephuser使用者下執行)
ceph-deploy admin node1 node2 node3
部署mgr節點(cephuser使用者下執行)
ceph-deploy mgr create node1 node2 node3
建立OSD節點(cephuser使用者下執行)
ceph-deploy disk zap node1 /dev/sdb #如果以前此節點上有過osd要先删除首次安裝不需要執行,注意使用的硬碟
ceph-deploy disk zap node2 /dev/sdb #如果以前此節點上有過osd要先删除首次安裝不需要執行,注意使用的硬碟
ceph-deploy disk zap node3 /dev/sdb #如果以前此節點上有過osd要先删除首次安裝不需要執行,注意使用的硬碟
ceph-deploy osd create --bluestore --data /dev/sdb node1 #建立OSD節點注意使用的硬碟
ceph-deploy osd create --bluestore --data /dev/sdb node2 #建立OSD節點注意使用的硬碟
ceph-deploy osd create --bluestore --data /dev/sdb node3 #建立OSD節點注意使用的硬碟
- 若報錯[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-volume lvm zap /dev/sdb
執行lsblk
[email protected]:~/my-cluster$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 99G 0 part /
└─sda2 8:2 0 1K 0 part
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 100G 0 part
└─ceph--fb71ab24--7e37--4462--8ea0--5733da35d88f-osd--block--2ab51642--717f--491d--9b86--0c464b6e5d60 252:0 0 100G 0 lvm
sr0
然後
sudo dmsetup remove ceph--fb71ab24--7e37--4462--8ea0--5733da35d88f-osd--block--2ab51642--717f--491d--9b86--0c464b6e5d60
檢視OSD節點
[email protected]:~# ceph osd tree #該指令在root下執行
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.01469 root default
-3 0.00490 host node1
0 hdd 0.00490 osd.0 up 1.00000 1.00000
-5 0.00490 host node2
1 hdd 0.00490 osd.1 up 1.00000 1.00000
-7 0.00490 host node3
2 hdd 0.00490 osd.2 up 1.00000 1.00000
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-GFIHl7vv-1674887791413)(C:\Users\WONG\AppData\Roaming\Typora\typora-user-images\image-20210531151020124.png)]
[email protected]:/etc/ceph$ ceph osd stat #該指令在root下執行
3 osds: 3 up, 3 in; epoch: e17
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-r9ltaojp-1674887791414)(C:\Users\WONG\AppData\Roaming\Typora\typora-user-images\image-20201106110211064.png)]
[email protected]:/etc/ceph$ ceph osd status #該指令在root下執行
+----+-------+-------+-------+--------+---------+--------+---------+-----------+
| id | host | used | avail | wr ops | wr data | rd ops | rd data | state |
+----+-------+-------+-------+--------+---------+--------+---------+-----------+
| 0 | node1 | 1026M | 4089M | 0 | 0 | 0 | 0 | exists,up |
| 1 | node2 | 1026M | 4089M | 0 | 0 | 0 | 0 | exists,up |
| 2 | node3 | 1026M | 4089M | 0 | 0 | 0 | 0 | exists,up |
+----+-------+-------+-------+--------+---------+--------+---------+-----------+
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-Sapox1hQ-1674887791416)(C:\Users\WONG\AppData\Roaming\Typora\typora-user-images\image-20201106110306444.png)]
用ceph-deploy把配置推到其他節點 (在cephuser使用者下執行)
在目錄/home/cephuser/my-cluster下執行
ceph-deploy --overwrite-conf config push node1 node2 node3
ceph.conf 配置檔案内容如下:
[global]
fsid = 3ab8c009-dfc1-48d3-8c65-c30f1fbbbc9b
mon_initial_members = node1, node2, node3
mon_host = 192.168.1.162,192.168.1.163,192.168.1.164 #根據實際情況IP會不一樣
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public_network = 192.168.1.0/24 #根據實際情況配置網段
- 注意:如果Ceph部署出錯後,執行下面的步驟,然後從第步最後一行指令依次執行
-
ceph-deploy purge node1 node2 node3 #如果隻是node2部署錯誤後面跟node2即可, ceph-deploy purgedata node1 node2 node3 # 同上 ceph-deploy forgetkeys rm ceph.*
建立mds(cephuser使用者執行)
ceph-deploy --overwrite-conf mds create node1:mds-daemon-1
ceph-deploy --overwrite-conf mds create node2:mds-daemon-2
ceph-deploy --overwrite-conf mds create node3:mds-daemon-3
建立ceph檔案系統(CephFS 需要兩個 Pools - cephfs-data 和 cephfs-metadata, 分别存儲檔案資料和檔案中繼資料,root下執行)
ceph osd pool create cephfs_data 32
ceph osd pool create cephfs_metadata 32
ceph fs new cephfs cephfs_metadata cephfs_data
檢視ceph⽂件系統
ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
驗證至少一個mds進入Active狀态
[email protected]:~# ceph fs status cephfs
cephfs - 0 clients
======
+------+--------+--------------+---------------+-------+-------+
| Rank | State | MDS | Activity | dns | inos |
+------+--------+--------------+---------------+-------+-------+
| 0 | active | mds-daemon-2 | Reqs: 0 /s | 10 | 13 |
+------+--------+--------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
| Pool | type | used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata | 2286 | 8697M |
| cephfs_data | data | 0 | 8697M |
+-----------------+----------+-------+-------+
+--------------+
| Standby MDS |
+--------------+
| mds-daemon-1 |
| mds-daemon-3 |
+--------------+
MDS version: ceph version 13.2.10 (564bdc4ae87418a232fc901524470e1a0f76d641) mimic
建立RGW (提供對象存儲網關)
檢視ceph 狀态
[email protected]:~/my-cluster$ ceph -s
cluster:
id: defb0f9a-024b-449a-96a7-1f8e6954aa46
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active), standbys: node3, node2
mds: cephfs-1/1/1 up {0=mds-daemon-2=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in
rgw: 3 daemons active
data:
pools: 6 pools, 96 pgs
objects: 209 objects, 3.4 KiB
usage: 3.0 GiB used, 27 GiB / 30 GiB avail
pgs: 96 active+clean
io:
client: 17 KiB/s rd, 0 B/s wr, 17 op/s rd, 11 op/s wr
CEPH常見問題
1
删除MDS服務步驟如下:
1、停止mds程序。
#/etc/init.d/ceph stop mds
2、将mds服務辨別成失效。
#ceph mds fail 0
3、删除cephfs檔案系統。
#ceph fs rm cephfs --yes-i-really-mean-it
4、檢視ceph叢集狀态。
#ceph -s
删除mds 和cephfs檔案系統後
參照第20,21步重新建立mds 和cephfs
2
如何删除ceph的一個pool (此操作要對應的機器去一步步操作)
打開mon節點的配置檔案:
[[email protected]]# vi /etc/ceph/ceph.conf
解決辦法:
在配置檔案中添加如下内容:
[mon]
mon allow pool delete = true
重新開機ceph-mon服務:
[[email protected]]# systemctl restart ceph-mon.target
列出目前建立的pool
[[email protected]]# ceph osd pool ls
執行删除pool指令:
[[email protected] ~]# ceph osd pool delete cephfs_data cephfs_data –yes-i-really-really-mean-it #删除名稱是cephfs_data的pool
删除pool後記得把剛才添加到配置檔案中的内容删掉,然後重新開機ceph-mon服務
3
如果不是在root使用者下執行ceph -s 指令報如下錯誤:
ERR monclient: ERROR: missing keyring, cannot use cephx for authentication
解決辦法:
#執行如下指令
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
4
clock skew detected on mon
執行ceph -s 報錯
health: HEALTH_WARN
clock skew detected on mon
解決辦法:
成叢集狀态health_warn:clock skew detected on mon節點的原因有兩個,一個是mon節點上ntp伺服器未啟動,另一個是ceph設定的mon的時間偏差門檻值比較小
第一步:确認ntp服務是否正常工作
第二步:修改ceph配置中的時間偏差門檻值
1. 在admin部署節點修改配置參數:
# vi ~/my-cluster/ceph.conf
在global字段下添加:
mon clock drift allowed = 2
mon clock drift warn backoff = 30
2. 向需要同步的mon節點推送配置檔案:
# ceph-deploy --overwrite-conf config push node{1..3}
這裡是向node1 node2 node3推送,也可以後跟其它不連續節點
3. 重新開機mon服務
# systemctl restart ceph-mon.target
4.驗證:
# ceph -s
顯示health_ok說明問題解決
5
mon is allowing insecure global_id reclaim
health: HEALTH_WARN
mon is allowing insecure global_id reclaim
解決辦法:
#使用下面指令禁用不安全模式
ceph config set mon auth_allow_insecure_global_id_reclaim false
6
15 slow ops, oldest one blocked for 35 sec, mon.node3 has slow ops
health: HEALTH_WARN
15 slow ops, oldest one blocked for 35 sec, mon.node3 has slow ops
解決辦法:
先用ntp同步時間 然後重新開機ceph-mon
# systemctl stop ntp
# ntpdate ntp.aliyun.com #同步時間。此步如果報錯按下方<注意>執行
# hwclock --systohc # 時間同步到硬體時鐘
# systemctl start ntp
# systemctl restart ceph-mon.target
7
application not enabled on 1 pool(s)
health: HEALTH_WARN
application not enabled on 1 pool(s)
解決辦法:
# ceph health detail
HEALTH_WARN application not enabled on 1 pool(s); 1/3 mons down, quorum node1,node3
POOL_APP_NOT_ENABLED application not enabled on 1 pool(s)
application not enabled on pool 'k8s'
use 'ceph osd pool application enable <pool-name> <app-name>', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications.
#根據提示enable pool
# ceph osd pool application enable <pool-name> <app-name>
例如:ceph osd pool application enable k8s pgdata
8
full ratio(s) out of order
health:HEALTH_ERR
full ratio(s) out of order
解決辦法:
#ceph health detail
HELATH_ERR full ratio(s) out of order
OSD_OUT_OF_ORDER_FULL full raito(s) out of order
osd_failsafe_full_ratio(0.97)< full_ratio(0.98),increased
是以設定full_ratios值為0.97即可.執行下面指令
# ceph osd set-full-ratio 0.97
建立一個包含三個螢幕的新地圖(用于新的 Ceph 叢集):
monmaptool --create --add nodeA 192.168.0.10 --add nodeB 192.168.0.11 \
--add nodeC 192.168.0.12 --enable-all-features --clobber monmap
設定存儲池副本數量
#擷取目前名為k8s的存儲池副本數,預設是3個
#ceph osd pool get k8s size
#設定名為k8s的存儲池副本數為2
# ceph osd pool set k8s size 2
9 使用mount挂載cephfs
檢視管理者密鑰
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDPdgZcQXRtGBAAfAY5WZwZWdAKoTLqQwwDoA== #這個就是管理者的秘鑰,等會挂載的時候用得上
caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"
然後使用下面指令
10 daemons have recently crashed
[email protected]:/home/deploy/video-platform-helm-one# ceph -s
cluster:
id: 25405b82-f5fc-4692-822f-64ab4689c852
health: HEALTH_WARN
16 daemons have recently crashed
2.解決辦法
産生該問題的原因是資料在均衡或者復原等操作的時候,導緻其某個守護程序崩潰了,且沒有及時歸檔,是以叢集産生告警。
#ceph crash ls
#ceph crash archive <id>
OR
#ceph crash archive-all
檢視叢集狀态
#ceph -s