当前位置: 首页 > 工具软件 > ceph-deploy > 使用案例 >

国产KylinV10版使用ceph-deploy部署ceph集群

白云
2023-12-01

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 cephuser@node1
ssh-copy-id cephuser@node2
ssh-copy-id cephuser@node3
创建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用户下执行)
ceph-deploy install node1 node2 node3  #在node1上操作即可
部署初始化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

cephuser@node1:~/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节点
root@ubuntu:~# 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)]

root@node1:/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)]

cephuser@node1:/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状态

root@node1:~# 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 状态

cephuser@node1:~/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节点的配置文件:
[root@node1]# vi /etc/ceph/ceph.conf

解决办法:
在配置文件中添加如下内容:
[mon]
mon allow pool delete = true

重启ceph-mon服务:
[root@node1]# systemctl restart ceph-mon.target
列出当前创建的pool
[root@node1]# ceph osd pool ls
执行删除pool命令:
[root@node1 ~]# 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 *"

然后使用下面命令

mount -t ceph 10.33.1.55:6789,10.33.1.55:6789,:/ /mnt/cephfs -o name=admin,secret=AQDPdgZcQXRtGBAAfAY5WZwZWdAKoTLqQwwDoA==

10 daemons have recently crashed

root@node1:/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
 类似资料: