ceph是一个分布式存储系统,可以在统一的系统中提供唯一的对象、块和文件存储
ceph详细部署搭建
一、ceph基本组件
-
Ceph监视器(ceph-mon):
ceph mon用来维护集群状态的映射,包括监视器映射,管理器映射,OSD映射,MDS映射和CRUSH映射,这些映射是ceph守护程序相互协调所需的关键状态,另外还负责客户端到ceph存储的身份验证;通常要实现高可用,需要3个或以上的ceph-mon服务。 -
Ceph管理器(ceph-mgr):
ceph manager守护进程负责跟踪运行时指标和ceph集群当前的状态,包括存储利用率,当前性能指标和系统负载等,ceph-mgr还托管一些python模块,以实现基于web的ceph仪表盘和rest api,通常要实现高可用至少需要2个ceph-mgr进程,通常ceph-mon和ceph-mgr个数相同,1个ceph-mon同节点会伴随1个ceph-mgr守护进程。 -
Ceph对象存储(ceph-osd):
Ceph OSD是对象存储守护程序,是用来存储数据的核心组件,实现数据存储、数据复制和恢复、数据的重新平衡,并会检查其他Ceph OSD守护程序的心跳来向ceph-mon和ceph-mgr提供一些监控信息,通常至少需要3个ceph-osd才能实现冗余和高可用性,部署的时候ceph-osd会和ceph-mon分开节点部署。 -
Ceph元数据服务(ceph-mds):
Ceph MDS为ceph文件系统存储元数据,注意Ceph块设备和对象存储不用mds存储元数据,Ceph MDS允许POSIX文件系统用户执行基本命令,而不会将压力都集中到Ceph OSD集群上,通常mds可以选择部署至少2个节点,可以和其他组件一起也可以分开。
二、环境准备
hostname | IP |
---|---|
node1 | 10.130.0.101 |
node2 | 10.130.0.102 |
node3 | 10.130.0.103 |
2.1 hostname主机名配置
node1:hostnamectl set-hostname node1
node2:hostnamectl set-hostname node2
node3:hostnamectl set-hostname node3
配置/etc/hosts文件,三个机器中都需执行
echo "10.130.0.101 node1" >> /etc /hosts
echo "10.130.0.102 node2" >> /etc /hosts
echo "10.130.0.103 node3" >> /etc /hosts
然后分别重启node1机器、node2机器、node3机器
2.2 免密登录
node1为例:
ssh-keygen
选取默认路径存储:/root/.ssh/id_rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.130.0.102
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.130.0.103
node2和node3机器中也需要分别执行
2.3 禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
2.4 关闭selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2.5 NTP时间同步
yum install -y chrony && yum -y autoremove
sed -i '/^pool/d' /etc/chrony.conf
sed -i '/^server/d' /etc/chrony.conf
echo "pool ntp.aliyun.com iburst" >> /etc/chrony.conf
systemctl start chronyd.service && systemctl enable chronyd.service
三、 所有节点安装ceph软件包
3.1 安装yum-plugin-priorities依赖
[root@node1 ~]# yum install yum-plugin-priorities
[root@node1 ~]# cat /etc/yum/pluginconf.d/priorities.conf
[main]
enabled = 1
3.2 安装ceph密钥
sudo rpm --import 'https://download.ceph.com/keys/release.asc'
3.3 安装ceph仓库
安装源仓库包和部分必须软件包
yum install loongnix-release-epel loongnix-release-ceph-nautilus -y
yum install snappy leveldb gdisk gperftools-libs
配置Loongnix-Ceph-Nautilus.repo
[root@node1 ~]# cat /etc/yum.repos.d/Loongnix-Ceph-Nautilus.repo
[loongnix-ceph-nautilus]
name=Loongnix server $releasever - Ceph Nautilus
baseurl=http://pkg.loongnix.cn:8080/loongnix-server/$releasever/storage/$basearch/release/ceph-nautilus/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LOONGNIX
3.4 安装ceph
yum install ceph -y
安装过程中会自动安装python3.6以及相关的依赖等,安装完成之后最好再确认一下下面两个python模块是否存在,不存在就需要安装一下
pip3 install pecan
pip3 install werkzeug
这样ceph基本软件包安装完成,注意所有节点都要安装一遍
四、 ceph-mon服务部署(node1节点)
4.1 ceph.conf文件配置
fsid表示集群的唯一ID,就是一个uuid格式的字符串,使用命令uuidgen生成
创建配置文件:/etc/ceph/ceph.conf
[root@node1 ~]# cat /etc/ceph/ceph.conf
[global]
fsid = f13412f4-e4a2-4404-9a68-1bd888e1b2c5 #集群唯一的uuid
mon initial members = node1 #配置监视器的主机名列表,若为多个可用逗号分割
mon host = 10.130.0.101:6789 #配置监视器节点的ip:port,默认ceph-mon服务的端口号是6789
public network = 10.130.0.0/24 #开放客户端访问的网络段,根据实际情况配置
auth cluster required = cephx #启动方式认证,启动方式为cephx
auth service required = cephx #启动方式认证,启动方式为cephx
auth client required = cephx #启动方式认证,启动方式为cephx
osd journal size = 1024
osd pool default size = 1 #osd的数据会复制多少份,osd节点或服务的个数至少要>=复制份数
osd pool default min size = 1 #允许降级状态下写入几个副本
osd pool default pg num = 333 #配置单个pool默认的pg数量和pgp数量,pg num和pgp num保持一致即可
osd pool default pgp num = 333 #pg:placement group,及放置组
osd crush chooseleaf type = 1 #1表示不允许把数据的不同的副本放到1个节点上,
mon_allow_pool_delete = true #该参数表示是否允许删除pool,也就是存储池,默认是不允许的,当为true时表示允许删除
4.2 ceph-mon相关配置
# 为集群创建1个密钥环,作为监视器密钥 注意其中的点.不要丢
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
# 生成管理员密钥环 创建admin用户 也是第一个客户端用户
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
# 生成bootstrap密钥环和用户
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
# 然后将刚才生成的密钥追加到ceph.mon.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
# 修改ceph.mon.keyring的权限为ceph ceph用户安装时已经自动创建
chown ceph:ceph /tmp/ceph.mon.keyring
生成ceph-mon 映射,存储到/tmp/monmap,注意主机名、ip、fsid要根据实际情况进行修改
monmaptool --create --add node1 10.130.0.1--fsid f13412f4-e4a2-4404-9a68-1bd888e1b2c5 /tmp/monmap
创建ceph-mon数据目录
# 目录名为: 集群名-主机名 这里是: ceph-node1
mkdir /var/lib/ceph/mon/ceph-node1
使用刚才生成的密钥环和映射初始化数据目录
# -i 指定主机名
ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
调整数据目录权限为ceph
chown -R ceph:ceph /var/lib/ceph/mon/ceph-node1/
启动ceph-mon服务
# 服务名为:ceph-mon@主机名
systemctl start ceph-mon@node1
# 查看服务状态
systemctl status ceph-mon@node1
【问题描述】Failed to start Ceph cluster monitor daemon.
【问题解决】
systemctl daemon-reload
systemctl restart ceph-mon@node1
如果正常启动的话,这时候6789端口应该被监听了,这样ceph-mon服务就配置好了,如果配置多个节点的话,要将刚才的ceph.mon.keyring和monmap复制到其他的节点,然后初始化数据目录启动服务即可,密钥环不要多次生成,然后admin用户和bootstrap-osd用户的密钥环同时都要同步到其他的节点。
查看ceph状态
ceps -s
#正常显示health: HEALTH_OK即可,如下所示
[root@node1 ~]# ceph -s
cluster:
id: f13412f4-e4a2-4404-9a68-1bd888e1b2c5
health: HEALTH_OK
……
health: HEALTH_WARN情况分析解决:
1、mon is allowing insecure global_id reclaim
【问题解决】
禁用安全模式,ceph config set mon auth_allow_insecure_global_id_reclaim false
2、monitors have not enabled msgr2
【问题解决】
启用msgr2,ceph mon enable-msgr2
五、ceph-mgr服务部署(node1节点)
ceph-mgr和ceph-mon是成对出现的,在每个ceph-mon的节点上都应该有ceph-mgr进程,然后就是配置并启动ceph-mgr守护进程。
5.1 生成mgr身份验证密钥
# 创建mgr密钥目录, 命名为: 集群名-主机名
mkdir /var/lib/ceph/mgr/ceph-node1
# 创建mgr身份验证密钥 注意里面的mgr.node1,node1为主机名
ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-node1/keyring
5.2 启动ceph-mgr守护进程
ceph-mgr -i node1
-i参数指定主机名,启动后确认进程是否存在
5.3 查看ceph状态
正常显示active就可以了
[root@node1 ceph]# ceph status
services:
mon: 1 daemons, quorum node1 (age 11m)
mgr: node1(active, since 12s)
osd: 0 osds: 0 up, 0 in
六、ceph-osd节点部署(noed2,node3)
部署ceph-osd的步骤应该在所有的osd节点上运行,当然这里是node2和node3,每个节点都要执行同样的操作,首先要将node1上面的osd密钥发送到osd节点,否则创建osd会报错授权失败,如果刚才已经同步可以忽略,否则就在node1上执行:
scp /var/lib/ceph/bootstrap-osd/ceph.keyring node2:/var/lib/ceph/bootstrap-osd/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring node3:/var/lib/ceph/bootstrap-osd/
然后才可以操作创建osd存储,这里创建的存储类型分为两种,分别是:BULE STORE和FILE STORE,即分别是默认的存储以及文件存储,其中每个文件存储osd至少需要两块设备,因为每个文件存储都必须要指定配套的日志存储设备,我们这里创建类型为bule store.
执行命令直接创建osd存储:
ceph-volume lvm create --data /dev/sdb1
–data指定块设备,我们这为/dev/sdb1,指定之后会有一些输出,如果没有报错正常就创建成功并且自动启动了osd服务,osd服务名为:ceph-osd@<osd编号>,这里第一个编号就是0了,因此服务名为:ceph-osd@0
使用命令查看osd服务是否正常: systemctl status ceph-osd@0 如果正常即可表示osd进程启动成功,现在用ceph -s也能看到osd的状态,然后再进入另外的osd节点,比如进入node3,同样执行这个创建块存储,查看服务ceph-osd@1是否正常,最后通过ceph查看状态如下:
[root@node1 ceph]# ceph -s
cluster:
id: f13412f4-e4a2-4404-9a68-1bd888e1b2c5
health: HEALTH_OK
services:
mon: 1 daemons, quorum node1 (age 20m)
mgr: node1(active, since 9m)
osd: 2 osds: 2 up (since 50s), 2 in (since 50s)
除了上面的命令,使用下面的步骤也同样可以创建osd节点,步骤更细一些,分为准备和激活两个阶段:
# 准备设备
ceph-volume lvm prepare --data /dev/sdb1
# 激活设备 数字0为自定义的osd编号,最好按照顺序排列,后面是fsid
ceph-volume lvm activate 0 f13412f4-e4a2-4404-9a68-1bd888e1b2c5
# 查看osd卷列表
ceph-volume lvm list
七、ceph-mds部署(node1)
最后部署ceph-mds守护进程,这个需要在单独的mds节点执行,这里选node1为mds节点,下面是配置的过程:
创建mds数据目录:
# 目录名同样是: 集群名-主机名
mkdir /var/lib/ceph/mds/ceph-node1
# 然后创建mds 密钥环到刚建的目录中, 注意mds.node1同样写主机名
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node1/keyring --gen-key -n mds.node1
# 最后导入密钥环 设置访问权限 同样注意主机名
ceph auth add mds.node1 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node1/keyring
然后编译配置文件:/etc/ceph/ceph.conf,添加如下的配置块:
[root@node1 ~]# cat /etc/ceph/ceph.conf
......
[mds.node1]
host = node1
这里node1就是主机名,注意根据实际的mds节点替换,保存后将配置文件同步到集群所有节点,最后启动ceph-mds守护进程:
# -i指定mds节点主机名, -m指定ceph-mon的主机名:端口
ceph-mds --cluster ceph -i node1 -m node1:6789
这里ceph-mds和ceph-mon是同一个节点,因此都是指定node1,启动之后查看进程是否存在,然后通过ceph -s可以看到mds的状态:
[root@node1 ~]# ceph -s
services:
mon: 1 daemons, quorum node1 (age 4m)
mgr: node1(active, since 2m)
mds: cephfs:1 {0=node1=up:active}
osd: 2 osds: 2 up (since 7m), 2 in (since 3h)
如图所示,目前所有的组件状态都是正常的
【问题描述】mds状态为 1 up:standby
【问题解决】up:standby当前为备用状态,需要分配pool才可以使用
八、创建存储池以及ceph文件系统
ceph所有的存储都是基于存储池才能分配,因此要先创建存储池,初始情况至少创建两个存储池(RADOS):1个用于存储数据,1个用于存储元数据信息,创建命令如下:
# 创建名字为cephfs_data的数据池 pg大小为128
ceph osd pool create cephfs_data 128
# 创建名字为cephfs_metadata的存储池 pg大小为64
ceph osd pool create cephfs_metadata 64
存储池可以创建多个,并且所有的存储池共享底层的存储空间,比如A存储池占用了一部分,那个B存储池就只能用剩下的部分了,而且之后挂载后剩余大小的显示也会变小,这个后面可以验证
另外就是注意这里pg大小正常指定128或64就够了,正常默认1个pool最多支持250个pg,可以通过参数调整限制大小,这里两个池都是一样的数据池,后续创建文件系统会指定哪个用于数据,哪个用于元数据存储,这里名字只是个代号
然后基于存储池创建文件系统,命令如下:
# ceph fs new <fs名称> <元数据池> <数据池>
ceph fs new cephfs cephfs_metadata cephfs_data
执行成功之后通过命令: ceph fs ls 查看存在的文件系统,正常显示如下:
[root@node1 ceph]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
可以通过ceph mds stat查看mds当前的活动状态,也可以通过ceph -s查看
【问题描述】2 pool(s) have no replicas configured
【问题解决】ceph config set global mon_warn_on_pool_no_redundancy false
九、挂载文件系统
挂载文件系统有两种方式,一种是基于操作系统内核直接挂载,另一种是使用ceph fuse挂载,通常推荐第一种方式挂载,这样性能和效率都是最高的,如果第一种方式挂载不成功的话,可以尝试使用fuse方式挂载,看看能否定位到什么问题,下面我们直接使用内核方式挂载:
使用内核方式挂载要确认mount是否支持ceph: stat /sbin/mount.ceph ,正常安装好ceph包都会有/sbin/mount.ceph这个文件,说明支持ceph的文件系统,然后创建挂载点使用admin用户挂载:
mkdir /mnt/mycephfs
mount -t ceph :/ /mnt/mycephfs/ -o name=admin
正常没有任何错误信息就挂载上了,通过 df -h 可以查看挂载的情况以及容量
[root@node1 ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
.......
10.130.0.101:6789:/ 36G 0 36G 0% /mnt/mycephfs
查看ceph状态:
[root@node1 ~]# ceph -s
cluster:
id: f13412f4-e4a2-4404-9a68-1bd888e1b2c5
health: HEALTH_OK
services:
mon: 1 daemons, quorum node1 (age 4m)
mgr: node1(active, since 2m)
mds: cephfs:1 {0=node1=up:active}
osd: 2 osds: 2 up (since 7m), 2 in (since 3h)
data:
pools: 2 pools, 192 pgs
objects: 22 objects, 2.9 KiB
usage: 2.0 GiB used, 38 GiB / 40 GiB avail
pgs: 192 active+clean
io:
client: 3.6 KiB/s rd, 280 B/s wr, 3 op/s rd, 0 op/s wr
参考链接:
https://www.lmlphp.com/user/10638/article/item/422384/