Ceph 的部署文档看着长,顺序就三段:把五台机器的环境抹平,在 admin 节点上用 ceph-deploy 拉起 mon、mgr、OSD,最后在客户端把 RBD 镜像映射成块设备。这套是 Luminous 12.2.13 的记录。
一、角色和最小拓扑
不管做对象存储、块设备还是文件系统,部署都始于节点、网络、集群这三层。最小集群是 1 个 Monitor 加 2 个 OSD;要用 Ceph 文件系统客户端就必须再跑 MDS。

- OSD:存数据,处理复制、恢复、回填、再均衡,靠心跳向 Monitor 上报状态。
- Monitor:维护集群状态图(监视器图、OSD 图、PG 图、CRUSH 图),保存状态变更历史(epoch)。
- MDS:给 Ceph 文件系统存元数据。 Mgr:跟踪运行指标和集群状态,Dashboard 依赖它。
对象先由 CRUSH 算出落在哪个 PG、再算出在哪个 OSD,集群因此能动态伸缩和自愈。这次的规划:ceph-admin(192.168.66.200)跑 ceph-deploy,node1(.201)是 Mon + Mgr + OSD,node2/3(.202/.203)是 Mon + OSD,client(.204)做客户端。
三台 node 各单独挂一块盘,必须大于 5G(这里 20G);生产建议 1TB 以上、16C/24G 起,且跑在物理机上。盘挂上后不要手动分区格式化,交给 ceph-deploy。
二、节点准备:八件事
除特别说明外,以下步骤所有节点都要执行。
① 依赖包:
yum -y install vim lrzsz wget curl rsync git gcc make lsof pcre pcre-devel zlib zlib-devel openssl openssl-devel dos2unix sysstat iotop net-tools httpd-tools
② 改主机名、写 hosts,互相 ping 主机名确认解析:
hostnamectl set-hostname ceph-admin
hostnamectl set-hostname ceph-node1
hostnamectl set-hostname ceph-node2
hostnamectl set-hostname ceph-node3
hostnamectl set-hostname ceph-client
#所有节点都需要添加到hosts文件中,实现主机名解析
~]# vim /etc/hosts
192.168.66.200 ceph-admin
192.168.66.201 ceph-node1
192.168.66.202 ceph-node2
192.168.66.203 ceph-node3
192.168.66.204 ceph-client
#配置好后,我们在任意一个节点去ping其他节点的主机名,看是否解析成功
[root@ceph-client ~]# ping ceph-admin
PING ceph-admin (192.168.66.200) 56(84) bytes of data.
64 bytes from ceph-admin (192.168.66.200): icmp_seq=1 ttl=64 time=0.211 ms
64 bytes from ceph-admin (192.168.66.200): icmp_seq=2 ttl=64 time=0.854 ms
64 bytes from ceph-admin (192.168.66.200): icmp_seq=3 ttl=64 time=0.806 ms
64 bytes from ceph-admin (192.168.66.200): icmp_seq=4 ttl=64 time=0.985 ms
③ 关防火墙与 SELinux:
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce
④ 时间服务:
yum install ntp ntpdate ntp-doc
systemctl start ntpd
systemctl enable ntpd
⑤ 建运行 Ceph 的普通用户(官网要求不用 root 跑),给免密 sudo:
useradd cephu
echo 123456 | passwd --stdin cephu
echo "cephu ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph
⑥ 在 admin 上给该用户配到各节点的 ssh 免密:
[root@ceph-admin ~]# su - cephu
[cephu@ceph-admin ~]$ ssh-keygen -t rsa
[cephu@ceph-admin ~]$ ssh-copy-id cephu@ceph-node1
[cephu@ceph-admin ~]$ ssh-copy-id cephu@ceph-node2
[cephu@ceph-admin ~]$ ssh-copy-id cephu@ceph-node3
[cephu@ceph-admin ~]$ ssh-copy-id cephu@ceph-client
⑦ root 下写 ~/.ssh/config 绑好主机名和用户:
[root@ceph-admin ~]# mkdir ~/.ssh
[root@ceph-admin ~]# vim ~/.ssh/config
Host ceph-node1
Hostname ceph-node1
User cephu
Host ceph-node2
Hostname ceph-node2
User cephu
Host ceph-node3
Hostname ceph-node3
User cephu
⑧ 配 Ceph 的 yum 源(阿里云 luminous 分支)拷到各节点,逐节点 yum makecache;admin 上装 ceph-deploy:
[root@ceph-admin ~]# vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[root@ceph-admin ~]# scp /etc/yum.repos.d/ceph.repo root@192.168.66.201:/etc/yum.repos.d/
[root@ceph-admin ~]# scp /etc/yum.repos.d/ceph.repo root@192.168.66.202:/etc/yum.repos.d/
[root@ceph-admin ~]# scp /etc/yum.repos.d/ceph.repo root@192.168.66.203:/etc/yum.repos.d/
[root@ceph-admin ~]# scp /etc/yum.repos.d/ceph.repo root@192.168.66.204:/etc/yum.repos.d/
#所有节点执行创建缓存
yum clean all
yum makecache
[root@ceph-admin ~]# yum -y install ceph-deploy
三、建集群:new、mon、mgr、OSD 与 Dashboard
切到 cephu 用户建工作目录,之后所有 ceph-deploy 都必须在这个目录里执行:
[root@ceph-admin ~]# su - cephu
[cephu@ceph-admin ~]$ mkdir my-cluster #之后所有的ceph-deploy操作必须在该目录下执行
先装 Python 的 distribute 包,不装后面 ceph-deploy new 必定报错:
[cephu@ceph-admin ~]$ unzip distribute-0.7.3.zip
[cephu@ceph-admin ~]$ cd distribute-0.7.3
[cephu@ceph-admin distribute-0.7.3]$ sudo python setup.py install

new 后跟各节点主机名,要能互相解析:
[cephu@ceph-admin ~]$ cd ~/my-cluster/
[cephu@ceph-admin my-cluster]$ ceph-deploy new ceph-node1 ceph-node2 ceph-node3

不报错就生成 ceph.conf 和 ceph.mon.keyring:
[cephu@ceph-admin my-cluster]$ ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
提示缺 pkg_resources 就升级 setuptools:
[cephu@ceph-admin my-cluster]$ sudo pip install --upgrade setuptools
node 装 epel 源,切普通用户后安装:
yum -y install epel*
]$ sudo yum --showduplicates list ceph | expand
]$ sudo yum install ceph ceph-radosgw
三台 node 验版本:
]$ ceph --version
ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
回 admin 初始化 mon,ceph.conf 已有内容时加 --overwrite-conf:
[cephu@ceph-admin ~]$ cd ~/my-cluster/
[cephu@ceph-admin my-cluster]$ ceph-deploy mon create-initial
#没有ERROR报错则安装成功
[cephu@ceph-admin my-cluster]$ ceph-deploy --overwrite-conf mon create-initial
把 keyring 下发到各节点:
[cephu@ceph-admin my-cluster]$ ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
#没有ERROR报错则安装成功
mgr 装在 node1,为 Dashboard 做准备:
[cephu@ceph-admin my-cluster]$ ceph-deploy mgr create ceph-node1
#没有ERROR报错则安装成功
加 OSD 用 create,一条命令完成准备、部署、激活。--data 后是裸盘名,先 lsblk 确认;db、wal 分开就再加 --block-db /dev/sdc --block-wal /dev/sdd:
#用 create 命令一次完成准备 OSD 、部署到 OSD 节点、并激活它
[cephu@ceph-admin my-cluster]$ ceph-deploy osd create ceph-node1 --data /dev/sdb
[cephu@ceph-admin my-cluster]$ ceph-deploy osd create ceph-node2 --data /dev/sdb
[cephu@ceph-admin my-cluster]$ ceph-deploy osd create ceph-node3 --data /dev/sdb

[cephu@ceph-admin my-cluster]$ ssh ceph-node1 lsblk -f

集群状态:
[cephu@ceph-admin my-cluster]$ ssh ceph-node1 sudo ceph -s

Dashboard 开在 node1:建 mgr 认证密钥、启动 mgr、确认状态 active:
[root@ceph-node1 ~]# su - cephu
[cephu@ceph-node1 ~]$ sudo ceph auth get-or-create mgr.ceph-node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
[mgr.ceph-node1]
key = AQDmiQhfDrBDEhAAnfwRTMv5clhbSEuetlrwyw==
[cephu@ceph-node1 ~]$ sudo ceph-mgr -i ceph-node1
[cephu@ceph-node1 ~]$ sudo ceph status

启用模块、绑定地址,7000 起来后访问 http://mgr地址:7000:
[cephu@ceph-node1 ~]$ sudo ceph mgr module enable dashboard
[cephu@ceph-node1 ~]$ sudo ceph config-key set 'mgr/dashboard/ceph-node1/server_addr' '192.168.66.201'
set mgr/dashboard/ceph-node1/server_addr
[cephu@ceph-node1 ~]$ ss -tnlp|grep 7000
LISTEN 0 5 192.168.66.201:7000 *:*



四、客户端映射 RBD 块设备
块设备要先有存储池,建池在 mon 节点(node1)执行。两个 128 是 PG 数:OSD 少于 5 个取 128,5~10 取 512,10~50 取 4096。
[root@ceph-node1 ~]# su – cephu
[cephu@ceph-node1 ~]$ sudo ceph osd pool create rbd 128 128
pool 'rbd' created
[cephu@ceph-node1 ~]$ sudo rbd pool init rbd
客户端先处理内核。官方推荐 4.1.4 以上或 3.16.3 以上,避开 3.15.*(rbd 死锁回归),这台是 3.10:
[root@ceph-client ~]# uname -r
3.10.0-957.el7.x86_64
导 elrepo 的 key、装源,再装 ml(mainline)内核,lt 为长期支持版:
[root@ceph-client ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@ceph-client ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@ceph-client ~]# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
改默认启动项、重启、确认版本,旧内核可删:
[root@ceph-client ~]# awk -F' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (5.7.8-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-7ba72ac2cf764cf39417d13528419374) 7 (Core)
[root@ceph-client ~]# grub2-set-default 0
[root@ceph-client ~]# reboot
[root@ceph-client ~]# uname -a
Linux ceph-client 5.7.8-1.el7.elrepo.x86_64 #1 SMP Tue Jul 7 18:43:16 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux
客户端同样先解决 distribute 和 setuptools 再装 ceph:
[root@ceph-client ~]# su - cephu
[cephu@ceph-client ~]$ wget https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
[cephu@ceph-client ~]$ unzip distribute-0.7.3.zip
[cephu@ceph-client ~]$ cd distribute-0.7.3
[cephu@ceph-client distribute-0.7.3]$ sudo python setup.py install
[cephu@ceph-client distribute-0.7.3]$ sudo yum -y install python-setuptools
[cephu@ceph-client distribute-0.7.3]$ sudo yum -y install epel*
[root@ceph-client ~]# su - cephu
[cephu@ceph-client ~]$ sudo yum install ceph ceph-radosgw
[cephu@ceph-client ~]$ ceph --version
ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
在 admin 上用 ceph-deploy 把配置和 keyring 拷到客户端,密钥环要有读权限:
[cephu@ceph-admin ~]$ cd my-cluster/
[cephu@ceph-admin my-cluster]$ ceph-deploy admin ceph-client
#ceph-deploy 工具会把密钥环复制到 /etc/ceph 目录,要确保此密钥环文件有读权限(如 sudo chmod +r /etc/ceph/ceph.client.admin.keyring )
[cephu@ceph-client ~]$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
客户端 ceph.conf 末尾加 rbd_default_features = 1,否则映射镜像会出错:
[cephu@ceph-client ~]$ sudo vim /etc/ceph/ceph.conf
#最后添加
rbd_default_features = 1
创建 image(默认单位 M)、映射为块设备、建文件系统、挂载:
[cephu@ceph-client ~]$ rbd create foo --size 4096
[cephu@ceph-client ~]$ sudo rbd map foo --name client.admin
/dev/rbd0
[cephu@ceph-client ~]$ sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo
mkfs.ext4 -m0 可能耗时较长,挂上后写文件验证:

[cephu@ceph-client ~]$ sudo mkdir /mnt/ceph-block-device #创建挂载点
[cephu@ceph-client ~]$ sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载
[cephu@ceph-client ~]$ cd /mnt/ceph-block-device
[cephu@ceph-client ceph-block-device]$ sudo touch rbd-test.txt
[cephu@ceph-client ceph-block-device]$ ls
rbd-test.txt lost+found
五、踩坑记录
- ceph-deploy 必须在 my-cluster 目录里执行,且只在 admin 节点上跑。
- 没装 distribute 就
ceph-deploy new,报错含糊,看着像网络问题。 - 建 OSD 前确认裸盘是空的、没有分区表,设备名写错等于直接清盘。
- 客户端内核太老时映射会挂住,先
uname -r再排其他问题。
















暂无评论内容