云计算 / 存储系统 / 操作系统

Ceph 存储集群部署

温馨提示:本文最后更新于2021-03-02 18:49:51,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 7月12日 · 2020年 本文11490个字,预计阅读29分钟 76975次已读

一、CEPH 简介

不管你是想为云平台提供Ceph 对象存储Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

Ceph 存储集群部署-浅时光博客
  • Ceph OSDsCeph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。
  • MonitorsCeph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。
  • MDSsCeph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。

CephFS部署,请阅读本篇文章:

二、环境描述

主机名IP地址角色
Ceph-admin192.168.66.200Admin,ceph-deploy
Ceph-node1192.168.66.201Mon,Mgr,osd
Ceph-node2192.168.66.202Mon,Osd
Ceph-node3192.168.66.203Mon,Osd
Ceph-Client192.168.66.204客户端
  • 注意:给三台Node节点单独挂载一块磁盘,大小必须大于5G;生产环境下磁盘建议1TB以上大小的容量,CPU推荐16C以上,内存24G以上,且官方建议ceph集群部署到物理机上;注意磁盘添加后不需要我们手动进行格式化分区等操作,后面通过ceph工具自动创建。
  • monMonitors, 节点映射管理, 身份验证管理, 需要达到冗余和高可用至少需要3个节点
  • osdobject storage daemon, 对象存储服务, 需要达到冗余和高可用至少需要3个节点
  • mgrManager, 用于跟踪运行指标和集群状态, 性能.
  • mdsMetadata Serve, 提供cephfs的元数据存储

三、环境准备

  • 第二步中我们将机器准备好,并且三台node节点上除了系统盘之外,单独挂载了一块20G大小的数据盘
  • 注意:环境准备阶段,除了node节点需要单独挂载磁盘之外,其余节点不需要;所有ceph集群节点都需要执行以下准备阶段的所有步骤,无特殊提示的话则所有节点均需要执行相应的命令。

1、安装常用命令

  • 所有集群节点安装我们会经常使用到的一些软件依赖包和命令程序
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

2、更改主机名

  • 所有节点按照第二步中的事先规划好的主机名进行更改,并实现集群主机名之间互相解析
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其他节点的主机名,看是否解析成功
[[email protected] ~]# 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

3、关闭防火墙

  • 关闭防火墙和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

4、安装时间服务

  • 在所有节点执行该操作
yum install ntp ntpdate ntp-doc
systemctl start ntpd
systemctl enable ntpd

5、创建Ceph用户

  • 官网文档中已经说明,运行ceph必须使用普通用户,并且需要保证该用户有无密码使用 sudo 的权限
  • 各Ceph节点均需创建该用户
useradd cephu
echo 123456 | passwd --stdin cephu

echo "cephu ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph

6、配置免密认证

  • 实现cephu用户ssh免密登入各ceph节点,在admin节点进行操作
[[email protected] ~]# su - cephu
[[email protected] ~]$ ssh-keygen -t rsa
[[email protected] ~]$ ssh-copy-id [email protected]
[[email protected] ~]$ ssh-copy-id [email protected]
[[email protected] ~]$ ssh-copy-id [email protected]
[[email protected] ~]$ ssh-copy-id [email protected]

7、添加配置文件

  • 在admin节点用登入root用户,并在~/.ssh目录下创建config文件,并将下面的配置信息添加进去
[[email protected] ~]# mkdir ~/.ssh
[[email protected] ~]# 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

8、添加下载源

  • 在admin节点配置ceph源,并将ceph源拷贝给所有node节点和客户端节点
[[email protected] ~]# 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


[[email protected] ~]# scp /etc/yum.repos.d/ceph.repo [email protected]:/etc/yum.repos.d/
[[email protected] ~]# scp /etc/yum.repos.d/ceph.repo [email protected]:/etc/yum.repos.d/
[[email protected] ~]# scp /etc/yum.repos.d/ceph.repo [email protected]:/etc/yum.repos.d/
[[email protected] ~]# scp /etc/yum.repos.d/ceph.repo [email protected]:/etc/yum.repos.d/


#所有节点执行创建缓存
yum clean all
yum makecache
  • 在admin节点安装ceph-deploy
[[email protected] ~]# yum -y install ceph-deploy

四、部署ceph集群

  • 注意:如果没有特殊说明,那么接下来的操作则在admin节点上进行操作

1、创建操作目录

[[email protected] ~]# su - cephu
[[email protected] ~]$ mkdir my-cluster 		#之后所有的ceph-deploy操作必须在该目录下执行

2、创建ceph集群

2.1:安装distribute包

[[email protected] ~]$ unzip distribute-0.7.3.zip
[[email protected] ~]$ cd distribute-0.7.3
[[email protected] distribute-0.7.3]$ sudo python setup.py install
Ceph 存储集群部署-浅时光博客

