本文旨在帮助使用ceph-deploy工具的人们快速完成集群搭建,后续给出了使用mdtest对Cephfs的元数据操作性能进行测试。
四节点搭建示例
环境介绍
name | IP |
---|---|
ca62* | 192.168.3.39 |
ca44 | 192.168.3.16 |
ca45 | 192.168.3.17 |
ca46 | 192.168.3.18 |
使用了Centos 7.6.1810的linux版本。 |
首先需要在ca62节点上建立ssh密钥,之后把公钥复制到其余节点的.ssh目录下的authorize_host文件中完成免密登陆配置。
Ceph集群搭建准备工作
首先需要更换yum源并安装epel源
1 |
|
接下来需要修改ceph源,这一步很重要,使用默认的ceph源会遇到各种奇怪的问题,这里选择了octopus发行版本,不建议下载太新的Ceph版本。
1 | cat > /etc/yum.repos.d/ceph.repo <<EOF |
在ca62节点上安装ceph-deploy
1 | #更新yum源 |
配置系统时间并设置时钟同步
1 | timedatectl set-timezone Asia/Shanghai |
完成以上操作,重启所有主机。
部署Ceph集群步骤
建立一个工作目录,用来保存ceph集群部署过程中生成的密钥等文件。
1 | mkdir ~/admin-node |
在所有的节点上安装ceph,这里不建议使用ceph-deploy中提供的install指令,会重新定义epel源和ceph源,可能会发生依赖错误以及网络超时等错误。
1 | #在所有的节点上执行该指令 |
开始创建一个ceph集群
1 | ceph-deploy new --public-network 192.168.3.0/24 ca62 |
执行完以上指令后会在当前目录下生成了ceph.conf,log文件,和ceph.mon.keyring认证管理密钥,注意到这里的ceph.conf可以配置ceph集群相关的参数,具体的参数以及含义可以通过官网进行查询。
接下来初始化mon节点
1 | ceph-deploy mon create-initial |
执行完上述指令可以执行ls指令查看当前目录下生成了很多的模块密钥,这些密钥保证了集群节点之间的认证,接下来需要把这些密钥以及ceph.conf配置文件拷贝到其余节点上
1 | ceph-deploy --overwrite-conf admin ca62 ca44 ca45 ca46 |
这里的overwrite-conf参数帮助我们以后在修改了ceph.conf配置文件后能够把集群节点的配置文件更新覆盖。
此时可以查看ceph集群的状态:
1 | ceph -s |
可以看到此时的ceph集群状态是警告形式,需要关闭不安全模式
1 | ceph config set mon auth_allow_insecure_global_id_reclaim false |
之后就可以看到ceph集群的健康状态变成了ok,之后开始添加osd节点,首先需要确定在每个ceph节点上都有一块裸磁盘用来作为osd盘,一定要先解除磁盘挂载并格式化,再把磁盘作为osd添加进入集群。
name | osd磁盘 |
---|---|
ca44 | /dev/sdb |
ca45 | /dev/sdb |
ca46 | /dev/sdb |
上述介绍了三个数据存储节点的空闲磁盘的使用情况,首先格式化每个磁盘
1 | mkfs.ext4 /dev/sdb |
之后在主节点中使用ceph-deploy工具创建osd节点
1 | ceph-deploy osd create ca44 --data /dev/sdb |
之后可以执行ceph -s指令查看此时的ceph集群状态,可以看到3个osd节点已经成功上线,但是系统会提示缺少mgr提供的守护进程,这个时候选在主节点创建一个mgr模块
1 | ceph-deploy mgr create ca62 |
Cephfs文件系统
RBD块存储不支持多个主机共享一块磁盘,这个时候就需要添加cephfs文件系统。首先在每个节点上建立mds
1 | ceph-deploy mds create ca62 ca44 ca45 ca46 |
接下来创建两个存储池,一个用来保存数据,一个用来保存元数据
1 | ceph osd pool create cephfs_data 64 64 |
接下来创建cephfs文件系统,把之前的两个数据池连接起来
1 | ceph fs new cephfs-yyx cephfs_metadata cephfs_data |
执行完成后查看集群状态可以看到cephfs文件系统成功创建,接下来考虑挂载cephfs,一共有两种挂载方式,这里首先介绍在内核中挂载
1 | #查看client的密钥 |
这里既没有选择fuse挂载,也没有使用内核挂载的方式,而是使用了mdtest中的cephfs中的测试工具,具体操作接下来进行介绍
使用ior中的mdtest对cephfs的元数据操作进行性能测试
- MDTest 使用说明
mdtest 是一个简单的 I/O 基准测试工具,现在是IOR 工具套件的一部分,用于向存储系统发出高度并发的元数据操作流。IOR目前支持HDFS,CephFS,RADOS,以及POSIX标准接口文件系统的测试。它旨在展示文件系统能够为包括 mkdir、stat、rmdir、creat、open、close 和 mv在内的元数据操作提供服务的峰值速率。
1 | yum install libcephfs-devel -y |
IOR目录:
doc
- 包含IOR所有文档。src
- 所有源码文件,及编译生成的库文件,二进制文件。编译完成后,使用mdtest –help可查看帮助信息。testing
- 测试用脚本。该目录包含所有测试脚本。test-lib.sh
脚本中配置了基本参数,如测试路径,输出路径,日志等级等,不需要修改。basic-tests.sh
和complex-tests.sh
为具体测试脚本。test_log
- 测试输出文件,包含所有测试结果。目录basic
保存basic-tests.sh
的测试结果,目录advanced
保存complex-tests.sh
测试结果。mpi_server.conf
,设置程序运行的所有节点。源程序中没有,我手动添加的文件。
目前只使用到IOR中的MDtest工具。
- Cephfs测试流程:
功能性测试:
src/mdtest -a CEPHFS --cephfs.user=xxx --cephfs.conf=xxx --cephfs.prefix=xxx
进行简单测试,验证正确性。可附加其他参数,参数具体含义可使用
src/mdtest --help
查看。需要填写的配置信息,
- cephfs.user ceph用户名 cephfs.conf;
- 配置文件路径(/etc/ceph/ceph.conf);
- cephfs.prefix:文件的统一前缀,不太清除具体含义。
本地多进程测试(注意要修改mpi_server.conf中的节点名称,这里先只使用ca62进行多进程测试)。进入
complex-tests.sh
,修改脚本为MDTEST 8 -a CEPHFS -n 100000 -b 200 -z 1 -x stonewall-md.log -u -L -R --cephfs.user=xxx --cephfs.conf=xxx --cephfs.prefix=xxx
`回到ior目录,运行脚本。运行后将启动8个进程,进行带宽测试。修改进程数,直到测试出吞吐率上限。参数具体含义可使用
src/mdtest --help
查看。分布式多进程测试。进入
mpi_server.conf
,配置节点名称。MDTest将在配置的节点上分配进程,进行分布式测试。
测试过程中可能会遇到的问题
创建osd的问题
在集群中添加新的osd时可能会遇到创建失败的情况,一般会有三种情况。
- 第一种是网络通信出现了问题,建议检查每个节点是否能够和主节点进行通信。
- 第二种情况比较复杂,会显示找不到设备。这种时候需要我们去每台机器上检查对应的磁盘情况,接触挂载后完成格式化才能使用。
- 第三种情况会显示创建失败,这种情况去每台机器上查看对应的磁盘使用情况 如果发现了有的磁盘以lvm的形式挂载在ceph目录下,需要彻底删除lvm设备
1
2
3
4#查看挂载情况
df -h
#查看磁盘使用情况
fdisk -l1
2ceph-volume lvm list
vgremove ${查询到的ceph块设备号}
通过以上的方法应该可以解决osd相关的问题。
快速重新搭建ceph(16节点)
有时可能会遇到集群故障等情况,可以选择重新搭建:
- 首先需要删除所有节点上安装的ceph,进入admin-node目录后:
1
2
3
4
5
6
7
8# 在每台机器上更新yum源
yum update
# 删除所有节点的ceph ceph-radosgw
ceph-deploy purge ca62 ca34 ca37 ca39 ca44 ca45 ca46 ca47 ca48 ca57 ca59 ca66 ca68 ca94 ca95 ca96
# 删除所有的ceph数据
ceph-deploy purgedata ca62 ca34 ca37 ca39 ca44 ca45 ca46 ca47 ca48 ca57 ca59 ca66 ca68 ca94 ca95 ca96
#删除所有key
ceph-deploy forgetkeys - 在每台机器上安装ceph:
1
2# 注意这里不要使用ceph-deploy的install指令进行安装,会修改ceph源
yum install ceph ceph-radosgw - 检查每台机器上的磁盘是否解除挂载了:
name IP user password disk ca62* 192.168.3.39 none ca34 192.168.3.194 /dev/sdb ca37 192.168.3.197 /dev/sdb /dev/sdc ca39 192.168.3.11 none ca44 192.168.3.16 /dev/sdb /dev/sdc ca45 192.168.3.17 /dev/sdb ca46 192.168.3.18 /dev/sdb /dev/sdc ca47 192.168.3.19 /dev/sdb ca48 192.168.3.20 /dev/sdb /dev/sdc ca57 192.168.3.34 /dev/sdb /dev/sdc ca59 192.168.3.36 /dev/sda ca66 192.168.3.43 /dev/sda /dev/sdb ca68 192.168.3.45 none ca94 192.168.3.94 /dev/sdb ca95 192.168.3.95 /dev/sdc ca96 192.168.3.96 none 1
2
3
4
5
6
7
8
9#查看lvm格式的磁盘
ceph-volume lvm list
#移除挂载点,具体参数通过上面一条命令获取一般是/dev后面的一串参数,如:
vgremove ceph-7c5449b9-9995-4cfa-b255-21e2a939b44b
#删除admin-node文件夹:
sudo rm -rf admin-node
#新建admin-node文件夹:
mkdir admin-node
cd admin-node- 重新部署集群
开始创建一个ceph集群:1
2
3
4
5
6
7ceph-deploy new --public-network 192.168.3.0/24 ca62
#添加允许ceph时间偏移
echo "mon clock drift allowed = 2" >> ceph.conf
echo "mon clock drift warn backoff = 30" >> ceph.conf
#修改mds参数
echo "mds_cache_memory_limit = 17179869184" >> ceph.conf
echo "mds_cache_trim_decay_rate = 10" >> ceph.conf - 接下来初始化mon节点
1
ceph-deploy mon create-initial
- 执行完上述指令可以执行ls指令查看当前目录下生成了很多的模块密钥,这些密钥保证了集群节点之间的认证,接下来需要把这些密钥以及ceph.conf配置文件拷贝到其余节点上 这里的overwrite-conf参数帮助我们以后在修改了ceph.conf配置文件后能够把集群节点的配置文件更新覆盖。
1
ceph-deploy --overwrite-conf admin ca62 ca34 ca37 ca39 ca44 ca45 ca46 ca47 ca48 ca57 ca59 ca66 ca68 ca94 ca95 ca96
此时可以查看ceph集群的状态:
1
ceph -s
可以看到此时的ceph集群状态是警告形式,需要关闭不安全模式
1
ceph config set mon auth_allow_insecure_global_id_reclaim false
之后就可以看到ceph集群的健康状态变成了ok,之后开始添加osd节点,首先需要确定在每个ceph节点上都有一块裸磁盘用来作为osd盘,一定要先解除磁盘挂载并格式化,再把磁盘作为osd添加进入集群。
7. 之后在主节点中使用ceph-deploy工具创建osd节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16ceph-deploy osd create ca34 --data /dev/sdb
ceph-deploy osd create ca37 --data /dev/sdb
ceph-deploy osd create ca37 --data /dev/sdc
ceph-deploy osd create ca44 --data /dev/sdb
ceph-deploy osd create ca44 --data /dev/sdc
ceph-deploy osd create ca45 --data /dev/sdb
ceph-deploy osd create ca46 --data /dev/sdb
ceph-deploy osd create ca46 --data /dev/sdc
ceph-deploy osd create ca47 --data /dev/sdb
ceph-deploy osd create ca48 --data /dev/sdb
ceph-deploy osd create ca48 --data /dev/sdc
ceph-deploy osd create ca57 --data /dev/sdb
ceph-deploy osd create ca57 --data /dev/sdc
ceph-deploy osd create ca59 --data /dev/sda
ceph-deploy osd create ca66 --data /dev/sda
ceph-deploy osd create ca66 --data /dev/sdb
8. 之后可以执行ceph -s指令查看此时的ceph集群状态,可以看到3个osd节点已经成功上线,但是系统会提示缺少mgr提供的守护进程,这个时候选在主节点创建一个mgr模块
1
ceph-deploy mgr create ca62 ca34 ca37
9. cephfs文件系统创建
RBD块存储不支持多个主机共享一块磁盘,这个时候就需要添加cephfs文件系统。首先在每个节点上建立mds
1
ceph-deploy mds create ca62 ca34 ca37 ca39 ca44 ca45 ca46 ca47 ca48 ca57 ca59 ca66 ca68 ca94 ca95 ca96
接下来创建两个存储池,一个用来保存数据,一个用来保存元数据
1
2ceph osd pool create cephfs_data 128 128
ceph osd pool create cephfs_metadata 128 128
接下来创建cephfs文件系统,把之前的两个数据池连接起来
1
2
3ceph fs new cephfs-yyx cephfs_metadata cephfs_data
ceph fs set cephfs-yyx max_mds 16
过一段时间所有的mds全部启动
10. 添加两个monitor
1
2ceph-deploy mon add ca34 --address 192.168.3.194
ceph-deploy mon add ca37 --address 192.168.3.197
执行ceph -s可以看到集群已就绪,报警的是备用mds不够,可以通过修改9中最红一条指令的参数来调整active mds的数量- 首先需要删除所有节点上安装的ceph,进入admin-node目录后:
对比测试
对比测试介绍
为了进行论文实验部分的对比,在查阅了相关文献后,选择了SC’21上面的Lunule作为mds部分的优化对比测试。
- Lunule组件简介:作者通过在mds模块中添加了多个模块进行mds子树分割算法的补充优化,很好的提升了mds的负载均衡。整个Lunule是基于特定版本的ceph-luminous开发的。大致的测试结果会在后文中进行介绍。
安装步骤
- 在github下载源码仓库,并完成编译,注意使用的gcc版本与作者推荐的保持一致gcc-4.8.5:可能会遇到需要安装依赖bzip2-devel包,直接使用yum源进行安装即可,但是仍旧会在编译的时候发生报错,具体原因是宏展开的时候同名宏发生冲突,具体的解决办法见链接,修改源玛后重新编译,成功。
1
2
3
4
5
6
7
8
9git clone https://github.com/mdbal-lunule/lunule.git
sudo yum install -y wget
wget ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/epel/7.2020-04-20/x86_64/Packages/p/python34-Cython-0.28.5-1.el7.x86_64.rpm
sudo yum install -y python34-Cython-0.28.5-1.el7.x86_64.rpm
./install-deps.sh
./do_cmake.sh
cd Lunule/build
make -j16
sudo make install -j16 - 修改安装的ceph版本
注意到这里首先对ceph需要进行换源,修改后的ceph.conf如下:这里替换成了阿里云上的ceph-luminous版本进行测试,原文推荐使用ceph-12.2.5版本,这里使用了ceph-12.2.13版本。下载完成后安装到mds模块中,修改ceph.conf参数:1
2
3
4
5
6
7
8[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这里使用mdtest进行测试,不同于文中作者进行的测试,我们测试了不同目录深度的情况。最终发现除了创建文件目录相比于原生ceph有一定提升外,其余操作的性能均发生大幅度的下降?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15mon clock drift allowed = 2
mon clock drift warn backoff = 30
mon clock drift allowed = 2
mon clock drift warn backoff = 30
mds reconnect timeout = 180
mds session timeout = 180
mds_cache_memory_limit = 17179869184
mds_cache_trim_decay_rate = 10
mon_pg_warn_min_per_osd = 0
#Lunule configuration
mds bal ifenable = 1
mds bal presetmax = 8000
mds bal ifthreshold = 0.075
client cache size = 0