Ceph 集群部署记录:ceph-deploy 建 MON/OSD 与客户端映射 RBD

Ceph 的部署文档看着长,顺序就三段:把五台机器的环境抹平,在 admin 节点上用 ceph-deploy 拉起 mon、mgr、OSD,最后在客户端把 RBD 镜像映射成块设备。这套是 Luminous 12.2.13 的记录。

一、角色和最小拓扑

不管做对象存储、块设备还是文件系统,部署都始于节点、网络、集群这三层。最小集群是 1 个 Monitor 加 2 个 OSD;要用 Ceph 文件系统客户端就必须再跑 MDS。

ceph1
  • 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
ceph3

new 后跟各节点主机名,要能互相解析:

[cephu@ceph-admin ~]$ cd ~/my-cluster/
[cephu@ceph-admin my-cluster]$ ceph-deploy new ceph-node1 ceph-node2 ceph-node3
ceph-mon1

不报错就生成 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
ceph-osd
[cephu@ceph-admin my-cluster]$ ssh ceph-node1 lsblk -f
ceph-osd1

集群状态:

[cephu@ceph-admin my-cluster]$ ssh ceph-node1 sudo ceph -s
ceph-osd3

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
ceph-mgr1

启用模块、绑定地址,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                     *:*  
ceph-mgr2
ceph-mgr3
ceph-mgr4

四、客户端映射 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 可能耗时较长,挂上后写文件验证:

ceph12
[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 再排其他问题。
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容