Ceph 集群搭建部署

发布于 2022-11-23  214 次阅读


一、Ceph介绍及部署准备

1.1 基本介绍

Ceph是一种分布式存储系统,所谓分布式,指的是Ceph可以部署在多台服务器上,通过多台服务器并行处理来对外提供高性能的读写块。Ceph可以提供对象存储RadosGW(Reliable、Autonomic、Distributed、Object Storage Gatway)、块存储Rbd(Rados Block Device)、文件系统存储Ceph FS(Ceph FileSystem)三种功能。

img

1.2 Ceph组件和功能介绍

MON: 维护着展示集群状态的各种图表,包括monmap、osdmap、pgmap、crushmap、mdsmap等,其中pgmap和osdmap最为重要。Ceph保存着发生在各节点上每一次状态变更的历史信息(称为epoch)。Mon中最核心组件为paxos(分布式一致性算法),paxos可以保证mon集群实现强一致性,通过Majority机制从Mon集群中选举出一个主节点。但是Mon集群允许故障的最大节点数不能>=Mon集群总数的1/2,所以一般Mon为单数个。

OSD: OSD的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Mon提供一些监控信息,每个磁盘存储设备对应一个OSD守护进程。Ceph集群会默认设置3 OSD副本数,意味着至少需要3个OSD守护进程,集群才能达到 active+clean 状态,

PG:placeholder group,一个pool(存储池)内可以有多个PG,pool和pg都是抽象的逻辑概念,可以通过公示计算。PG的用途是对Object的存储进行组织和位置映射的。具体而言,一个PG负责组织若干个Object,但一个Obiect只能被映射到一个PG中,即PG和Object之间是“一对多”的映射关系。同时,一个PG会被映射到N个OSD上,而每个OSD上都会承载大量的PG,即PG和OSD之间是“多对多”的映射关系。在实践当中,N至少为2,如果用于生产环境,则至少为3。

MDS: Ceph元数据服务器为Ceph文件系统存储元数据(也就是说,Ceph块设备和 Ceph对象存储不使用MDS)。元数据服务器使得POSIX文件系统的用户们,可以在不对Ceph存储集群造成负担的前提下,执行诸如ls、find等基本命令。

Mgr:负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于Web的Ceph Dashboard和RESTAPI。高可用性至少需要两个Mgr节点

RADOS:多个主机组成的存储集群,即可靠,自动化,分布式的对象存储系统。

File: 普通文件,Object与File的区别是,Object的最大尺寸由RADOS限定(默认为4MB),以便实现底层存储的组织管理。因此,当上层应用向RADOS存入一个大于4M的文件时,需要将File切分成统一大小的一系列Object进行存储。

1.3 部署架构

本文Ceph集群采用手动部署,ceph14版(nautilus**)

**服务器(节点名) 部署服务
10.206.232.7node0 monmgrmds
10.206.232.8node1 monmgrmds
10.206.232.9node2 monmgrmds主、osd0osd1osd2
10.206.232.11osd1 osd3osd4osd5mds
10.206.232.14osd2 osd6osd7osd8mds
10.206.232.15test1 用于做节点增、删、挂载等测试操作

1.4 部署准备

1.4.1)安装时间同步服务,同步时区:

yum install chrony -y
systemctl enable chronyd
systemctl start chronyd

1.4.2)查看当前时区,这里以上海时区为准:

timedatectl | grep "Time zone"
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm

1.4.4)内核优化(设置内核最大进程数)

sysctl -w kernel.pid_max=4194303(或者在/etc/sysctl.conf添加kernel.pid_max = 4194303)

1.4.5)安装disk具(仅osd**节点需要安装)

yum install -y gdisk

1.4.6)安装python-setuptoolsepel-release

yum install -y python-setuptools epel-release

1.4.7)安装yum install -y ceph报错缺少包python-werkzeug

img

1.4.7a)下载python-werkzeug rpm

wget http://www.rpmfind.net/linux/mageia/distrib/7/x86_64/media/core/updates/python2-werkzeug-0.15.3-1.mga7.noarch.rpm

1.4.7b)安装python-werkzeug

rpm -ivh python2-werkzeug-0.15.3-1.mga7.noarch.rpm

1.4.8)安装ceph

yum install -y ceph

1.4.9)关闭防火墙和selinux

systemctl stop firewalld && systemctl disable firewalld
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config && setenforce 0

二、Mon节点部署

2.1 Mon0节点(node0服务器)

2.1.1)使用uuidgen命令生成uuid作为ceph集群的fsid存放于ceph.conf

uuidgen
ba93b70d-d25a-48e9-b4a5-6645d7b8b5e5

2.1.2)编辑/etc/ceph/ceph.conf添加以下内容

[global]
fsid = ba93b70d-d25a-48e9-b4a5-6645d7b8b5e5
mon initial members = node0,node1,node2
mon host = 10.206.232.7, 10.206.232.8, 10.206.232.9
public network = 10.206.232.0/24
cluster network = 10.206.232.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd pool default min size = 1
osd pool default pg num = 64
osd pool default pgp num = 64
osd crush update on start=false 

2.1.3)创建监视密钥环保存至/tmp目录(注:监视器密钥环(即 mon.)包含一个密钥,不是auth**)

ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

2.1.4)为client.admin用户生成新密钥环授权后保存至/etc/ceph目录(注:client.admin用户是安装ceph**时默认创建的集群管理用户)

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 *'

2.1.5)为client. bootstrap-osd用户生成新密钥环授权后保存至/var/lib/ceph/bootstrap-osd目录(注:此密钥环用于引导创建osd

ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'

2.1.6)将ceph.client.admin.keyring添加至/tmp/ceph.mon.keyring

ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

2.1.7)将/var/lib/ceph/bootstrap-osd/ceph.keyring添加至/tmp/ceph.mon.keyring

ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

2.1.8)使用monmaptool命令创建监视器图,添加mon节点信息保存至/tmp目录

monmaptool --create \
--add node0 10.206.232.7 \
--add node1 10.206.232.8 \
--add node2 10.206.232.9 \
--fsid ba93b70d-d25a-48e9-b4a5-6645d7b8b5e5 /tmp/monmap
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node0
chown -R ceph:ceph /var/lib/ceph/mon/ceph-node0

2.1.9)初始化mon节点数据默认保存于/var/lib/ceph/mon/ceph-node0/目录

ceph-mon --mkfs -i node0 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
chown -R ceph:ceph /var/lib/ceph/mon/ceph-node0

2.1.10)将node0的以下件拷贝至其他的mon节点

/etc/ceph/ceph.conf
/etc/ceph/ceph.client.admin.keyring
/var/lib/ceph/bootstrap-osd/ceph.keyring
/tmp/ceph.mon.keyring
scp /etc/ceph/ceph.conf root@node1:/etc/ceph/
scp /etc/ceph/ceph.conf root@node2:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@node1:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@node2:/etc/ceph/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node1:/var/lib/ceph/bootstrap-osd/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node2:/var/lib/ceph/bootstrap-osd/
scp /tmp/ceph.mon.keyring root@node1:/tmp/
scp /tmp/ceph.mon.keyring root@node2:/tmp/

2.2 Mon1节点(node1服务器)

monmaptool --create \
--add node0 10.206.232.7 \
--add node1 10.206.232.8 \
--add node2 10.206.232.9 \
--fsid ba93b70d-d25a-48e9-b4a5-6645d7b8b5e5 /tmp/monmap

sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node1
ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
chown -R ceph:ceph /var/lib/ceph/mon/ceph-node1
systemctl start ceph-mon@node1
systemctl enable ceph-mon@node1

2.3 Mon2节点(node2服务器)

monmaptool --create \
--add node0 10.206.232.7 \
--add node1 10.206.232.8 \
--add node2 10.206.232.9 \
--fsid ba93b70d-d25a-48e9-b4a5-6645d7b8b5e5 /tmp/monmap

sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node2
ceph-mon --mkfs -i node2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
chown -R ceph:ceph /var/lib/ceph/mon/ceph-node2

systemctl start ceph-mon@node2
systemctl enable ceph-mon@node2

2.4 Mon节点的增、删操作流程

2.4.1 新增Mon节点(test1节点服务器)

2.4.1-1)在ceph集群的mon节点中,拷贝client.admin密钥环/etc/ceph/ceph.client.admin.keyringtest1节点/etc/ceph/目录下:

scp /etc/ceph/ceph.client.admin.keyring root@test1:/etc/ceph/

2.4.1-2)以下操作在新增mon节点(test1节点服务器)进行:

2.4.1-2.a)ceph.conf文件新增mon节点及ip信息

img

2.4.1-2.b)创建mon初始化目录

sudo -u ceph mkdir /var/lib/ceph/mon/ceph-test1

2.4.1-2.c)获取集群mon密钥环

ceph auth get mon. -o /tmp/keyring

2.4.1-2.d)获取集群monmap

ceph mon getmap -o /tmp/mapfile

2.4.1-2.e)指定集群mon密钥环、monmap初始化mon节点,加入mon集群

ceph-mon -i test1 --mkfs --monmap /tmp/mapfile --keyring /tmp/keyring
chown -R ceph:ceph /var/lib/ceph

2.4.1-2.f)启动mon.test1

systemctl start ceph-mon@test1

2.4.1-2.g)检查是否创建成功

ceph mon dump

img

2.4.2 删除Mon节点(test1节点服务器)

2.4.2.a)停止test1节点的mon服务

systemctl stop ceph-mon@test1

2.4.2.b)将mon.test1节点从ceph集群中删除

ceph mon remove test1

img

2.4.2.c)在所有的ceph.conf配置文件中删除test1及其ip字段**

img

2.4.2.d)查看当前ceph集群mon节点,mon.test1已经从monmap中剔除**

ceph mon dump

img

三、Mgr节点部署

3.1 Mgr0节点(node0服务器)

3.1.1)使用ceph用户创建/var/lib/ceph/mgr/ceph-node0目录**

sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node0

3.1.2)创建mgr.node0用户,将密钥环保存到/var/lib/ceph/mgr/node0目录**

ceph auth get-or-create mgr.node0 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-node0/keyring

3.1.3)启动ceph-mgr@node0服务,并加入开机自启项**

systemctl enable ceph-mgr@node0
systemctl start ceph-mgr@node0

3.2 Mgr1节点(node1服务器)

sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node1

ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-node1/keyring

systemctl enable ceph-mgr@node1
systemctl start ceph-mgr@node1

3.3 Mgr2节点(node2服务器)

sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node2
ceph auth get-or-create mgr.node2 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-node2/keyring

systemctl enable ceph-mgr@node2
systemctl start ceph-mgr@node2

3.4 Mgr-Dashboard安装

3.4.1)Mgr各节点安装ceph-mgr-dashboard插件包

yum install -y ceph-mgr-dashboard

3.4.2)配置mgr-dashboard

#禁用mgr-dashboard的ssl协议
ceph config set mgr mgr/dashboard/ssl false
#mgr开启dashboard功能
ceph mgr module enable dashboard
#输入dashboard登录密码至文件password.txt
echo 'ceph#123' > password.txt
#创建一个dashboard管理员用户admin,密码为password.txt文件内容
ceph dashboard ac-user-create admin administrator -i password.txt

3.4.3)启动ceph-mgr@node0服务,并加入开机自启项

systemctl enable ceph-mgr@node0
systemctl start ceph-mgr@node0 

3.4.4)查看dashboard登录地址:

ceph mgr services

img

四、Osd节点部署

4.1 osd0-2节点(node2服务器)

4.1.1)从mon节点拷贝ceph.confOSD服务器

scp root@10.206.232.7:/etc/ceph/ceph.conf  /etc/ceph/

4.1.2)拷贝ceph集群/var/lib/ceph/bootstrap-osd/ceph.keyringnode2节点,该密钥环用于初始化osd节点

scp root@10.206.232.7:/var/lib/ceph/bootstrap-osd/ceph.keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
chown -R ceph:ceph /var/lib/ceph

4.1.3)擦除/dev/vdb盘所有数据

sgdisk --zap-all /dev/vdb

4.1.4)将磁盘/dev/vdb使用bluestore存储引擎进行格式化并禁止临时文件系统挂载

ceph-volume raw prepare --bluestore --data /dev/vdb --no-tmpfs

4.1.5)使用相同方法初始化/dev/vdc/dev/vdd磁盘

sgdisk --zap-all /dev/vdc
ceph-volume raw prepare --bluestore --data /dev/vdc --no-tmpfs
sgdisk --zap-all /dev/vdd
ceph-volume raw prepare --bluestore --data /dev/vdd --no-tmpfs                                  

4.1.6)查看node2节点OSDID

ceph-volume raw list

img

4.1.7)因为/dev下磁盘的默认用户为rootceph-osd默认启动用户为ceph,所以需要编辑osd自启用户为rootMON节点所在服务器没有OSD的情况下,不需要执行此步骤)

vi /usr/lib/systemd/system/ceph-mon@.service

img

4.1.8)设置osd节点开机自启

systemctl enable ceph-osd@0.service
systemctl enable ceph-osd@1.service
systemctl enable ceph-osd@2.service

4.2 osd3-5、osd6-8节点(osd1、osd2服务器)

4.2.1)osd1osd2服务器中osd部署方式与上述node2一致,参考步骤4.1**

4.2.2)查看osd1节点OSDID

ceph-volume raw list

img

4.2.3)查看osd2节点OSDID

ceph-volume raw list

img

4.2.4)在node2节点使用ceph auth list查看9osd用户是否正常创建(osd.0 - osd.8

ceph auth list

img

4.2.5)ceph开启msgr2

msgr214版本的新功能,支持客户端连接时加密认证等。在mon节点执行命令开启,否则集群状态会显示WARN,并报错“3 monitors have not enabled msgr2

ceph mon enable-msgr2

img

4.2.6)ceph -s查看集群中osd节点状态

ceph -s

img

4.3 Osd节点的增、删操作流程