2.2:进行创建集群

  • 注意:new后面跟的是各个节点的主机名,且可以实现admin节点与各node节点主机名之间互相解析
[[email protected] ~]$ cd ~/my-cluster/
[[email protected] my-cluster]$ ceph-deploy new ceph-node1 ceph-node2 ceph-node3
Ceph 存储集群部署-浅时光博客
  • 没有报错表示创建成功
[[email protected] my-cluster]$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
  • 问题:创建集群时提示缺少pkg_resources模块的问题解决
[[email protected] my-cluster]$ sudo pip install --upgrade setuptools

2.3:安装luminous

  • 三台node节点下载epel源,注意我们已经在环境准备阶段配置了ceph源,所以这里只需要安装epel源就可以了
yum -y install epel*
  • 分别在三台node节点执行以下命令进行安装软件,注意切换为ceph普通用户
su - cephu
  • 通过以下命令查看当前的最新版本
]$ sudo yum --showduplicates list ceph | expand
  • 通过以下命令进行安装ceph
]$ sudo yum install ceph ceph-radosgw

2.4:测试安装情况

  • 分别在3台node节点执行下面的命令,来确认我们是否安装成功
]$ ceph --version
ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

3、初始化mon

  • 在admin节点用cephu这个普通用户执行
[[email protected] ~]$ cd ~/my-cluster/
[[email protected] my-cluster]$ ceph-deploy mon create-initial
#没有ERROR报错则安装成功
  • 注意:如果之前ceph.conf配置文件中已经存在了内容,则需要添加--overwrite-conf参数进行覆盖,命令如下:
[[email protected] my-cluster]$ ceph-deploy --overwrite-conf mon create-initial
  • 授予3个node节点使用命令免用户名权限
[[email protected] my-cluster]$ ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
#没有ERROR报错则安装成功

4、安装ceph-mgr

  • 安装在node1节点上,执行安装命令在admin节点上;为安装dashboard做准备
[[email protected] my-cluster]$ ceph-deploy mgr create ceph-node1
#没有ERROR报错则安装成功

5、添加OSD

  • 分别为3台node节点添加OSD,注意磁盘名称,我这里为sdb,可通过命令lsblk或者fdisk命令查看磁盘
  • 官网文档:http://docs.ceph.org.cn/rados/deployment/ceph-deploy-osd/
  • 注意:我这里只创建data盘,db和wal我这里没单独指定,如果需要单独指定则需要添加参数  --block-db /dev/sdc --block-wal /dev/sdd
#用 create 命令一次完成准备 OSD 、部署到 OSD 节点、并激活它
[[email protected] my-cluster]$ ceph-deploy osd create ceph-node1 --data /dev/sdb
[[email protected] my-cluster]$ ceph-deploy osd create ceph-node2 --data /dev/sdb
[[email protected] my-cluster]$ ceph-deploy osd create ceph-node3 --data /dev/sdb
Ceph 存储集群部署-浅时光博客
  • 通过lsblk -f命令可查看到磁盘分区情况
[[email protected] my-cluster]$ ssh ceph-node1 lsblk -f
Ceph 存储集群部署-浅时光博客
  • 通过以下命令查看集群状态
[[email protected] my-cluster]$ ssh ceph-node1 sudo ceph -s
Ceph 存储集群部署-浅时光博客

6、部署Dashboard

  • 在node1节点上部署dashboard

6.1:创建管理域秘钥

[[email protected] ~]# su - cephu
[[email protected] ~]$ sudo ceph auth get-or-create mgr.ceph-node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'

[mgr.ceph-node1]
	key = AQDmiQhfDrBDEhAAnfwRTMv5clhbSEuetlrwyw==

6.2:开启mgr管理域

[[email protected] ~]$ sudo ceph-mgr -i ceph-node1

6.3:检查mgr状态

  • 确保mgr的状态为active
[[email protected] ~]$ sudo ceph status
Ceph 存储集群部署-浅时光博客

6.4:打开dashboard模块

[[email protected] ~]$ sudo ceph mgr module enable dashboard

6.5:绑定模板mgr节点

[[email protected] ~]$ sudo ceph config-key set 'mgr/dashboard/ceph-node1/server_addr' '192.168.66.201'
set mgr/dashboard/ceph-node1/server_addr

[[email protected] ~]$ ss -tnlp|grep 7000
LISTEN     0      5      192.168.66.201:7000                     *:*  

6.6:浏览器访问

Ceph 存储集群部署-浅时光博客
Ceph 存储集群部署-浅时光博客
Ceph 存储集群部署-浅时光博客

五、配置客户端

  • 创建客户端使用rdb(块存储);创建块设备之前需要创建存储池;执行创建存储的命令需要在mon节点上执行,也就是node1节点

1、创建存储池

