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个节点,可以和其他组件一起也可以分开。

二、环境准备

hostnameIP
node110.130.0.101
node210.130.0.102
node310.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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值