PVE三台虚拟机模拟
名称:Ceph
ceph01:192.168.20.10 mon,mgr,osd
ceph02:192.168.20.11 mon,mgr,osd
ceph03:192.168.20.12 mon,mgr,osd
客户端:192.168.20.14
系统环境
1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2.关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
基础部署
1.所有节点配置基础源
yum install -y wget #最小安装的系统需要
yum clean all
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo
2.所有节点配置ceph源
vim /etc/yum.repos.d/ceph.repo #进入文件编写以下内容保存退出
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
yum makecache #缓存包信息
3.配置时间同步
yum install ntp -y
ntpdate cn.pool.ntp.org
或
#yum install chrony
#nano /etc/chrony.conf
//增加server 192.168.199.100 iburst
//server 192.168.199.123 iburst
//server 192.168.199.132 iburst
//allow 192.168.199.0/24
4.配置host文件
nano /etc/hosts #把以下内容加进去
//ip为自己集群机的ip地址
192.168.20.10 ceph01
192.168.20.11 ceph02
192.168.20.12 ceph03
Ceph部署
1.CEPH安装与MON服务配置
yum install -y ceph
//查看版本
[root@localhost etc]# ceph -v
ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
2.首先给集群分配唯一IP,即fsid(在ceph01上执行)
[root@localhost /]# uuidgen
4f0a73b3-377e-4377-9819-aaa8a79876d6
3.创建 Ceph 配置文件, Ceph 默认使用 ceph.conf ,其中的 ceph 是集群名字。在 /etc/ceph/ceph.conf对文件配置(在ceph01上配置)
[global]
fsid=4f0a73b3-377e-4377-9819-aaa8a79876d6
mon_initial_members=ceph01,ceph02,ceph03
mon_host=192.168.20.10,192.168.20.11,192.168.20.12
public_network=192.168.20.0/24
auth_cluster_required=none
auth_service_required=none
auth_client_required=none
osd_pool_default_size=3 //配置默认副本为3
osd_pool_default_min_size=2 //最小为2
osd_pool_default_pg_num=128 //128配置pg数量
osd_pool_default_pgp_num=128 //128配置pgp数量
storage_type=bluestore //修改存储引擎为bluestore
osd_objectstore=bluestore //本地对象存储默认为filestore,现修改为bluestore
osd_mkfs_type=xfs //格式化系统类型
bluestore_block_size=10737418240
//如果后续操作提示clock skew detected on mon.ceph02, mon.ceph03
//可添加以下内容:mon clock drift allowed = 2;mon clock drift warn backoff = 30
//修改ceph配置中的时间偏差[阈值]
//bluestore_block_size=5628755968 默认为10737418240,单位为B(字节),
//如果不配置,它添加OSD的时候会自动创建10G的block文件在OSD的节点目录下,
//所以避免造成数据紊乱,我们需要配置一下跟我们规划的OSD磁盘容量一样
4.用规划好的主机名、对应 IP 地址、和 FSID 生成一个监视器图,并保存 为 /tmp/monmap(在ceph01上执行)
monmaptool --create --add ceph01 192.168.20.10 --add ceph02 192.168.20.11 --add ceph03 192.168.20.12 --fsid 4f0a73b3-377e-4377-9819-aaa8a79876d6 /tmp/monmap
5.将monmap和ceph.conf 等文件发送到其他mon节点(在ceph01上执行)
scp /etc/ceph/ceph.conf ceph02:/etc/ceph/
scp /etc/ceph/ceph.conf ceph03:/etc/ceph/
scp /tmp/monmap ceph02:/tmp/
scp /tmp/monmap ceph03:/tmp/
6.在监视器主机(mon)上分别创建数据目录。(在集群机上执行,修改目录名,如ceph01上就是ceph-ceph01,ceph02上就是ceph-ceph02这样“集群名-主机名”的写法)
sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname} //官方模板
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph01 //自用
7.用监视器图组装守护进程所需的初始数据。(在集群机上执行以下命令,第一条在不同机需修改主机名,例如在ceph02上:ceph-mon --mkfs -i ceph02 --monmap /tmp/monmap)
ceph-mon --mkfs -i ceph01 --monmap /tmp/monmap
chown ceph.ceph -R /var/lib/ceph 修改所属用户和组
//ceph01是主机名
8.启动mon服务,并查看ceph状态。(集群机上都执行)
systemctl start ceph-mon@ceph01
systemctl enable ceph-mon@ceph01
//不同主机更改后面的主机名,如ceph02上:“systemctl start ceph-mon@ceph02”。
ceph -s
// 查看ceph状态
//如果time out,查看防火墙是否关闭,服务是否开启
//netstat -ntlp |grep 6789
配置OSD
1.创建OSD(集群机都配置)
ceph osd create
//如果没有指定 UUID,将会在OSD首次启动时分配一个,每个osd对应一个硬盘,创建时默认0,顺序创建
//这里实验一台机有两块盘,一块系统盘,一块数据盘,所以执行一次命令,创建一个OSD
2.在作OSD的主机上创建默认目录。(每个OSD分别配置,所有机都一样执行下面步骤,因为osd顺序创建,序号是顺序递增,所以执行命令时候ceph-id要对应创建的osd序号)
//官方配置
sudo mkdir /var/lib/ceph/osd/{cluster-name}-{osd-number}
//cluster-name为集群名,前面说过ceph.conf的ceph就就是集群名
//osd-number为osd创建时输出的osd号(第一个创建时是0)
sudo -u ceph mkdir /var/lib/ceph/osd/ceph-0
查看硬盘
[root@ceph01 /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 908M 0 908M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.5M 911M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/mapper/centos-root 29G 2.2G 27G 8% /
/dev/sdb1 9.8G 37M 9.2G 1% /home/data
/dev/sda1 1014M 150M 865M 15% /boot
tmpfs 184M 0 184M 0% /run/user/0
如果要把 OSD 装到非系统盘的独立硬盘上,先创建文件系统、然后挂载到刚创建的默认目录下。
这里实验数据盘是增添的,所以非系统盘,我们要做挂载,配置如下:
mkfs -t xfs /dev/sdb1
mount /dev/sdb1 /var/lib/ceph/osd/ceph-0
设置开机可以自动挂载,在/etc/fstab配置文件加上下面两条并保存:(使用命令“nano /etc/fstab”进入,每台机挂载的目录按每台机的创建的osd默认目录来)
/dev/sdb1 /var/lib/ceph/osd/ceph-0 xfs defaults 0 0
3.初始化OSD数据目录。(集群机都一样步骤配置,每个OSD都执行,注意OSD号)
ceph-osd -i 0 --mkfs
//0是OSD号
//因为免认证,所以不用加--mkkey
初始化完成:
[root@ceph01 ~]# ceph-osd -i 0 --mkfs
2024-03-20 21:26:51.176637 7f3b597b8ec0 -1 bluestore(/var/lib/ceph/osd/ceph-0/block) _read_bdev_label failed to open /var/lib/ceph/osd/ceph-0/block: (2) No such file or directory
2024-03-20 21:26:51.176681 7f3b597b8ec0 -1 bluestore(/var/lib/ceph/osd/ceph-0/block) _read_bdev_label failed to open /var/lib/ceph/osd/ceph-0/block: (2) No such file or directory
2024-03-20 21:26:51.176697 7f3b597b8ec0 -1 bluestore(/var/lib/ceph/osd/ceph-0/block) _read_bdev_label failed to open /var/lib/ceph/osd/ceph-0/block: (2) No such file or directory
2024-03-20 21:26:51.338228 7f3b597b8ec0 -1 bluestore(/var/lib/ceph/osd/ceph-0) _read_fsid unparsable uuid
2024-03-20 21:26:55.602615 7f3b597b8ec0 -1 created object store /var/lib/ceph/osd/ceph-0 for osd.0 fsid 4f0a73b3-377e-4377-9819-aaa8a79876d6
执行完上面命令后,/var/lib/ceph/osd/ceph-0目录下产生了一堆文件,此时它们所属的用户和组都是root,把它们修改为ceph
chown ceph:ceph -R /var/lib/ceph/osd/ceph-0
4.把节点加入 CRUSH 图并把此 Ceph 节点放入 default 根下。(集群机一样步骤配置,这里注意主机名)
ceph osd crush add-bucket ceph01 host
ceph osd crush move ceph01 root=default
//ceph01为在配置的机上的主机名
5.OSD 加入 CRUSH 图之后,它就能接收数据了。你也可以反编译 CRUSH 图、 把 OSD 加入设备列表、对应主机作为桶加入(如果它还不在 CRUSH 图里)、然后此设备作为主机的一个条目、分配权重、重新编译、注入集群。(集群机都一样步骤配置,注意osd号)
ceph osd crush add osd.0 1.0 host=ceph01
//osd.0是在ceph01机上创建的,所以对应的host为ceph01,设置的权重1.0,所有机加入osd的权重都配置一样
6.使用命令ceph osd tree来查看osd状态都为down,所以要启动它。(集群机一样执行,注意OSD号要改)
systemctl start ceph-osd@0
systemctl enable ceph-osd@0
7.查看状态是否全为up
[root@ceph03 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.00000 root default
-2 1.00000 host ceph01
0 hdd 1.00000 osd.0 up 1.00000 1.00000
-4 1.00000 host ceph02
1 hdd 1.00000 osd.1 up 1.00000 1.00000
-3 1.00000 host ceph03
2 hdd 1.00000 osd.2 up 1.00000 1.00000
MGR服务配置
1.初始化并启动从MGR服务(集群机上配置,注意创建的目录名称,systemctl启动命令的@后面是目录名称)
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph01
systemctl start ceph-mgr@ceph-ceph01
systemctl enable ceph-mgr@ceph-ceph01
执行ceph -s查看集群状态,现在集群已经是健康状态
[root@ceph01 ~]# ceph -s
cluster:
id: 4f0a73b3-377e-4377-9819-aaa8a79876d6
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph-ceph01(active), standbys: ceph-ceph03, ceph-ceph02
osd: 4 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 3.01GiB used, 27.0GiB / 30GiB avail
pgs:
2.启用DashBoard功能(任意节点执行都可以)
ceph mgr module enable dashboard
在宿主机上浏览器访问:http://ip:7000/即可看到DashBoard
注:ip为主mgr所在主机的ip
[root@ceph01 ~]# ceph mgr services
{
"dashboard": "http://ceph01:7000/"
}
MDS服务配置
一.添加 MDS
(只有要使用CephFS的场景下才需要创建MDS服务,下面配置只在ceph01上配置,用ceph01作文件系统存储)
1、首先创建目录
模板:
mkdir /var/lib/ceph/mds/{cluster-name}-{id} # 这里的ID设置为本地主机名
实验:
sudo -u ceph mkdir /var/lib/ceph/mds/ceph-ceph01
//内部免认证使用,不需要配置密钥认证
2、手动启动mds服务
ceph-mds --cluster ceph -i ceph01 -m ceph01:6789
#如果是使用root启动,需要注意权限问题,将mds目录下所属修改为ceph
chown -R ceph:ceph /var/lib/ceph/mds/
systemctl start ceph-mds@ceph01
systemctl enable ceph-mds@ceph01
查看mds服务是否启动ps aux | grep mds
[root@ceph01 ~]# ps aux | grep mds
root 2610 0.0 0.6 338060 12724 ? Ssl 19:56 0:00 ceph-mds --cluster ceph -i ceph01 -m ceph01:6789
ceph 2725 0.0 0.9 337028 17804 ? Ssl 19:59 0:00 /usr/bin/ceph-mds -f --cluster ceph --id ceph01 --setuser ceph --setgroup ceph
root 2789 0.0 0.0 112824 948 pts/0 S+ 20:00 0:00 grep --color=auto mds
二.创建池
(CephFS至少需要两个RADOS pool,一个存储数据,另一个存储元数据)
1.创建两个pool
模板:
ceph osd pool create <poolname> <pg_num>
ceph osd pool create <poolname> <pg_num>
实验:
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 64
2.启用CephFS文件系统
ceph fs new cephfs cephfs_metadata cephfs_data
查看ceph状态
[root@ceph01 ~]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@ceph01 ~]# ceph -s
cluster:
id: 4f0a73b3-377e-4377-9819-aaa8a79876d6
health: HEALTH_WARN
1 filesystem is degraded
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph-ceph01(active), standbys: ceph-ceph02, ceph-ceph03
mds: cephfs-1/1/1 up {0=ceph01=up:replay}
osd: 4 osds: 3 up, 3 in
data:
pools: 2 pools, 192 pgs
objects: 21 objects, 2.19KiB
usage: 3.13GiB used, 26.9GiB / 30GiB avail
pgs: 192 active+clean
//[root@ceph01 ~]# ceph osd pool get cephfs_data size
//size: 3
三.挂载CephFS
以下配置皆在客户机client上配置
1.创建/etc/ceph/目录来存放ceph.conf文件
mkdir -p /etc/ceph
2.创建/mnt/cephfs/目录用来挂载cephfs使用
mkdir -p /mnt/cephfs
3.把ceph集群文件复制发送到客户机client的/etc/ceph/目录下(此操作在ceph01上执行)
scp /etc/ceph/ceph.conf 192.168.20.14:/etc/ceph/
4.在客户机client上挂载cephfs使用
//手工挂载
mount.ceph 192.168.20.10:6789:/ /mnt/cephfs/
//如果提示无mount.ceph用以下安装命令
//yum install ceph-common
//开机自动挂载
nano /etc/fstab
//把下面这条命令加入到fstab文件内容里保存,实现开机挂载
192.168.20.10:6789:/ /mnt/ceph ceph noatime,_netdev 0 2
_netdev告诉系统这个设备需要网络访问,如果网络连接不可用,系统就不需要去尝试挂载。
atime为access time(访问时间)的缩写,显示的是文件中的数据最后被访问的时间,读一次这个文件的内容,这个时间就会更新,比如被系统的进程直接使用或者通过一些命令和脚本间接使用。所以noatime 对该文件系统的读取访问将不再导致与该文件相关的时间信息的更新,也就是说不用记录文件access time,对性能提升比较可观。
5.查看挂载情况(df -h)
可以看到集群的cephfs成功挂载到客户机的/mnt/cephfs目录下
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 908M 0 908M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.5M 911M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/mapper/centos-root 29G 2.1G 27G 8% /
/dev/sda1 1014M 150M 865M 15% /boot
tmpfs 184M 0 184M 0% /run/user/0
192.168.20.10:6789:/ 8.5G 0 8.5G 0% /mnt/cephfs
四.RBD块存储配置
(在任意一台集群机上配置)
1.创建RBD的存储池
ceph osd pool create rbd 128 128
2.使能存储池rbd为块存储
ceph osd pool application enable rbd rbd
3.创建一个镜像
rbd create rbd/demo --image-feature layering --size 10G
#rbd/demo 表示在存储池rbd下的镜像demo
#--image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。
提示:ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering
4.查看刚创建的镜像详细信息
rbd info demo
[root@ceph02 ~]rbd info demo
rbd image 'demo':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.8dd86b8b4567
format: 2
features: layering
flags:
create_timestamp: Thu Mar 21 22:07:57 2024
5.客户端(client)配置镜像映射并挂载使用
下面命令如果在MDS配置步骤部署过可以跳过,但其中第二条要执行
mkdir -p /etc/ceph #创建/etc/ceph/目录来存放ceph.conf文件
mkdir -p /mnt/demo #创建/mnt/demo/目录用来挂载块存储创建的镜像demo使用
scp /etc/ceph/ceph.conf 192.168.10.144:/etc/ceph/ #把ceph集群文件复制发送到客户机client的/etc/ceph/目录下
在客户机上执行下面命令,映射镜像到客户机
rbd map rbd/demo #映射镜像到客户机
rbd showmapped #查看映射镜像对应的磁盘信息
rbd unmap /dev/rbd0 #撤销映射的镜像
设置手工挂载
mkfs.xfs /dev/rbd0 //格式化,格式为xfs
mount /dev/rbd0 /mnt/demo //手工挂载(可以挂载到任意目录)
设置开机自动挂载
在客户机上编辑/etc/ceph/rbdmap文件,设置自动地图
[root@localhost ~]# cat /etc/ceph/rbdmap
# RbdDevice Parameters
#poolname/imagename id=client,keyring=/etc/ceph/ceph.client.keyring
rdb/demo
设置rbdmap为开机启动
systemctl enable rbdmap
使用命令nano /etc/fstab修改/etc/fstab,设置开机挂载
/dev/rbd0 /mnt/demo xfs noatime,_netdev 0 0
查看硬盘信息
已正确挂载
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 908M 0 908M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.5M 911M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/mapper/centos-root 29G 2.1G 27G 8% /
/dev/sda1 1014M 150M 865M 15% /boot
tmpfs 184M 0 184M 0% /run/user/0
192.168.20.10:6789:/ 8.5G 0 8.5G 0% /mnt/cephfs
/dev/rbd0 10G 33M 10G 1% /mnt/demo