目录
一、条件
准备三台主机(虚拟机也可以):
类型 | 主机名 | IP地址 | 角色 |
集群机 | ceph01 | 192.168.10.136 | mon、mgr、osd |
集群机 | ceph02 | 192.168.10.137 | mon、mgr、osd |
集群机 | ceph03 | 192.168.10.138 | mon、mgr、osd |
客户机 | client | 192.168.10.144 | client |
另添加两块硬盘(做实验设小而已):
二、系统环境(所有机都配置)
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
三、Ceph部署环境
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
[root@ceph01 ~]# yum makecache #缓存包信息
3.配置时间同步(所有机都配置)
yum install ntp -y
ntpdate cn.pool.ntp.org
4.配置/etc/hosts文件(只配置集群机,client不配置)
vim /etc/hosts #把以下内容加进去
192.168.10.136 ceph01
192.168.10.137 ceph02
192.168.10.138 ceph03
四、开始部署ceph
CEPH安装与MON服务配置
1.安装ceph(所有机都上安装)
yum install -y ceph
2.首先给集群分配唯一IP,即fsid(在ceph01上执行)
3.创建 Ceph 配置文件, Ceph 默认使用 ceph.conf ,其中的 ceph 是集群名字。执行vim /etc/ceph/ceph.conf对文件配置(在ceph01上配置)
[global]
fsid=cc1062cf-45f3-49e8-a971-78fa4cc65106
mon_initial_members=ceph01,ceph02,ceph03
mon_host=192.168.10.136,192.168.10.137,192.168.10.138
public_network=192.168.10.0/24
auth_cluster_required=none
auth_service_required=none
auth_client_required=none
osd_pool_default_size=3
osd_pool_default_min_size=2
osd_pool_default_pg_num=128
osd_pool_default_pgp_num=128
storage_type=bluestore
osd_objectstore=bluestore
osd_mkfs_type=xfs
bluestore_block_size=5628755968
#bluestore_block_size=5628755968 默认为10737418240,单位为B(字节),如果不配置,它添加OSD的时候会自动创建10G的block文件在OSD的节点目录下,即使挂载的磁盘为5G,所以避免造成数据紊乱,我们需要配置一下跟我们规划的OSD磁盘容量一样
#osd_pool_default_size=3配置默认副本为3
#osd_pool_default_min_size=2最小为2
#osd_pool_default_pg_num=128配置pg数量
#osd_pool_default_pgp_num=128配置pgp数量
#storage_type=bluestore修改存储引擎为bluestore
#osd_objectstore=bluestore,本地对象存储默认为filestore,现修改为bluestore
#osd_mkfs_type=xfs格式化系统类型
4.用规划好的主机名、对应 IP 地址、和 FSID 生成一个监视器图,并保存 为 /tmp/monmap(在ceph01上执行)
monmaptool --create --add ceph01 192.168.10.136 --add ceph02 192.168.10.137 --add ceph03 192.168.10.138 --fsid cc1062cf-45f3-49e8-a971-78fa4cc65106 /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状态
OSD服务配置
1.创建OSD。如果没有指定 UUID,将会在OSD首次启动时分配一个,每个osd对应一个硬盘,创建时默认0,顺序创建,这里实验一台机有三块盘,一块系统盘,两块数据盘,所以两块数据盘作OSD存储,执行两次命令,创建两个OSD。(集群机都配置)
ceph osd create
2.在作OSD的主机上创建默认目录。(每个OSD分别配置,所有机都一样执行下面步骤,因为osd顺序创建,序号是顺序递增,所以执行命令时候ceph-$id的$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
如果要把 OSD 装到非系统盘的独立硬盘上,先创建文件系统、然后挂载到刚创建的默认目录下。
这里实验两块数据盘是增添的,所以非系统盘,我们要做挂载,配置如下:
mkfs -t xfs /dev/sdb
mount /dev/sdb /var/lib/ceph/osd/ceph-0
为开机可以自动挂载,我们在/etc/fstab配置文件加上下面两条并保存:(使用命令“vi /etc/fstab”进入,每台机挂载的目录按每台机的创建的osd默认目录来)
/dev/sdb /var/lib/ceph/osd/ceph-0 xfs defaults 0 0
/dev/sdc /var/lib/ceph/osd/ceph-1 xfs defaults 0 0
3.初始化OSD数据目录。(集群机都一样步骤配置,每个OSD都执行,注意OSD号)
ceph-osd -i 0 --mkfs
#其中0是OSD号
#因为免认证,所以不用加--mkkey
初始化成功!
执行完上面命令后,我们可以看到/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
执行完后,再执行ceph osd tree查看状态全为up。
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查看集群状态,现在集群已经是健康状态。(这里图颜色跟上面不一样是因为中途我修改了一下界面)
2.启用DashBoard功能
任意节点执行都可:
ceph mgr module enable dashboard
在宿主机上浏览器访问:http://ip:7000/即可看到DashBoard
注:ip为主mgr所在主机的ip
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
可以看到mds服务已经启动。
二、创建池
CephFS至少需要两个RADOS pool,一个存储数据,另一个存储元数据。
使用如下命令创建这两个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 128
启用CephFS文件系统
ceph fs new cephfs cephfs_metadata cephfs_data
如图所示:
接着查看ceph状态,如下图,可以看到mds已经是active状态,有两个pool池,pg数量256。
三、挂载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.10.144:/etc/ceph/
4、在客户机client上挂载cephfs使用
#手工挂载
mount.ceph 192.168.10.144:6789:/ /mnt/cephfs/
#开机自动挂载
vim /etc/fstab
#把下面这条命令加入到fstab文件内容里保存,实现开机挂载
192.168.10.136:6789:/ /mnt/ceph ceph noatime,_netdev 0 2
_netdev告诉系统这个设备需要网络访问,如果网络连接不可用,系统就不需要去尝试挂载。
atime为access time(访问时间)的缩写,显示的是文件中的数据最后被访问的时间,读一次这个文件的内容,这个时间就会更新,比如被系统的进程直接使用或者通过一些命令和脚本间接使用。所以noatime 对该文件系统的读取访问将不再导致与该文件相关的时间信息的更新,也就是说不用记录文件access time,对性能提升比较可观。
5、查看挂载情况(df -h)
可以看到集群的cephfs成功挂载到客户机的/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 5G
#rbd/demo 表示在存储池rbd下的镜像demo
#--image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。
提示:ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering。
4、查看刚创建的镜像详细信息
rbd info demo
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文件,设置自动地图
设置rbdmap为开机启动
systemctl enable rbdmap
使用命令vim /etc/fstab修改/etc/fstab,设置开机挂载
/dev/rbd0 /mnt/demo xfs noatime,_netdev 0 0
重启之后,/dev/rbd0也能够正常挂载上去。