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)
完整的版本信息
[root@node1]#cat /etc/os-release
NAME=“Kylin Linux Advanced Server”
VERSION=“V10 (Sword)”
ID=“kylin”
VERSION_ID=“V10”
PRETTY_NAME=“Kylin Linux Advanced Server V10 (Sword)”
ANSI_COLOR=“0;31”
预操作
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)
root@node1:/etc/ceph$ ceph osd stat #该命令在root下执行
3 osds: 3 up, 3 in; epoch: e17
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9ltaojp-1674887791414)
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)
用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