4.3.1 新增Osd节点(test1服务器)

4.3.1.a)登录test1节点服务器,拷贝ceph集群/var/lib/ceph/bootstrap-osd/ceph.keyring/var/lib/ceph/bootstrap-osd 目录

scp root@10.206.232.7:/var/lib/ceph/bootstrap-osd/ceph.keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
chown -R ceph:ceph /var/lib/ceph

4.3.1.b)test1节点擦除/dev/vdb盘所有数据

sgdisk --zap-all /dev/vdb

img

4.3.1.c)将磁盘/dev/vdb使用bluestore存储引擎进行格式化并禁止临时文件系统挂载

ceph-volume raw prepare --bluestore --data /dev/vdb --no-tmpfs

img

4.3.1.d)查看test1节点OSDID

ceph-volume raw list

img

4.3.1.e)查看osd.9用户是否在集群创建

ceph auth get osd.9

img

4.3.1 删除Osd节点(test1服务器)

4.3.1.a)停止osd进程/服务

systemctl stop ceph-osd@9

4.3.1.b)将节点状态标记为out

ceph osd out osd.9 

4.3.1.c)从crush中移除节点

ceph osd crush remove osd.9

4.3.1.d)删除节点

ceph osd rm osd.9

4.3.1.e)删除osd节点用户

ceph auth del osd.9

4.3.1.f)删除osd目录下数据

rm -rf /var/lib/ceph/osd/ceph-9

4.3.1.g)擦除磁盘

sgdisk --zap-all /dev/vde

4.3.2 Osd维护标志

ceph osd set noout

设置该标志位,则mon不会从crush映射中删除任何OSD。对OSD作维护时,可设置该标志位,以防止CRUSH在OSD停止时自动重平衡数据。OSD重新启动时,需要清除该flag

ceph osd set norecover

设置该flag,禁止任何集群恢复操作。在执行维护和停机时,可设置该flag。

ceph osd set norebalance

禁止重平衡数据。在执行集群维护或者停机时,可以使用该flag。

ceph osd set nobackfill

停止数据再回填

ceph osd set nodown 

OSD停止时,MON会将OSD标识为down状态,设置该标志位,则MON不会将停止的OSD标识为down状态,设置nodown可以防止网络抖动导致的up down不断切换。

ceph osd set pause

设置该标志位,则集群停止读写,但不影响osd自检

解除维护状态

ceph osd unset noout 
ceph osd unset norecover
ceph osd unset norebalance
ceph osd unset nobackfill
ceph osd unset nodown
ceph osd unset pause

五、Mds节点部署

5.1 Mds0节点(node0服务器)

5.1.1)创建/var/lib/ceph/mds/ceph-node0文件夹

mkdir -p /var/lib/ceph/mds/ceph-node0 

5.1.2)为mds.node0用户创建密钥环保存到keyring

ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node0/keyring --gen-key -n mds.node0 

5.1.3)创建用户mds.node0,并授予对osd读写执行权限,对mds所有权限,可以以mds身份的方式访问mon的权限,指定用户密钥换为上一步生成的keyring

ceph auth add mds.node0 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node0/keyring

chown -R ceph:ceph /var/lib/ceph/mds/ceph-node0
systemctl start ceph-mds@node0 
systemctl enable ceph-mds@node0

5.2 Mds1节点(node1服务器)

mkdir -p /var/lib/ceph/mds/ceph-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

chown -R ceph:ceph /var/lib/ceph/mds/ceph-node1
systemctl start ceph-mds@node1
systemctl enable ceph-mds@node1

5.3 Mds2节点(node2服务器)

mkdir -p /var/lib/ceph/mds/ceph-node2 
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node2/keyring --gen-key -n mds.node2 

ceph auth add mds.node2 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node2/keyring

chown -R ceph:ceph /var/lib/ceph/mds/ceph-node2
systemctl start ceph-mds@node2 
systemctl enable ceph-mds@node2

5.4 Mds3节点(osd1服务器)

mkdir -p /var/lib/ceph/mds/ceph-osd1
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-osd1/keyring --gen-key -n mds.osd1

ceph auth add mds.osd1 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-osd1/keyring

chown -R ceph:ceph /var/lib/ceph/mds/ceph-osd1
systemctl start ceph-mds@osd1 
systemctl enable ceph-mds@osd1

5.5 Mds4节点(osd2服务器)

mkdir -p /var/lib/ceph/mds/ceph-osd2 
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-osd2/keyring --gen-key -n mds.osd2 

ceph auth add mds.osd2 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-osd2/keyring

chown -R ceph:ceph /var/lib/ceph/mds/ceph-osd2
systemctl start ceph-mds@osd2 
systemctl enable ceph-mds@osd2