Ceph 的部署
Ceph 的部署工具
- ceph-deploy:官方的部署工具
- ceph-ansible:红帽的部署工具
- ceph-chef:利用 chef 进行自动部署 Ceph 的工具
- puppet-ceph:puppet 的 ceph 模块
Public Network 192.168.200.161-164
Cluster Network 192.168.100.161-164
- 版本:Mimic 13 版
部署前提
这是一个前提条件
关闭 SELinux
关闭 firewalld,并禁止开机自启
禁止开机自启
网卡 准备两块,一块公网用于对外提供服务,一块私网用于 Ceph 内部通信以及协调
四台虚拟机个准备 2 块 200G 的硬盘
共四个节点
在管理节点上,做各节点的免密登陆,在本文档中,使用的是 ceph-mon1 节点作为管理节点
ssh-keygen -t rsa -P ''
ssh-copy-id ceph-mon1
ssh-copy-id ceph-mon2
ssh-copy-id ceph-mon3
ssh-copy-id ceph-osd4
Ceph-Deploy
ceph-deploy 应该部署在专用的节点,也就是管理节点 AdminHost 上。
ceph-deploy 无法处理客户端工具,如果你需要使用 Ceph 集群,需要自己安装和配置客户端,这个客户端可能是一个内核模块(librbd),也可能只是一个命令行工具。
集群拓扑和网络
Ceph 集群内有两类流量:
- Cluster Network:私网,集群内部各节点间的通信流量
- Public Network:公网,Ceph 对外提供服务的网络
Cluster Network : 192.168.100.0/24
Public Network : 192.168.200.0/24
161-164
划重点,IP 是这个
生产环境实现高可用性所推荐的节点数量:
Ceph-Mon:3 个+
Ceph-Mgr:2 个+
Ceph-Mds:2 个+
开始
yum 源和初始化准备
安装过程中尽量使用阿里云的源,请事先在所有节点上配置好阿里云的 ceph 源
#vi /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
各节点 cephadm 用户添加 sudo 权限
useradd cephadm
echo '111111' | passwd --stdin cephadm
echo "cephadm ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadm
chmod 0440 /etc/sudoers.d/cephadm
在管理节点上以 cephadm 用户的身份来做各节点 ssh 免密登录
su - cephadm
ssh-keygen -t rsa -P ''
ssh-copy-id cephadm@ceph-mon1
ssh-copy-id cephadm@ceph-mon2
ssh-copy-id cephadm@ceph-mon3
ssh-copy-id cephadm@ceph-osd4
管理节点安装 ceph-deploy
yum install ceph-deploy python-setuptools python2-subprocess32 ceph-common
管理节点以 cephadm 用户身份在家目录建立 ceph-cluster 目录
su - cephadm
mkdir ceph-cluster
切换至 ceph-cluster 目录
cd ceph-cluster
Mon
在管理节点以 cephadm 用户运行
ceph-deploy new ceph-mon1 --cluster-network 192.168.100.0/24 --public-network 192.168.200.0/24
#mon 节点,可以写第一个,也可以写多个
然后在所有节点——mon、mgr、osd 都要安装,一定要把源的地址改成阿里云的,不然卡半天,翻墙都没用。
sudo yum install ceph ceph-radosgw -y
在管理节点以 cephadm 用户运行
- no-adjust-repos 很关键,不加的话 会跑到官网下载,很慢——即使科学上网
cd ceph-cluster
ceph-deploy install --no-adjust-repos ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
在管理节点以 cephadm 用户运行
ceph-deploy mon create-initial
#这一步其实是在生成 keyring 文件
在管理节点以 cephadm 用户运行
ceph-deploy admin ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
#将配置和 client.admin 秘钥环推送到远程主机。
#每次更改 ceph 的配置文件,都可以用这个命令推送到所有节点上
在所有节点以 root 的身份运行
setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring
#ceph.client.admin.keyring 文件是 ceph 命令行 所需要使用的 keyring 文件
#不管哪个节点,只要需要使用 cephadm 用户执行命令行工具,这个文件就必须要让 cephadm 用户拥有访问权限,就必须执行这一步
#这一步如果不做,ceph 命令是无法在非 sudo 环境执行的。
Mgr
L 版本之后 Ceph,必须要有一个 mgr 节点,所以我们在管理节点执行:
mgr 守护进程,在有 osd 情况下,ceph -s 会无法使用
su - cephadm
cd ceph-cluster
ceph-deploy mgr create ceph-mon1
执行完成之后,在管理节点查看集群的健康状态,不过,这一步同样需要/etc/ceph/ceph.client.admin.keyring 文件
su - cephadm
sudo cp ceph-cluster/{ceph.client.admin.keyring,ceph.conf} /etc/ceph/
ceph -s
OSD
列出 osd 节点上的所有可用磁盘
ceph-deploy disk list ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
#要以 cephadm 用户在~/ceph-cluster/目录下执行
清空 osd 节点上用来作为 osd 设备的磁盘
ceph-deploy disk zap ceph-mon1 /dev/sdb /dev/sdc
ceph-deploy disk zap ceph-mon2 /dev/sdb /dev/sdc
ceph-deploy disk zap ceph-mon3 /dev/sdb /dev/sdc
ceph-deploy disk zap ceph-osd4 /dev/sdb /dev/sdc
#注意,这里其实是在执行 dd 命令,执行错了就麻烦打了,全盘清空。
创建 OSD
性能调优,日志 分层——频繁读写 ssd;日志 机械盘 搜索关键词:“ceph 分层存储”
ceph-deploy osd create ceph-mon1 --data /dev/sdb
ceph-deploy osd create ceph-mon2 --data /dev/sdb
ceph-deploy osd create ceph-mon3 --data /dev/sdb
ceph-deploy osd create ceph-osd4 --data /dev/sdb
ceph-deploy osd create ceph-mon1 --data /dev/sdc
ceph-deploy osd create ceph-mon2 --data /dev/sdc
ceph-deploy osd create ceph-mon3 --data /dev/sdc
ceph-deploy osd create ceph-osd4 --data /dev/sdc
查看集群状态
ceph -s
#到这一步其实已经基本能用了
#我们来试一下
创建一个存储池,要想使用 ceph 的存储功能,必须先创建存储池
ceph osd pool create mypool 64 64
列出当前集群所有存储池
ceph osd pool ls
rados lspools
上传一个文件
rados put issue /etc/issue --pool=mypool
获取一个文件
rados get issue my_issue -p mypool
#issue 是对象的 ID
#my_issue 是 outfile,即输出文件叫啥名字
#-p 指定存储池
删除一个文件
rados rm issue -p mypool
列出指定存储池有哪些文件
rados ls --pool=mypool
查看指定文件在 Ceph 集群内是怎样做映射的
ceph osd map mypool issue
#mypool 是存储池的名称
#issue 是文件的名称
ceph map 信息简要说明
osdmap e39 pool 'mypool' (1) object 'issue' -> pg 1.651f88da (1.1a) -> up ([3,6,5], p3) acting ([3,6,5], p3)
#pg 1.651f88da (1.1a), 表示第 1 号存储池的 1a 号 pg
#up Ceph 的存储池是三副本存储的,后面的三个数字是存储了此文件的三个 osd 的编号,p3 表示 3 号 osd 是主 osd
#acting 同理
到此为止,安装已经完成,接下来我们来扩展 Ceph 集群
扩展 Ceph 集群
添加 mon 节点(类似分布式 master 最好奇数个):
#为了尽量完善一点,我们来演示一下。
su - cephadm;cd ceph-cluster
ceph-deploy mon add ceph-mon2
ceph-deploy mon add ceph-mon3
查看 mon 的 quorum 状态
ceph quorum_status --format json-pretty
添加 mgr 节点,mgr 是无状态的
ceph-deploy mgr create ceph-mon2
查看集群状态
ceph -s
删除一个存储池
ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
#要求存储池的名字要写两遍
#后面必须加--yes-i-really-really-mean-it
#即便你写那么烦,
ceph 命令高级玩法
ceph-deploy install --no-adjust-repos
#装包的时候不更改 yum 源
#如果不指明这个选项,即便你提前配置了阿里云的 yum 源,它也会改成 ceph 官方的那个 yum 源
ceph-deploy osd create {node} --data /path/to/data --block-db /path/to/db-device --block-wal /path/to/wal-device
#创建 OSD 时,将 OSD 的三类数据都分开存放——Object Data Blobs、SST 文件、wal 文件
#--data 选项指定的是 Object Data 存放的硬盘
#--block-db 选项指定的是 SST 文件
#--block-wal 选项指定的是 wal 文件
ceph-deploy config push ceph-mon1
#把 ceph.conf 配置文件推送到节点上,如果你不特意指明,推送的其实是/home/cephadm/ceph-cluster 目录下的 ceph.conf 文件
ceph osd pool stats {<poolname>}
#查看一个存储池的状态
osd 的四个状态:
up:启动状态
down:停止状态
in:在 RADOS 集群里面
out:在 RADOS 集群外边
至此,部署已经完成。 后面我会出一个如何启用 RBD、CephFS、RGW 存储接口的视频。
- mon:提供 Ceph 集群存储拓扑、数据分布的 Cluster Map 以及认证,
- mgr:提供集群数据的收集、检测等功能。
- mds:CephFS 文件系统接口的一个守护进程,
- rgw:RGW 对象存储接口的一个守护进程
- osd:Object Stroage Device,用于管理 Ceph 存储数据所用的硬盘设备的一个守护进程。
Ceph 的客户端是直接与 OSD 进行通信的
Ceph 的客户端,通过与 Mon 节点进行通信,获取完整的 Cluster Map,然后在客户端本地,用 CRUSH 算法,根据 Cluster Map,以及对应存储池的放置组规则,进行计算,获得所需数据存储于哪些 OSD 上面,然后直接与 OSD 建立通信进行读写。
命令补充
ceph osd tree
- 原文作者:战神西红柿
- 原文链接:https://tomatoares.github.io/posts/storage/Ceph%E9%83%A8%E7%BD%B2/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。