[[email protected] ~]# su – cephu
[[email protected] ~]$ sudo ceph osd pool create  rbd 128 128
pool 'rbd' created
  • 参数说明:
    • 128表示如果创建的pool少于5个OSD,那么就是128个pg,5-10为512;10-50为4096

2、初始化存储池

[[email protected] ~]$ sudo rbd pool init rbd

3、准备客户端

  • 这里的客户端就是我们规划的那台,确保客户端是可以跟admin节点实现主机名互通的

3.1:升级内核

官方推荐的客户端服务器内核版本:

  • 4.1.4 or later
  • 3.16.3 or later (rbd deadlock regression in 3.16.[0-2])
  • NOT v3.15.* (rbd deadlock regression)
  • 3.14.*
  • 升级内核版本到4.x以上,接下来在客户端机器上进行操作
[[email protected] ~]# uname -r
3.10.0-957.el7.x86_64
  • 导入key
[[email protected] ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

3.2:安装elrepo源

[[email protected] ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
  • 查看可用的系统内核包
[[email protected] ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

3.3:安装最新内核

[[email protected] ~]# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
  • 安装
[[email protected] ~]# rpm -ivh kernel-ml-*

3.4:修改内核启动顺序

  • 查看内核默认启动顺序
[[email protected] ~]# 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)
  • 修改启动顺序
[[email protected] ~]# grub2-set-default 0
  • 重启服务器
[[email protected] ~]# reboot
  • 再次检测系统内核版本
[[email protected] ~]# 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
  • 删除旧的内核
[[email protected] ~]# yum remove kernel -y
删除:
  kernel.x86_64 0:3.10.0-957.el7                                                          
完毕!

4、客户端安装ceph

4.1:环境检查

[[email protected] ~]# su - cephu
[[email protected] ~]$ wget https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
[[email protected] ~]$ unzip distribute-0.7.3.zip
[[email protected] ~]$ cd distribute-0.7.3
[[email protected] distribute-0.7.3]$ sudo python setup.py install
[[email protected] distribute-0.7.3]$ sudo yum -y install python-setuptools
[[email protected] distribute-0.7.3]$ sudo yum -y install epel*

4.2:安装ceph

  • 确保已经在环境准备阶段时客户端也配置了ceph源
[[email protected] ~]# su - cephu 
[[email protected] ~]$ sudo yum install ceph ceph-radosgw
[[email protected] ~]$ ceph --version
ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

4.3:拷贝秘钥

  • 在admin【管理节点】节点上,用 ceph-deploy 把 Ceph 配置文件和 ceph.client.admin.keyring 拷贝到 ceph-client 。
[[email protected] ~]$ cd my-cluster/
[[email protected] my-cluster]$ ceph-deploy admin ceph-client
#ceph-deploy 工具会把密钥环复制到 /etc/ceph 目录,要确保此密钥环文件有读权限(如 sudo chmod +r /etc/ceph/ceph.client.admin.keyring )
  • 修改client节点该文件的权限
[[email protected] ~]$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring

4.4:修改配置

  • 修改client节点下的ceph配置文件,为了解决映射镜像时出错问题。
[[email protected] ~]$ sudo vim /etc/ceph/ceph.conf
#最后添加
rbd_default_features = 1

4.5:配置块设备

  • 在 ceph-client 节点上创建一个块设备 image,默认单位为M
  • 语法:rbd create foo –size 4096 [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
[[email protected] ~]$ rbd create foo --size 4096
  • 在 ceph-client 节点上,把 image 映射为块设备。
  • 语法:sudo rbd map foo –name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
[[email protected] ~]$ sudo rbd map foo --name client.admin
/dev/rbd0
  • 在 ceph-client 节点上,创建文件系统后就可以使用块设备了。
[[email protected] ~]$ sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo
  • 注意:此命令可能耗时较长。
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: 完成                            
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=16 blocks, Stripe width=16 blocks
262144 inodes, 1048576 blocks
0 blocks (0.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
  • 在 ceph-client 节点上挂载此文件系统。
[[email protected] ~]$ sudo mkdir /mnt/ceph-block-device    #创建挂载点
[[email protected] ~]$ sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device  #挂载
Ceph 存储集群部署-浅时光博客
[[email protected] ~]$ cd /mnt/ceph-block-device
[[email protected] ceph-block-device]$ sudo touch dqzboy.txt
[[email protected] ceph-block-device]$ ls
dqzboy.txt  lost+found



本文作者:浅时光
原文链接:https://www.dqzboy.com/3120.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

3 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. 嘎哈未知2020-8-1 · 23:17

    很棒

  2. 夜中人未知2020-7-20 · 21:40

    写的真好,很详细

  3. 五彩缤纷未知2020-7-17 · 12:52

    学习了,很棒

本站已稳定运行: | 耗时 0.421 秒 | 查询 15 次 | 内存 38.30 MB