学习目标
这一节,我们从 基础知识、环境规划、小结 三个方面来学习。
基础知识
注意事项
在Ceph系统的搭建过程中,会出现各种意想不到或者预想到问题,就算整个过程中每一步都没问题,还是会出现各种问题,这些问题不仅仅在网上找不到,甚至在官网中找不到,甚至玩ceph数年的人都解决不了。
尤其是,就算你第一次成功后,第二次重试就会出现问题。所以,如果出现问题怎么办?一步一步踏踏实实的进行研究,分析解决问题,并进行总结并梳理成册就可以了。
简介
ceph的环境部署是非常繁琐的,所以,官方帮我们提供了很多的快捷部署方式。
参考资料:
https://docs.ceph.com/en/pacific/install/
推荐方法:
Cephadm
使用容器和 systemd 安装和管理 Ceph 集群,并与 CLI 和仪表板 GUI 紧密集成。
仅支持 Octopus 和更新版本,需要容器和 Python3支持
与新的编排 API 完全集成
Rook
在 Kubernetes 中运行的 Ceph 集群,同时还支持通过 Kubernetes API 管理存储资源和配置。
仅支持 Nautilus 和较新版本的 Ceph
其他方法
ceph-ansible 使用Ansible部署Ceph集群,对于新的编排器功能、管理功能和仪表板支持不好。
ceph-deploy 是一个快速部署集群的工具,不支持Centos8
DeepSea 使用 Salt 安装 Ceph
ceph-mon 使用 Juju 安装 Ceph
Puppet-ceph 通过 Puppet 安装 Ceph
二进制源码 手工安装
windows图形 在windows主机上,通过鼠标点点点的方式进行部署。
版本的选择
版本地址:https://docs.ceph.com/en/latest/releases/
最新版本:官网版本 v16.2.10 Pacific
版本特性:x.0.z(开发版)、x.1.z(候选版)、x.2.z(稳定、修正版)
环境规划
网络规划
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yz5VoCex-1667980213627)(image/image-20211110140641473.png)]
公有网络(public):
- 用于用户的数据通信
- 10.0.0.0/16
集群网络(cluster):
- 用于集群内部的管理通信
- 192.168.8.0/16
主机规划
磁盘规划
磁盘1 - VM的系统盘
磁盘2和磁盘3 - Ceph的OSD
主机名规划
主机名 公有网络 私有网络 磁盘 其他角色
admin 10.0.0.12 192.168.8.12 sdb、sdc
stor01 10.0.0.13 192.168.8.13 sdb、sdc mon01
stor02 10.0.0.14 192.168.8.14 sdb、sdc mon02
stor03 10.0.0.15 192.168.8.15 sdb、sdc mon03
stor04 10.0.0.16 192.168.8.16 sdb、sdc
stor05 10.0.0.17 192.168.8.17 sdb、sdc
stor06 10.0.0.18 192.168.8.18 sdb、sdc
注意:
由于生产中,ceph的集群角色是非常多的,当我们的主机量少的时候,只能让一台主机节点运行多个角色。
stor01~03 这三台主机,还同时兼具 mon的角色,视情况兼容mgr角色
主机名的完整格式是: xxx.superopsmsb.com
其他准备
管理用户
由于我们接下来的所有操作,基本上都在 admin这个主机上来运行,所以,我们不推荐直接使用root用户来管理,倾向于通过一个普通用户来操作接下来的操作。
由于后续的安装软件,涉及到root用户权限的操作,所以这个普通用户最好具备sudo的权限。
时间同步
对于任何一个集群来说,时间同步是非常重要的。
主机名规划
随着生产中的主机节点越来越多,我们通过手工定制主机名的方式就不太适合集群的主机管理了。所以在企业中,我们的主机名相关的信息,倾向于通过内网dns来进行管理。
尤其是等我们到 radosgw的时候,必须通过泛域名解析的机制来实现,更强大的面向客户端的主机名管理体系。
VM主机准备
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ELUIkJSz-1667980213628)(image/image-20211108105810433.png)]
所有节点都准备三块盘,两块网卡
虚拟网络设置:
VMnet1 设定为 192.168.8.0 网段, VMnet8 设定为 10.0.0.0 网段
虚拟机设置
额外添加两块盘,每个根据自己的情况设定容量,我这里设定为20G
额外更加一块网络适配器,使用仅主机模式 -- VMnet1,mac地址必须要重新生成,避免冲突
小结
学习目标
这一节,我们从 基本环境、软件安装、小结 三个方面来学习。
基本环境
主机名管理
编辑 /etc/hosts 文件
10.0.0.12 admin.superopsmsb.com admin
10.0.0.13 stor01.superopsmsb.com stor01 mon01.superopsmsb.com mon01
10.0.0.14 stor02.superopsmsb.com stor02 mon02.superopsmsb.com mon02
10.0.0.15 stor03.superopsmsb.com stor03 mon03.superopsmsb.com mon03
10.0.0.16 stor04.superopsmsb.com stor04
10.0.0.17 stor05.superopsmsb.com stor05
10.0.0.18 stor06.superopsmsb.com stor06
注意:
后续可能会涉及到k8s环境的部署,所以hosts文件有可能会发生变动。
防火墙管理
关闭防火墙
systemctl stop iptables firewalld
systemctl disable iptables firewalld
systemctl status iptables firewalld
跨主机通信
请输入有效的操作id: 2
请输入需要批量远程主机认证的主机列表范围(示例: {12…19}): {12…18}
开始执行免密认证操作…
…
Now try logging into the machine, with: “ssh ‘[email protected]’”
and check to make sure that only the key(s) you wanted were added.
…
Now try logging into the machine, with: “ssh ‘[email protected]’”
and check to make sure that only the key(s) you wanted were added.
请输入有效的操作id: 5
开始退出管理界面…
```powershell
测试效果
[root@localhost ~]# for i in {12..18}; do hostname=$(ssh [email protected].$i "hostname"); echo "10.0.0.$i - $hostname"; done
10.0.0.12 - admin
10.0.0.13 - mon01
10.0.0.14 - mon02
10.0.0.15 - mon03
10.0.0.16 - stor04
10.0.0.17 - stor05
10.0.0.18 - stor06
软件安装
用户管理
创建普通用户
useradd -m cephadm -s /bin/bash
echo cephadm:123456 | chpasswd
为用户配置root权限
echo "cephadm ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadm
chmod 0440 /etc/sudoers.d/cephadm
切换用户时候不输出最近登录信息
[root@admin ~]# grep "se.*postlogin" /etc/pam.d/su
# session include postlogin
脚本方法 02_create_ceph_user.sh
#!/bin/bash
# 功能: 创建专属的ceph管理用户
# 版本: v0.1
# 作者: 书记
# 联系: superopsmsb.com
# 准备工作
login_user='cephadm'
login_pass='123456'
# 设定普通用户
useradd -m ${login_user} -s /bin/bash
echo ${login_user}:${login_pass} | chpasswd
echo "${login_user} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${login_user}
chmod 0440 /etc/sudoers.d/${login_user}
批量执行
for i in {13..18}
do
ssh root@10.0.0.$i "mkdir /data/scripts -p"
scp /data/scripts/02_create_ceph_user.sh root@10.0.0.$i:/data/scripts/02_create_ceph_user.sh
ssh root@10.0.0.$i "/bin/bash /data/scripts/02_create_ceph_user.sh"
done
确认效果
[root@localhost ~]# for i in {12..18}; do usermsg=$(ssh [email protected].$i "id cephadm"); echo "10.0.0.$i - $usermsg"; done
10.0.0.12 - uid=1001(cephadm) gid=1001(cephadm) 组=1001(cephadm)
10.0.0.13 - uid=1001(cephadm) gid=1001(cephadm) 组=1001(cephadm)
10.0.0.14 - uid=1001(cephadm) gid=1001(cephadm) 组=1001(cephadm)
10.0.0.15 - uid=1001(cephadm) gid=1001(cephadm) 组=1001(cephadm)
10.0.0.16 - uid=1001(cephadm) gid=1001(cephadm) 组=1001(cephadm)
10.0.0.17 - uid=1001(cephadm) gid=1001(cephadm) 组=1001(cephadm)
10.0.0.18 - uid=1001(cephadm) gid=1001(cephadm) 组=1001(cephadm)
跨主机免密码认证
更改文件权限
chown cephadm:cephadm /data/scripts/03_remote_cephadm_auth.sh
切换用户
su - cephadm
```powershell
执行脚本文件
[cephadm@admin ~]$ /bin/bash /data/scripts/03_remote_cephadm_auth.sh
批量设定远程主机免密码认证管理界面
=====================================================
1: 部署环境 2: 免密认证 3: 退出操作
=====================================================
请输入有效的操作id: 1
开始部署环境操作...
expect环境已经部署完毕
Generating public/private rsa key pair.
Your identification has been saved in /home/cephadm/.ssh/id_rsa.
Your public key has been saved in /home/cephadm/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:EvrdtcF4q+e2iyVVOovFkoHOisorCem+1eSG7WO+NCQ cephadm@admin
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| . . . . |
| . + * o |
| . E.o. S + @ |
|o Oo + . B * |
|o. o.Bo . + = |
|oo..+o. =o |
|.+=.o+o o++o |
+----[SHA256]-----+
秘钥文件已经创建完毕
批量设定远程主机免密码认证管理界面
=====================================================
1: 部署环境 2: 免密认证 3: 退出操作
=====================================================
请输入有效的操作id: 2
请输入需要批量远程主机认证的主机列表范围(示例: {12..19}): {12..18}
开始执行免密认证操作...
...
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
批量设定远程主机免密码认证管理界面
=====================================================
1: 部署环境 2: 免密认证 3: 退出操作
=====================================================
请输入有效的操作id: 3
开始退出管理界面...
测试效果
[cephadm@admin ~]$ for i in {12..18}; do hostname=$(ssh cephadm@10.0.0.$i "hostname"); echo "10.0.0.$i - $hostname"; done
10.0.0.12 - admin
10.0.0.13 - mon01
10.0.0.14 - mon02
10.0.0.15 - mon03
10.0.0.16 - stor04
10.0.0.17 - stor05
10.0.0.18 - stor06
因为10.0.0.13-15 有两个角色,所以我们需要将相关角色的免密认证
num_list={1..3}
for i in $(eval echo stor0$num_list stor0$num_list.superopsmsb.com); do ssh-copy-id cephadm@$i; done
定制软件源
对于ceph-deploy方式部署Ceph来说,Ceph的官方仓库路径是http://download.ceph.com/,包括各种ceph版本,比如octopus、pacific、quincy等,它根据不同OS系统环境,分别位于rpm-版本号 或者 debian-版本号 的noarch目录下。比如pacific版本的软件相关源在 rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm。
注意:
el7代表支持Red Hat 7.x、CentOS 7.x 系统的软件
el8代表支持Red Hat 8.x、CentOS 8.x 系统的软件
pacific版本及其更新版本,只支持CentOS 8.x环境
Ceph的pacific和Quincy版本,仅仅支持CentOS8.X,Octopus版本虽然有CentOS7的版本,不仅仅软件不全,而且对于底层GCC库和GLIBC库要求比较高,如果升级CentOS7的底层库,会导致其他软件受到影响,无法正常使用,另外没有配套的ceph-deploy。所以对于CentOS7来说,只能部署Nautilus版本和更低版本。
对于Ubuntu系统来说,即使多个版本对于底层环境要求有些区别,但是经过测试,问题不大,也就是说Ubuntu系统可以安装Ceph的全系列
安装软件源
yum install -y https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
更新软件源
yum makecache fast
所有ceph节点部署软件源
for i in {12..18}
do
ssh root@10.0.0.$i yum install -y https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
ssh root@10.0.0.$i yum makecache fast
done
部署依赖
admin主机安装ceph软件
yum update -y
yum install ceph-deploy python-setuptools python2-subprocess32 -y
测试效果
su - cephadm -c "ceph-deploy --help"
命令解析
查看命令帮助
[root@admin ~]# su - cephadm
[cephadm@admin ~]$ ceph-deploy --help
**小结**
### 1.2.3 Ceph部署
学习目标
这一节,我们从 集群创建、Mon环境、小结 三个方面来学习。
**集群创建**
准备工作
```powershell
首先在管理节点上以cephadm用户创建集群相关的配置文件目录:
su - cephadm
mkdir ceph-cluster && cd ceph-cluster
初始化集群解析
操作解析
ceph-deploy new --help
初始化第一个MON节点的命令格式为”ceph-deploy new {initial-monitor-node(s)}“,
- mon01即为第一个MON节点名称,其名称必须与节点当前实际使用的主机名称(uname -n)保存一致
- 可以是短名称,也可以是长名称,但是最终用的仍然是短名称,但是会导致如下报错:
ceph-deploy new: error: hostname: xxx is not resolvable
- 推荐使用完整写法:
格式 hostname:fqdn,比如 mon01:mon01.superopsmsb.com
注意:
如果初始化的时候,希望同时部署多个节点的换,使用空格隔开hostname:fqdn即可
如果部署过程出现问题,需要清空
ceph-deploy forgetkeys
ceph-deploy purge mon01
ceph-deploy purgedata mon01
rm ceph.*
集群初始化
部署3个mon节点
[cephadm@admin ceph-cluster]$ ceph-deploy new --public-network 10.0.0.0/24 --cluster-network 192.168.8.0/24 mon01:mon01.superopsmsb.com mon02:mon02.superopsmsb.com mon03:mon03.superopsmsb.com --no-ssh-copykey
...
[ceph_deploy.new][DEBUG ] Resolving host mon03.superopsmsb.com
[ceph_deploy.new][DEBUG ] Monitor mon03 at 10.0.0.15
[ceph_deploy.new][DEBUG ] Monitor initial members are ['mon01', 'mon02', 'mon03']
[ceph_deploy.new][DEBUG ] Monitor addrs are [u'10.0.0.13', u'10.0.0.14', u'10.0.0.15']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...
注意:
如果出现如下报错:
[ceph_deploy][ERROR ] AttributeError: 'module' object has no attribute 'needs_ssh'
在执行命令的时候,添加一个 --no-ssh-copykey 参数即可
这主要是因为免密认证的时候,没有进行 ssh cephadm@主机名 导致的
查看效果
查看初始化后的文件内容
[cephadm@admin ceph-cluster]$ ls
ceph.conf ceph.log ceph.mon.keyring
查看集群的配置文件
[cephadm@admin ceph-cluster]$ cat ceph.conf
[global]
fsid = 7738ce65-2d87-481c-8253-9d0d4b29e8eb # 这个地方很重要的,每次都不一样,不要乱动
public_network = 10.0.0.0/24
cluster_network = 192.168.8.0/24
mon_initial_members = mon01, mon02, mon03
mon_host = 10.0.0.13,10.0.0.14,10.0.0.15
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
查看集群通信的认证信息
[cephadm@admin ceph-cluster]$ cat ceph.mon.keyring
[mon.]
key = AQBZ9y1jAAAAABAAKnVONZ3l+EEpjUOjtK8Xmw==
caps mon = allow *
查看集群初始化的日志信息
[cephadm@admin ceph-cluster]$ cat ceph.log
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
...
部署Mon
部署mon软件
操作解析:
ceph-deploy命令能够以远程的方式连入Ceph集群各节点完成程序包安装等操作
命令格式:
ceph-deploy install {ceph-node} [{ceph-node} ...]
示例:ceph-deploy install --nogpgcheck admin mon01 mon02 mon03
注意:
这里主要是ceph的工作角色的的节点
一般情况下,不推荐使用这种直接的方法来进行安装,效率太低,而且容易干扰其他主机环境
注意:
上面会在所有节点上都来进行正常的安装部署其实还有另外一种方法,手工在所有节点上安装ceph软件-- 推荐
yum install -y ceph ceph-osd ceph-mds ceph-mon ceph-radosgw
最后在admin角色主机上安装
ceph-deploy install --no-adjust-repos --nogpgcheck admin mon01 mon02 mon03
执行过程
[cephadm@admin ceph-cluster]$ ceph-deploy install --no-adjust-repos --nogpgcheck admin mon01 mon02 mon03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (1.5.25): /bin/ceph-deploy install --no-adjust-repos admin mon01 mon02 mon03
[ceph_deploy.install][DEBUG ] Installing stable version hammer on cluster ceph hosts admin mon01 mon02 mon03
[ceph_deploy.install][DEBUG ] Detecting platform for host mon01 ...
[admin][DEBUG ] connection detected need for sudo
[admin][DEBUG ] connected to host: admin
...
[mon03][DEBUG ] 完毕!
[mon03][INFO ] Running command: sudo ceph --version
[mon03][DEBUG ] ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable)
集群通信认证
配置初始MON节点,同时向所有节点同步配置
ceph-deploy mon create-initial
注意:
为了避免因为认证方面导致的通信失败,尤其是在现有环境上,推荐使用 --overwrite-conf 参数
ceph-deploy --overwrite-conf config push mon01 mon02 mon03
执行效果
[cephadm@admin ceph-cluster]$ ceph-deploy mon create-initial
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /bin/ceph-deploy mon create-initial
到mon的节点上查看mon的守护进程
[cephadm@admin ceph-cluster]$ for i in {13..15}; do ssh cephadm@10.0.0.$i "ps aux | grep -v grep | grep ceph-mon"; done
ceph 2189 0.1 1.8 504004 34644 ? Ssl 11:55 0:00 /usr/bin/ceph-mon -f --cluster ceph --id mon01 --setuser ceph --setgroup ceph
ceph 2288 0.1 1.7 502984 33328 ? Ssl 11:55 0:00 /usr/bin/ceph-mon -f --cluster ceph --id mon02 --setuser ceph --setgroup ceph
ceph 2203 0.1 1.7 502988 32912 ? Ssl 11:55 0:00 /usr/bin/ceph-mon -f --cluster ceph --id mon03 --setuser ceph --setgroup ceph
结果显示:
在所有的节点主机上,都有一套ceph-mon的进程在进行。
集群在初始化的时候,会为对应的mon节点生成配套的认证信息
[cephadm@admin ceph-cluster]$ ls /home/cephadm/ceph-cluster
ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring
ceph-deploy-ceph.log ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring
ceph.conf ceph.mon.keyring
结果显示:
这里生成了一系列的与ceph集群相关的 认证文件
ceph.bootstrap-mds.keyring 引导启动 mds的秘钥文件
ceph.bootstrap-osd.keyring 引导启动 osd的秘钥文件
ceph.client.admin.keyring ceph客户端和管理端通信的认证秘钥,是最重要的
ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring 引导启动 mgr的秘钥文件
ceph.bootstrap-rgw.keyring 引导启动 rgw的秘钥文件
ceph.conf
ceph.mon.keyring
注意:
ceph.client.admin.keyring 拥有ceph集群的所有权限,一定不能有误。
小结
学习目标
这一节,我们从 Mon认证、Mgr环境、小结、三个方面来学习
Mon认证
为了方便后续的监控环境认证操作,在admin角色主机上,把配置文件和admin密钥拷贝Ceph集群各监控角色节点,拷贝前秘钥文件前的各个mon节点效果
[cephadm@admin ceph-cluster]$ for i in {13..15}; do ssh cephadm@10.0.0.$i "echo -----$i-----; ls /etc/ceph"; done
-----13-----
ceph.conf
rbdmap
tmpc8lO0G
-----14-----
ceph.conf
rbdmap
tmpkmxmh3
-----15-----
ceph.conf
rbdmap
tmp4GwYSs
原则上要求,所有mon节点上的 ceph.conf 内容必须一致,如果不一致的话,可以通过下面命令同步
ceph-deploy --overwrite-conf config push mon01 mon02 mon03
执行集群的认证文件的拷贝动作
ceph-deploy admin mon01 mon02 mon03
执行认证文件信息同步
[cephadm@admin ceph-cluster]$ ceph-deploy admin mon01 mon02 mon03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
...
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to mon01
...
[mon01][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to mon02
...
[mon02][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to mon03
...
[mon03][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
查看效果
[cephadm@admin ceph-cluster]$ for i in {13..15}; do ssh cephadm@10.0.0.$i "echo -----$i-----; ls /etc/ceph"; done
-----13-----
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpc8lO0G
-----14-----
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpkmxmh3
-----15-----
ceph.client.admin.keyring
ceph.conf
rbdmap
tmp4GwYSs
结果显示:
所有的mon节点上多了一个 ceph的客户端与服务端进行认证的秘钥文件了。
ceph.client.admin.keyring 主要用于 ceph客户端与管理端的一个通信认证。
注意:如果我们不做交互式操作的话,这个文件可以不用复制。
认证文件权限
虽然我们把认证文件传递给对应的监控角色主机了,但是我们的服务式通过普通用户cephadm来进行交流的。而默认情况下,传递过去的认证文件,cephadm普通用户是无法正常访问的
[cephadm@admin ceph-cluster]$ for i in {13..15}; do ssh cephadm@10.0.0.$i "echo -----$i-----; ls /etc/ceph/ceph.cl* -l"; done
-----13-----
-rw------- 1 root root 151 9月 25 12:06 /etc/ceph/ceph.client.admin.keyring
-----14-----
-rw------- 1 root root 151 9月 25 12:06 /etc/ceph/ceph.client.admin.keyring
-----15-----
-rw------- 1 root root 151 9月 25 12:06 /etc/ceph/ceph.client.admin.keyring
我们需要在Ceph集群中需要运行ceph命令的的节点上,以root用户的身份设定普通用户cephadm能够读
取/etc/ceph/ceph.client.admin.keyring文件的权限。
[cephadm@admin ceph-cluster]$ for i in {13..15}; do ssh cephadm@10.0.0.$i "sudo setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring"; done
查看文件权限效果
[cephadm@admin ceph-cluster]$ for i in {13..15}; do ssh cephadm@10.0.0.$i "echo -----$i-----; ls /etc/ceph/ceph.cl* -l"; done
-----13-----
-rw-r-----+ 1 root root 151 9月 25 12:06 /etc/ceph/ceph.client.admin.keyring
-----14-----
-rw-r-----+ 1 root root 151 9月 25 12:06 /etc/ceph/ceph.client.admin.keyring
-----15-----
-rw-r-----+ 1 root root 151 9月 25 12:06 /etc/ceph/ceph.client.admin.keyring
查看文件的授权信息
[root@mon01 ~]# getfacl /etc/ceph/ceph.client.admin.keyring
getfacl: Removing leading '/' from absolute path names
# file: etc/ceph/ceph.client.admin.keyring
# owner: root
# group: root
user::rw-
user:cephadm:r--
group::---
mask::r--
other::---
监控节点就可以自己来收集相关的数据了,比如我们在mon01上执行如下命令
[root@mon01 ~]# ceph -s
cluster:
id: 1d4e5773-619a-479d-861a-66ba451ce945
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 18m)
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
结果显示:
我们的cluster状态不是正常的
对于service来说,有三个mon服务,选举的节点有三个,其他的服务没有。
集群状态不正常的原因,我们可以通过 ceph health命令来进行确认,效果如下
[root@mon01 ~]# ceph health
HEALTH_WARN mons are allowing insecure global_id reclaim
[root@mon01 ~]# ceph health detail
HEALTH_WARN mons are allowing insecure global_id reclaim
AUTH_INSECURE_GLOBAL_ID_RECLAIM_ALLOWED mons are allowing insecure global_id reclaim
mon.mon01 has auth_allow_insecure_global_id_reclaim set to true
mon.mon02 has auth_allow_insecure_global_id_reclaim set to true
mon.mon03 has auth_allow_insecure_global_id_reclaim set to true
结果显示:
我们在所有的mon节点上进行提示属性的设定
[root@mon01 ~]# ceph config set mon auth_allow_insecure_global_id_reclaim false
[root@mon01 ~]# ceph health detail
HEALTH_OK
结果显示:
集群状态问题已经解决了
Mgr环境
需求
Ceph-MGR工作的模式是事件驱动型的,简单来说,就是等待事件,事件来了则处理事件返回结果,又继续等待。Ceph MGR 是 Ceph 12.2 依赖主推的功能之一,它负责 Ceph 集群管理的组件,它主要功能是把集群的一些指标暴露给外界使用。根据官方的架构原则上来说,mgr要有两个节点来进行工作。
对于我们的学习环境来说,其实一个就能够正常使用了,为了节省资源的使用,我们这里将mon01 和mon02主机节点兼做MGR节点,为了后续的节点扩充实践,我们暂时先安装一个节点,后面再安装一个节点。
未部署mgr节点的集群状态效果
[cephadm@admin ceph-cluster]$ ssh mon01 ceph -s
cluster:
id: 1d4e5773-619a-479d-861a-66ba451ce945
health: HEALTH_OK
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 29m)
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
mgr服务配置
配置Manager节点,启动ceph-mgr进程:
[cephadm@admin ceph-cluster]$ ceph-deploy mgr create mon01
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /bin/ceph-deploy mgr create mon01
[ceph_deploy.cli][INFO ] ceph-deploy options:
...
[ceph_deploy.cli][INFO ] mgr : [('mon01', 'mon01')]
...
[mon01][INFO ] Running command: sudo systemctl start ceph-mgr@mon
在指定的mgr节点上,查看守护进程
[cephadm@admin ceph-cluster]$ ssh mon01 ps aux | grep -v grep | grep ceph-mgr
ceph 3065 2.8 6.6 1037824 124244 ? Ssl 12:27 0:01 /usr/bin/ceph-mgr -f --cluster ceph --id mon01 --setuser ceph --setgroup ceph
结果显示:
在mon01上,部署了一个mgr的服务进程
查看集群服务的运行状态
[cephadm@admin ceph-cluster]$ ssh mon01 ceph -s
cluster:
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 33m)
mgr: mon01(active, since 86s)
osd: 0 osds: 0 up, 0 in
data:
...
结果显示:
这个时候,service上,多了一个mgr的服务,在mon01节点上,服务状态是 active。
admin查看状态
远程查看状态方式不太方便,我们可以在admin主机上进行一下操作来实现admin主机查看集群状态
sudo yum -y install ceph-common
ceph-deploy admin admin
sudo setfacl -m u:cephadm:rw /etc/ceph/ceph.client.admin.keyring
确认效果
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
id: 1d4e5773-619a-479d-861a-66ba451ce945
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 37m)
mgr: mon01(active, since 4m)
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
小结
学习目标
这一节,我们从 基本环境、OSD实践、小结、三个方面来学习。
基本环境
简介
我们知道对于osd来说,它进行真正数据的存储的引擎有两种:BlueStore和FileStore,自动Ceph L版之后,默认都是BlueStore了。
基本流程
一般来说,我们可以通过一下四个步骤来设置OSD环境:
1 要知道对应的主机上有哪些磁盘可以提供给主机来进行正常的使用。
2 格式化磁盘(非必须)
3 ceph擦除磁盘上的数据
4 添加osd
1 确保提供专属数据磁盘,然后进行格式化
根据我们的了解,我们为所有的节点主机都准备了两块额外的磁盘,
fdisk -l
2 进行磁盘格式化
我们在所有的osd角色的主机上,进行磁盘的格式化操作,对所有的osd节点主机进行磁盘格式化。
mkfs.ext4 /dev/sdb
mkfs.ext4 /dev/sdc
查看磁盘格式化效果,以mon03为例
[root@mon03 ~]# blkid | egrep "sd[bc]"
/dev/sdb: UUID="49b5be7c-76dc-4ac7-a3e6-1f54526c83df" TYPE="ext4"
/dev/sdc: UUID="ecdc0ce6-8045-4caa-b272-2607e70700ee" TYPE="ext4"
3 ceph擦除磁盘上的数据
保证所有包含OSD磁盘上主机上,安装ceph的命令
yum install -y ceph radosgw
检查并列出OSD节点上所有可用的磁盘的相关信息
[cephadm@admin ceph-cluster]$ ceph-deploy disk list stor01 stor02 stor03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /bin/ceph-deploy disk list stor01 stor02 stor03
...
[stor01][DEBUG ] connection detected need for sudo
...
[stor01][INFO ] Running command: sudo fdisk -l
[stor02][DEBUG ] connection detected need for sudo
...
[stor02][INFO ] Running command: sudo fdisk -l
[stor03][DEBUG ] connection detected need for sudo
...
[stor03][INFO ] Running command: sudo fdisk -l
在管理节点上使用ceph-deploy命令擦除计划专用于OSD磁盘上的所有分区表和数据以便用于OSD,
[cephadm@admin ceph-cluster]$ for i in {1..3}
do
ceph-deploy disk zap stor0$i /dev/sdb /dev/sdc
done
...
[stor03][WARNIN] stderr: 记录了10+0 的读入
[stor03][WARNIN] 记录了10+0 的写出
[stor03][WARNIN] 10485760字节(10 MB)已复制
[stor03][WARNIN] stderr: ,0.018883 秒,555 MB/秒
[stor03][WARNIN] --> Zapping successful for: /dev/sdc>
OSD实践
命令解析
对于osd的相关操作,可以通过 ceph-deploy osd 命令来进行,帮助信息如下
[cephadm@admin ceph-cluster]$ ceph-deploy osd --help
usage: ceph-deploy osd [-h] {list,create} ...
C
帮助显示:这里提示了两类的存储机制:
对于bluestore来说,它主要包括三类数据:
--data /path/to/data ceph 保存的对象数据
--block-db /path/to/db-device ceph 保存的对象数据
--block-wal /path/to/wal-device 数据库的 wal 日志
对于filestore来说,它主要包括两类数据
--data /path/to/data ceph的文件数据
--journal /path/to/journal 文件系统日志数据
对于 osd来说,它主要有两个动作:
list 列出osd相关的信息
create 创建osd设备
添加OSD命令解读
对于osd的创建来说,我们来看一下他的基本格式
[cephadm@admin ceph-cluster]$ ceph-deploy osd create --help
usage: ceph-deploy osd create [-h] [--data DATA] [--journal JOURNAL]
[--zap-disk] [--fs-type FS_TYPE] [--dmcrypt]
[--dmcrypt-key-dir KEYDIR] [--filestore]
[--bluestore] [--block-db BLOCK_DB]
[--block-wal BLOCK_WAL] [--debug]
[HOST]
positional arguments:
HOST Remote host to connect
optional arguments:
-h, --help show this help message and exit
--data DATA The OSD data logical volume (vg/lv) or absolute path
to device
--journal JOURNAL Logical Volume (vg/lv) or path to GPT partition
--zap-disk DEPRECATED - cannot zap when creating an OSD
--fs-type FS_TYPE filesystem to use to format DEVICE (xfs, btrfs)
--dmcrypt use dm-crypt on DEVICE
--dmcrypt-key-dir KEYDIR
directory where dm-crypt keys are stored
--filestore filestore objectstore
--bluestore bluestore objectstore
--block-db BLOCK_DB bluestore block.db path
--block-wal BLOCK_WAL
bluestore block.wal path
--debug Enable debug mode on remote ceph-volume calls
结果显示:
对于osd的创建,默认情况下用的就是 bluestore类型,
4 添加osd
创建osd,我们这里全部用于存储数据。
ceph-deploy --overwrite-conf osd create stor01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create stor01 --data /dev/sdc
注意:
这里只能一个磁盘一个磁盘的添加
查看效果
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf osd create stor01 --data /dev/sdc
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /bin/ceph-deploy --overwrite-conf osd create stor01 --data /dev/sdc
...
[stor01][WARNIN] --> ceph-volume lvm activate successful for osd ID: 1
[stor01][WARNIN] --> ceph-volume lvm create successful for: /dev/sdc
[stor01][INFO ] checking OSD status...
[stor01][DEBUG ] find the location of an executable
[stor01][INFO ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host stor01 is now ready for osd use.
查看命令执行后的ceph的集群状态
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 59m)
mgr: mon01(active, since 27m)
osd: 2 osds: 2 up (since 98s), 2 in (since 98s)
data:
...
结果显示:
在services部分,的osd多了信息,有两个osd是up的状态,而且都加入到了集群中。
接下来,我们通过批量操作的方式,将其他节点主机的磁盘都格式化
for i in 2 3
do
ceph-deploy --overwrite-conf osd create stor0$i --data /dev/sdb
ceph-deploy --overwrite-conf osd create stor0$i --data /dev/sdc
done
执行后的效果如下:
再次查看集群状态
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 66m)
mgr: mon01(active, since 34m)
osd: 6 osds: 6 up (since 5s), 6 in (since 5s)
data:
...
结果显示:
osd的磁盘数量达到了 6个,都是处于up的状态。
对于ceph集群的数据容量来说,一共有120G的磁盘空间可以使用
查看节点磁盘状态
OSD的磁盘状态查看
对于osd来说,它还有一个专门用于osd管理的 命令 ceph,相关的帮助信息如下
ceph osd --help
帮助解析:
这里面有几个是与osd信息查看相关的
ls 查看所有OSD的id值
dump 查看 OSD 的概述性信息
status 查看 OSD 的详细的状态信息
stat 查看 OSD 的精简的概述性信息
查看所有OSD的id值
[cephadm@admin ceph-cluster]$ ceph osd ls
0
1
2
3
4
5
查看 OSD 的概述性信息
[cephadm@admin ceph-cluster]$ ceph osd dump
epoch 25
...
max_osd 6
osd.0 up in weight 1 up_from 5 up_thru 0 down_at 0 last_clean_interval [0,0) [v2:10.0.0.13:6802/5544,v1:10.0.0.13:6803/5544] [v2:192.168.8.13:6800/5544,v1:192.168.8.13:6801/5544] exists,up 78bd7a7e-9dcf-4d91-be20-d5de2fbec7dd
...
查看 OSD 的精简的概述性信息
[cephadm@admin ceph-cluster]$ ceph osd stat
6 osds: 6 up (since 4m), 6 in (since 4m); epoch: e25
小结
学习目标
这一节,我们从 基本实践、进阶实践、小结、三个方面来学习。
基本实践
简介
OSD全称Object Storage Device,负责响应客户端请求返回具体数据的进程。一个Ceph集群中,有专门的osd角色主机,在这个主机中一般有很多个OSD设备。
对于osd来说,它还有一个专门用于osd管理的 命令 ceph,相关的帮助信息如下
ceph osd --help
帮助解析:
这里面有几个是与osd信息查看相关的
ls 查看所有OSD的id值
dump 查看 OSD 的概述性信息
status 查看 OSD 的详细的状态信息
stat 查看 OSD 的精简的概述性信息
tree 查看 OSD 在主机上的分布信息
perf 查看 OSD 磁盘的延迟统计信息
df 查看 OSD 磁盘的使用率信息
命令查看
查看所有OSD的id值
[cephadm@admin ceph-cluster]$ ceph osd ls
```powershell
查看 OSD 的数据映射信息
[cephadm@admin ceph-cluster]$ ceph osd dump
epoch 25
...
max_osd 6
osd.0 up in weight 1 up_from 5 up_thru 0 down_at 0 last_clean_interval [0,0) [v2:10.0.0.13:6802/5544,v1:10.0.0.13:6803/5544] [v2:192.168.8.13:6800/5544,v1:192.168.8.13:6801/5544] exists,up 78bd7a7e-9dcf-4d91-be20-d5de2fbec7dd
...
查看指定OSD节点的信息
[cephadm@admin ceph-cluster]$ ceph osd dump 3
epoch 3
fsid 1d4e5773-619a-479d-861a-66ba451ce945
...
osd.0 down out weight 0 up_from 0 up_thru 0 down_at 0 last_clean_interval [0,0) exists,new 78bd7a7e-9dcf-4d91-be20-d5de2fbec7dd
查看 OSD 的精简的概述性信息
[cephadm@admin ceph-cluster]$ ceph osd stat
6 osds: 6 up (since 4m), 6 in (since 4m); epoch: e25
状态解析:
OSD节点数量(osds)
集群内(in)、集群外(out)
运行(up)、不再运行(down)
OSD 的每一次状态变更的历史信息(epoch)
查看 OSD 的详细的状态信息
[cephadm@admin ceph-cluster]$ ceph osd status
查看OSD在各个主机上的分布情况
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.11691 root default
-3 0.03897 host mon01
0 hdd 0.01949 osd.0 up 1.00000 1.00000
1 hdd 0.01949 osd.1 up 1.00000 1.00000
-5 0.03897 host mon02
2 hdd 0.01949 osd.2 up 1.00000 1.00000
3 hdd 0.01949 osd.3 up 1.00000 1.00000
-7 0.03897 host mon03
4 hdd 0.01949 osd.4 up 1.00000 1.00000
5 hdd 0.01949 osd.5 up 1.00000 1.00000
查看OSD磁盘的延迟统计信息
[cephadm@admin ceph-cluster]$ ceph osd perf
osd commit_latency(ms) apply_latency(ms)
5 0 0
4 0 0
0 0 0
1 0 0
2 0 0
3 0 0
结果显示:
主要解决单块磁盘问题,如果有问题及时剔除OSD。统计的是平均值
commit_latency 表示从接收请求到设置commit状态的时间间隔
apply_latency 表示从接收请求到设置apply状态的时间间隔
查看OSD磁盘的使用率信息
[cephadm@admin ceph-cluster]$ ceph osd df
命令格式:
ceph osd pause 集群暂停接收数据
ceph osd unpause 集群开始接收数据
[cephadm@admin ceph-cluster]$ ceph osd pause
pauserd,pausewr is set
[cephadm@admin ceph-cluster]$ ceph -s
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 2h)
mgr: mon01(active, since 2h)
osd: 6 osds: 6 up (since 107m), 6 in (since 107m)
flags pauserd,pausewr # 可以看到,多了pause的标签
...
[cephadm@admin ceph-cluster]$ ceph osd unpause
pauserd,pausewr is unset
[cephadm@admin ceph-cluster]$ ceph -s
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 2h)
mgr: mon01(active, since 2h)
osd: 6 osds: 6 up (since 107m), 6 in (since 107m)
... # 可以看到,pause的标签已经被移除
osd数据操作比重
命令格式:
osd节点上线:ceph osd crush reweight osd.编号 权重值
查看默认的OSD操作权重值
[cephadm@admin ceph-cluster]$ ceph osd crush tree
ID CLASS WEIGHT TYPE NAME
-1 0.11691 root default
-3 0.03897 host mon01
0 hdd 0.01949 osd.0
1 hdd 0.01949 osd.1
...
修改osd的数据操作权重值
[cephadm@admin ceph-cluster]$ ceph osd crush reweight osd.0 0.1
reweighted item id 0 name 'osd.0' to 0.1 in crush map
[cephadm@admin ceph-cluster]$ ceph osd crush tree
ID CLASS WEIGHT TYPE NAME
-1 0.19742 root default
-3 0.11948 host mon01
0 hdd 0.09999 osd.0
1 hdd 0.01949 osd.1
...
恢复osd的数据操作权重值
[cephadm@admin ceph-cluster]$ ceph osd crush reweight osd.0 0.01949
reweighted item id 0 name 'osd.0' to 0.01949 in crush map
[cephadm@admin ceph-cluster]$ ceph osd crush tree
ID CLASS WEIGHT TYPE NAME
-1 0.11691 root default
-3 0.03897 host mon01
0 hdd 0.01949 osd.0
1 hdd 0.01949 osd.1
osd上下线
命令格式:
osd节点上线:ceph osd down osd编号
osd节点下线:ceph osd up osd编号
注意:
由于OSD有专门的管理服务器控制,一旦发现被下线,会尝试启动它
将磁盘快速下线,然后查看状态
[cephadm@admin ceph-cluster]$ ceph osd down 0 ; ceph osd tree
marked down osd.0.
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.11691 root default
-3 0.03897 host mon01
0 hdd 0.01949 osd.0 down 1.00000 1.00000
...
等待一秒钟后查看状态,指定的节点又上线了
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.11691 root default
-3 0.03897 host mon01
0 hdd 0.01949 osd.0 up 1.00000 1.00000
...
驱逐加入OSD对象
命令格式:
ceph osd out osd编号
ceph osd in osd编号
注意:
所谓的从OSD集群中驱离或者加入OSD对象,本质上Ceph集群数据操作的权重值调整
将0号OSD下线
[cephadm@admin ceph-cluster]$ ceph osd out 0
marked out osd.0.
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.11691 root default
-3 0.03897 host mon01
0 hdd 0.01949 osd.0 up 0 1.00000
...
将0号OSD上线
[cephadm@admin ceph-cluster]$ ceph osd in 0;
marked in osd.0.
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.11691 root default
-3 0.03897 host mon01
0 hdd 0.01949 osd.0 up 1.00000 1.00000
...
结果显示:
OSD在上下线实践的时候,所谓的REWEIGHT会进行调整,1代表上线,空代表下线
小结
学习目标
这一节,我们从 OSD删除、OSD添加、小结 三个方面来学习
OSD删除
基本步骤
将OSD删除需要遵循一定的步骤:
1 修改osd的数据操作权重值,让数据不分布在这个节点上
2 到指定节点上,停止指定的osd进程
3 将移除OSD节点状态标记为out
4 从crush中移除OSD节点,该节点不作为数据的载体
5 删除OSD节点
6 删除OSD节点的认证信息
删除OSD节点实践
修改osd的数据操作权重值
[cephadm@admin ceph-cluster]$ ceph osd crush reweight osd.5 0
reweighted item id 5 name 'osd.5' to 0 in crush map
[cephadm@admin ceph-cluster]$ ceph osd crush tree
ID CLASS WEIGHT TYPE NAME
...
-7 0.01949 host mon03
4 hdd 0.01949 osd.4
5 hdd 0 osd.5
到指定节点上,停止指定的osd进程
[cephadm@admin ceph-cluster]$ ssh mon03 sudo systemctl disable ceph-osd@5
Removed symlink /etc/systemd/system/ceph-osd.target.wants/ceph-osd@5.service.
[cephadm@admin ceph-cluster]$ ssh mon03 sudo systemctl stop ceph-osd@5
[cephadm@admin ceph-cluster]$ ssh mon03 sudo systemctl status ceph-osd@5
...
9月 25 15:25:32 mon03 systemd[1]: Stopped Ceph object storage daemon osd.5.
将移除OSD节点状态标记为out
[cephadm@admin ceph-cluster]$ ceph osd out osd.5
marked out osd.5.
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
...
-7 0.01949 host mon03
4 hdd 0.01949 osd.4 up 1.00000 1.00000
5 hdd 0 osd.5 down 0 1.00000
从crush中移除OSD节点,该节点不作为数据的载体
[cephadm@admin ceph-cluster]$ ceph osd crush remove osd.5
removed item id 5 name 'osd.5' from crush map
查看效果
[cephadm@admin ceph-cluster]$ ceph osd crush tree
ID CLASS WEIGHT TYPE NAME
...
-7 0.01949 host mon03
4 hdd 0.01949 osd.4
结果显示:
osd.5 已经被移除了
删除OSD节点前查看效果
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
...
-7 0.01949 host mon03
4 hdd 0.01949 osd.4 up 1.00000 1.00000
5 0 osd.5 down 0 1.00000
移除无效的osd节点
[cephadm@admin ceph-cluster]$ ceph osd rm osd.5
removed osd.5
再次确认效果
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
...
-7 0.01949 host mon03
4 hdd 0.01949 osd.4 up 1.00000 1.00000
结果显示:
osd节点已经被移除了
查看历史认证信息
[cephadm@admin ceph-cluster]$ ceph auth ls
...
osd.5
key: AQCy4C9jI1wzDhAAaPjSPSQpMdu8NUPIRecctQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
...
删除OSD节点的认证信息
[cephadm@admin ceph-cluster]$ ceph auth del osd.5
updated
[cephadm@admin ceph-cluster]$ ceph auth ls
...
结果显示:
已经没有历史的节点信息了
OSD添加
基本步骤
将OSD增加到集群需要遵循一定的步骤:
1 确定OSD节点没有被占用
2 磁盘格式化
3 ceph擦除磁盘上的数据
4 添加OSD到集群
添加OSD节点实践简介
确定OSD节点没有被占用
[root@mon03 ~]# blkid | egrep 'sd[bc]'
/dev/sdb: UUID="h3NNr5-Sgr8-nJ8k-QWbY-UiRu-Pbmu-nxs3pZ" TYPE="LVM2_member"
/dev/sdc: UUID="VdOW5k-zxMN-4Se5-Bxlc-8h93-uhPA-R30P3u" TYPE="LVM2_member"
格式化磁盘失败
[root@mon03 ~]# mkfs.ext4 /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
无论如何也要继续? (y,n) y
/dev/sdc is apparently in use by the system; will not make a 文件系统 here!
查看被占用的磁盘
[root@mon03 ~]# dmsetup status
ceph--9dd352be--1b6e--4d60--957e--81c59eafa7b3-osd--block--49251ee9--b1cc--432f--aed7--3af897911b60: 0 41934848 linear
ceph--3712fe04--cc04--4ce4--a75e--f7f746d62d6f-osd--block--99787a7e--40ee--48ae--802a--491c4f326d0c: 0 41934848 linear
1 确定OSD节点没有被占用,注意ceph的osd挂载目录
[root@mon03 ~]# cat /var/lib/ceph/osd/ceph-4/fsid
49251ee9-b1cc-432f-aed7-3af897911b60
移除被占用磁盘
[root@mon03 ~]# dmsetup remove ceph--3712fe04--cc04--4ce4--a75e--f7f746d62d6f-osd--block--99787a7e--40ee--48ae--802a--491c4f326d0c
[root@mon03 ~]# dmsetup status | grep 99787a7e
2 磁盘格式化
[root@mon03 ~]# mkfs.ext4 /dev/sdc
3 ceph擦除磁盘上的数据
[cephadm@admin ceph-cluster]$ ceph-deploy disk zap stor03 /dev/sdc
4 添加OSD到集群
ceph-deploy --overwrite-conf osd create stor03 --data /dev/sdc
确认效果
[cephadm@admin ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
...
-7 0.03897 host mon03
4 hdd 0.01949 osd.4 up 1.00000 1.00000
5 hdd 0.01949 osd.5 up 1.00000 1.00000
结果显示:
之前被移除的osd节点已经被找回来了
小结
学习目标
这一节,我们从 基本环境、OSD实践、小结、三个方面来学习。
基本环境
存储术语
Pool
RADOS存储集群提供的基础存储服务需要由“存储池(pool)”分割为逻辑存储 区域,此类的逻辑区域亦是对象数据的名称空间。
PG
归置组(Placement Group)是用于跨OSD将数据存储在某个存储池中的内部数据 结构
相对于存储池来说,PG是一个虚拟组件,它是对象映射到存储池时使用的虚拟层
是实现大容量集群的关键效率技术
PGP
(Placement Group for Placement)是用于维持PG和OSD的一种策略。
防止OSD重新分配时候,PG找不到之前的OSD,从而引起大范围的数据迁移
CRUSH
把对象直接映射到OSD之上会导致二者之间的紧密耦合关系,在OSD设备变动时不可避免地对整个集群产生扰动。所以需要一种策略算法来处理这种问题。
Ceph将一个对象映射进RADOS集群的过程分为两步
- 首先是以一致性哈希算法将对象名称映射到PG
- 而后是将PG ID基于CRUSH算法映射到OSD
CRUSH(Controlled Replication Under Scalable Hashing),它是一种数据分布式算法,类似于一致性哈希算法,用于为RADOS存储集群控制数据分布。
基本逻辑图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LF4J0Dsu-1667980213629)(image/1636103641572-1664092679864.png)]
需求
OSD平台的目的就是数据的存在,我们这里就先来简单的演示一下,OSD环境的数据操作。这里主要临时演示两个功能:
数据存储 - 客户端连接至RADOS集群上某存储池,根据相关的CRUSH规则完成数据对象存储.
数据删除 - 集合配套的命令,实现数据的移除功能。
OSD实践
创建存储池
命令格式
ceph osd pool create [pgp-num] [replicated] \ [crush-rule-name] [expected-num-objects]
参数解析:
pool-name:存储池名称,在一个RADOS存储集群上必须具有唯一性;
pg-num:当前存储池中的PG数量,一定要合理
pgp-num :用于归置的PG数量,其值应该等于PG的数量
replicated:存储池类型;副本存储池需更多原始存储空间,但已实现Ceph支持的所有操 作
crush-ruleset-name:此存储池所用的CRUSH规则集的名称,引用的规则集必须事先存在
查看命令
ceph osd pool ls
rados lspools
创建一个存储池,名称为mypool,pg数量和pgp数量都是16
[cephadm@admin ceph-cluster]$ ceph osd pool create mypool 16 16
pool 'mypool' created
查看存储池的列表
[cephadm@admin ceph-cluster]$ ceph osd pool ls
mypool
[cephadm@admin ceph-cluster]$ rados lspools
mypool
数据的上传
命令格式:
虽然我们目前没有形成专用的数据接口,但是ceph提供了一个原理的文件测试接口 -- rados命令
rados put 文件对象名(id) /path/to/file --pool=存储池
提交文件到对应的osd里面
[cephadm@admin ceph-cluster]$ rados put ceph-file /home/cephadm/ceph-cluster/ceph.conf --pool=mypool
确认上传数据效果
[cephadm@admin ceph-cluster]$ rados ls --pool=mypool
ceph-file
查看数据的存储关系
命令格式:
通过属性的方式获取到存储池中数据对象的具体位置信息
ceph osd map 存储池 文件对象名(id)
查看ceph-file文件对象的内部属性关系
[cephadm@admin ceph-cluster]$ ceph osd map mypool ceph-file
osdmap e51 pool 'mypool' (1) object 'ceph-file' -> pg 1.7753490d (1.d) -> up ([2,1,5], p2) acting ([2,1,5], p2)
结果解析:
可以看到文件对象的内部属性关系
[ num ] 是副本所存储的osd id的值
数据删除实践
命令格式:
将文件对象从pool里面删除
rados rm 文件对象名(id) --pool=存储池
将刚才添加的文件对象从存储池里面移除
[cephadm@admin ceph-cluster]$ rados rm ceph-file --pool=mypool
查看存储池的内容
[cephadm@admin ceph-cluster]$ rados ls --pool=mypool
[cephadm@admin ceph-cluster]$
小结
学习目标
这一节,我们从 存储解析、存储删除、小结、三个方面来学习。
基本环境
数据存储逻辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YjfmO1pv-1667980213629)(image/1636103641572.png)]
pool 是ceph存储数据时的逻辑分区,它起到据不同的用户场景,基于namespace实现隔离故障域的作用。
每个pool包含一定数量的PG, PG里的对象被映射到不同的OSD上。
OSD分散到所有的主机磁盘上
存储池基本信息
命令格式
ceph osd pool ls [detail]
ceph osd pool stats {}
查看存储池名称
[cephadm@admin ceph-cluster]$ ceph osd pool ls
mypool
查看存储池详情
[cephadm@admin ceph-cluster]$ ceph osd pool ls detail
pool 1 'mypool' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 16 pgp_num 16 autoscale_mode warn last_change 51 flags hashpspool stripe_width 0
确认存储池状态
[cephadm@admin ceph-cluster]$ ceph osd pool stats mypool
pool mypool id 1
nothing is going on
结果显示:
对于mypool来说,它的id是1,该存储池里面的所有pg都是以1为开头的
存储池&PG
通过 pg 查找 pool
ceph pg dump | grep "^{poolid}\."
通过 pool 查找 pg
ceph pg ls-by-pool {poolname}
ceph pg ls {poolid}
根据pg查找pools
[cephadm@admin ceph-cluster]$ ceph pg dump | grep "^1. "
...
[cephadm@admin ceph-cluster]$ ceph pg dump pools
POOLID OBJECTS ...
1 0 ...
根据存储池找PG
[cephadm@admin ceph-cluster]$ ceph pg ls-by-pool mypool | awk '{print $1,$2,$15}'
PG OBJECTS ACTING
1.0 0 [3,5,0]p3
...
1.e 0 [2,1,5]p2
1.f 0 [3,1,4]p3
看出mypool的pg都是以1开头的,确定pg的分布情况
[cephadm@admin ceph-cluster]$ ceph pg dump pgs|grep ^1|awk '{print $1,$2,$15,$19}'
dumped pgs
1.f 0 0'0 [3,1,4]
...
1.9 0 0'0 [3,4,1]
结果显示:
每个pg都会分布在三个osd上,整个集群有6个osd
PG & OSD
通过 pg 查找 osd
ceph pg map {pgid}
通过 osd 查找 pg
ceph pg ls-by-osd osd.{osdid}
根据pg找osd的分布
[cephadm@admin ceph-cluster]$ ceph pg map 1.1
osdmap e51 pg 1.1 (1.1) -> up [5,0,2] acting [5,0,2]
根据osd找pg的分布
[cephadm@admin ceph-cluster]$ ceph pg ls-by-osd osd.1 | awk '{print $1,$2,$10,$14,$15}'
PG OBJECTS STATE UP ACTING
1.3 0 active+clean [1,2,5]p1 [1,2,5]p1
...
1.f 0 active+clean [3,1,4]p3 [3,1,4]p3
* NOTE: and soon afterwards
存储删除
存储池删除
命令格式:
删除存储池命令存在数据丢失的风险,Ceph于是默认禁止此类操作。
管理员需要在ceph.conf配置文件中启用支持删除动作
ceph osd pool rm 存储池名 存储池名 --yes-i-really-really-mean-it
注意:
存储池名称必须出现两遍,后面的 参数代表是强制
删除实践
默认情况下删除存储池
[cephadm@admin ceph-cluster]$ ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
主节点上修改ceph.conf文件,增加两行配置,让其运行删除pool
[cephadm@admin ceph-cluster]$ tail -n2 ceph.conf
[mon]
mon allow pool delete = true
同步ceph.conf文件到所有的ceph节点上
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf config push admin mon01 mon02 mon03
重启所有的mon节点上的ceph-mon服务
[cephadm@admin ceph-cluster]$ for i in mon0{1..3}; do ssh $i "sudo systemctl restart ceph-mon.target"; done
将刚才添加的文件对象从存储池里面移除
[cephadm@admin ceph-cluster]$ ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
pool 'mypool' removed
确认效果
[cephadm@admin ceph-cluster]$ ceph osd pool stats
there are no pools!
[cephadm@admin ceph-cluster]$ ceph osd pool ls
[cephadm@admin ceph-cluster]$
小结
学习目标
这一节,我们从 扩展mon、扩展mgr、小结、三个方面来学习。
扩展mon
操作mon节点基础
命令格式:
ceph-deploy mon add mon节点名称
注意:如果add换成destroy,则变成移除mon节点
查看ceph的mon状态
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 3m)
mgr: mon01(active, since 4h)
osd: 6 osds: 6 up (since 60m), 6 in (since 60m)
[cephadm@admin ceph-cluster]$ ceph mon stat
e1: 3 mons at {mon01=[v2:10.0.0.13:3300/0,v1:10.0.0.13:6789/0],mon02=[v2:10.0.0.14:3300/0,v1:10.0.0.14:6789/0],mon03=[v2:10.0.0.15:3300/0,v1:10.0.0.15:6789/0]}, election epoch 6, leader 0 mon01, quorum 0,1,2 mon01,mon02,mon03
移除实践
移除mon节点
[cephadm@admin ceph-cluster]$ ceph-deploy mon destroy mon03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
...
查看效果
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
...
services:
mon: 2 daemons, quorum mon01,mon02 (age 9s)
mgr: mon01(active, since 4h)
osd: 6 osds: 6 up (since 63m), 6 in (since 63m)
结果显示:
mon03已经被移除了
扩展实践
扩展mon实践
[cephadm@admin ceph-cluster]$ ceph-deploy mon add mon03
...
确认效果
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 2s)
mgr: mon01(active, since 4h)
osd: 6 osds: 6 up (since 65m), 6 in (since 65m)
结果显示:
mon03已经被添加到集群了
扩展mgr
简介
Ceph Manager在高可用的场景下,守护进程以“Active/Standby”模式运行,部署其它ceph-mgr守护程序可确保在Active节点或其上的ceph-mgr守护进程故障时,其中的一个Standby实例可以在不中断服务的情况下接管其任务。如果只有一个mgr服务器的话,守护进程的状态是Active。
确认效果
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 2s)
mgr: mon01(active, since 4h)
osd: 6 osds: 6 up (since 65m), 6 in (since 65m)
扩展实践
在当前的环境中,添加mgr节点
[cephadm@admin ceph-cluster]$ ceph-deploy mgr create mon02
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
...
查看效果
[cephadm@admin ceph-cluster]$ ceph -s
cluster:
...
services:
mon: 3 daemons, quorum mon01,mon02,mon03 (age 3m)
mgr: mon01(active, since 4h), standbys: mon02
osd: 6 osds: 6 up (since 69m), 6 in (since 69m)
结果显示:
mon01节点就是我们的主角色节点,mon02是我们的从角色节点。
小结