天天看點

國産KylinV10版使用ceph-deploy部署ceph叢集

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
           

繼續閱讀