Ceph-Docker部署指南

Ceph-Docker部署指南

2023年7月26日发(作者:)

Ceph-Docker部署指南Ceph-Docker 部署指南USTC OSH-2021-x-DisGraFS⼩组 HurryPeng说明操作顺序本指南的顺序和原⽂不同,先安装Docker和脚本。这是因为除了⽹络环境之外,每台节点上所需要的环境是⼏乎相同的。可以先在⼀台虚拟机上安装完,再使⽤虚拟机克隆功能,完成后再分别配置⽹络,这样就能避免重复操作。直到组⽹之前,所有内容均在⼀台虚拟机上操作即可。但是,此处涉及到部分与主机名、IP相关的参数,需要预先设计好,如下介绍。环境三台VMWare Ubuntu虚拟机(),Docker version 20.10.2,通过VMWare的NAT组⽹。主机名node0node1node2IP192.168.92.200192.168.92.201192.168.92.202功能mon, osd, mgr, mdsmon, osd, mgr, mdsmon, osd, mgr, mds仅供规划,现在可以先不⽤组⽹,后续会介绍组⽹步骤。Docker环境配置本节所有内容均在⼀台虚拟机上操作即可。创建Ceph⽬录在宿主机上创建Ceph⽬录与容器建⽴映射,便于直接操纵管理Ceph配置⽂件,依次在三台节点上创建/usr/local/ceph/{admin,data,etc,lib, logs}⽬录:sudo mkdir -p /usr/local/ceph/{admin,data,etc,lib,logs}安装Dockersudo apt updatesudo apt install dockersudo apt install 启动Docker:sudo systemctl start docker设置开机⾃启动:sudo systemctl enable docker配置Docker源。这⼀步⾮常重要,默认Docker源⾮常慢,即使挂了梯⼦也很容易下载失败,所以⼀定要配置加速源。通过修改来配置:sudo mkdir /etc/dockersudo vim /etc/docker/在该⽂件中写⼊以下内容:{ "registry-mirrors":

[ "", "" ]}配置后,需要重启服务:sudo systemctl daemon-reloadsudo systemctl restart dockersudo systemctl enable dockerCeph环境配置本节所有内容均在⼀台虚拟机上操作即可。拉取Ceph镜像配置好Docker后,这⼀步应该执⾏得⽐较快。如果频频失败,⼤概率是⽹络问题,需要重新配置加速源。docker pull ceph/daemon:latest-nautilus编写启动脚本以下的每⼀个脚本对应启动Ceph的⼀个进程。因为虚拟机后续会克隆,最后每台虚拟机都会拥有这些脚本,所以它们可以任意放在某个⽂件夹下,本次放在了~/ceph/下。对于脚本的内容,不需要每项都了解,此处只介绍⽐较重要的内容,详细介绍请参考原⽂。start_#!/bin/bashdocker run -d --net=host --name=mon -v /etc/localtime:/etc/localtime -v /usr/local/ceph/etc:/etc/ceph -v /usr/local/ceph/lib:/var/lib/ceph -v /usr/local/ceph/logs:/var/log/ceph -e MON_IP=192.168.92.200,192.168.92.201,192.168.92.202 -e CEPH_PUBLIC_NETWORK=192.168.92.0/24 ceph/daemon:latest-nautilus mon注意,原⽂中的这段脚本第⼀⾏缺了⼀个#。这个脚本是为了启动监视器,监视器的作⽤是维护整个Ceph集群的全局状态。⼀个集群⾄少要有⼀个监视器,最好要有奇数个监视器。⽅便当⼀个监视器挂了之后可以选举出其他可⽤的监视器。脚本中需要注意MON_IP⼀项,这⼀项指定了需要作为monitor的所有节点的IP。虽然我们现在还没有组⽹,但是也要先把规划的IP填上。这些IP要与下⾯CEPH_PUBLIC_NETWORK的⽹段⼀致。start_#!/bin/bashdocker run -d --name=osd --net=host --restart=always --privileged=true --pid=host -v /etc/localtime:/etc/localtime -v /usr/local/ceph/etc:/etc/ceph -v /usr/local/ceph/lib:/var/lib/ceph -v /usr/local/ceph/logs:/var/log/ceph -v /usr/local/ceph/data/osd:/var/lib/ceph/osd ceph/daemon:latest-nautilus osd_directory

start_#!/bin/bashdocker run -d --net=host --name=mgr -v /etc/localtime:/etc/localtime -v /usr/local/ceph/etc:/etc/ceph -v /usr/local/ceph/lib:/var/lib/ceph -v /usr/local/ceph/logs:/var/log/ceph ceph/daemon:latest-nautilus mgrstart_#!/bin/bashdocker run -d --net=host --name=mds --privileged=true -v /etc/localtime:/etc/localtime -v /usr/local/ceph/etc:/etc/ceph -v /usr/local/ceph/lib:/var/lib/ceph -v /usr/local/ceph/logs:/var/log/ceph -e CEPHFS_CREATE=0 -e CEPHFS_METADATA_POOL_PG=512 -e CEPHFS_DATA_POOL_PG=512 ceph/daemon:latest-nautilus mds创建OSD磁盘OSD服务是对象存储守护进程,负责把对象存储到本地⽂件系统,必须要有⼀块独⽴的磁盘作为存储。考虑到每台节点最后都可能需要充当osd的⾓⾊,这⾥在克隆前先把磁盘创建好。如果没有独⽴磁盘,我们可以在Linux下⾯创建⼀个虚拟磁盘进⾏挂载,步骤如下:初始化10G的镜像⽂件:sudo mkdir -p /usr/local/ceph-disksudo dd if=/dev/zero of=/usr/local/ceph-disk/ceph-disk-01 bs=1G count=10将镜像⽂件虚拟成块设备:sudo losetup -f /usr/local/ceph-disk/ceph-disk-01使⽤sudo fdisk -l查询块设备,确定上⼀步将镜像⽂件映射到了哪个设备。在本⽂使⽤的系统中,第⼀次操作⼀般会映射到loop6。格式化:sudo -f /dev/loop6上⼀步中的loop6需要替换成之前查到的设备。挂载⽂件系统,将loop6磁盘挂载到/usr/local/ceph/data/osd/⽬录下。如果挂载点不存在,则需要新建。挂载点不空,则需要清空。sudo mkdir /usr/local/ceph/data/osd/sudo mount /dev/loop6 /usr/local/ceph/data/osd/上⼀步中的loop6同样需要替换成之前查到的设备。⽹络配置现在,你有了三台节点,接下来需要对它们进⾏⽹络配置。由于刚克隆好的机器完全⼀样,同时开机可能会造成IP地址冲突等问题,这⾥建议每次只操作⼀台机器。环境三台VMWare Ubuntu虚拟机(),Docker version 20.10.2,通过VMWare的NAT组⽹。主机名node0node1node2IP192.168.92.200192.168.92.201192.168.92.202功能mon, osd, mgrmon, osd, mgrmon, osd, mgr防⽕墙部署前先关闭防⽕墙相关设置。systemctl stop firewalldsystemctl disable firewalld关闭SELinux。这个版本的Ubuntu上没有预装SELinux,可以不⽤操作,但是依然把步骤保留如下:sed -i 's/enforcing/disabled/' /etc/selinux/configsetenforce 0主机设置分别在三台客户端上配置⾃⼰的主机名,重启⽣效。# 在node0上hostnamectl set-hostname node0# 在node1上hostnamectl set-hostname node1# 在node2上hostnamectl set-hostname node2还需要在每个节点上设置别⼈的主机名。将下列内容加⼊到/etc/hosts中(需要sudo):192.168.92.200 node0192.168.92.201 node1192.168.92.202 node2SSH免密登录在主节点node0配置免密登录到node1和node2,下⾯命令在主节点node0上执⾏即可,不需要执⾏三次。ssh-keygenssh-copy-id node1ssh-copy-id node2Ceph启动启动MON⾸先在主节点node0上执⾏start_脚本,启动后通过sudo docker ps -a查看镜像是否创建成功,通过sudo docker exec mon ceph -s检查Ceph状态。启动成功之后会在/usr/local/ceph/⽣成配置数据。在其他节点启动mon之前,需要先将配置数据原样拷贝⾄每个节点。理想情况下,执⾏下⾯的命令:sudo scp -r /usr/local/ceph 你的⽤户名@node1:/usr/local/sudo scp -r /usr/local/ceph 你的⽤户名@node2:/usr/local/原⽂是使⽤CentOS操作的,默认⽤户是root,这样就可以成功了。但是在Ubuntu下,root不是⼀个⽇常操作的⽤户,⽽使⽤⾃⼰的⽤户来执⾏上⾯的命令会出现权限问题。具体⽽⾔,⽆法直接scp⾄node1和node2的/usr/local/⽬录。这时可以采取⼀个曲线救国的⽅式,先将node0的/usr/local/cephscp⾄node1的⼀个⾮关键⽬录,⽐如~/temp/,再操作node1将其移动⾄/usr/local/:# 在node0上sudo scp -r /usr/local/ceph 你的⽤户名@node1:~/temp/# 在node1上sudo mv ~/temp/ceph/* /usr/local/ceph在node2上也重复这个步骤。之后,在node1和node2上也执⾏start_脚本来启动mon并加⼊已有的集群。启动完成后,可以在任意⼀个节点上通过sudo dockerexec mon ceph -s检查Ceph状态。启动OSD在执⾏start_脚本之前,⾸先需要在mon节点⽣成osd的密钥信息,不然直接启动会报错。命令如下:sudo docker exec -it mon ceph auth get rap-osd -o /var/lib/ceph/bootstrap-osd/g接着在每个节点执⾏start_即可。启动MGR在每个节点执⾏start_即可。启动MDS在每个节点执⾏start_即可。全部启动完成后,在任意节点上执⾏sudo docker exec mon ceph -s查看集群状态,应该看到类似下⾯的信息: cluster: id: 6d8eb26d-xxxx-xxxx-xxxx-d2b241d7edbd health: HEALTH_WARN mons are allowing insecure global_id reclaim services: mon: 3 daemons, quorum node0,node1,node2 (age 116m) mgr: node0(active, since 103m), standbys: node2, node1 mds: 3 up:standby osd: 3 osds: 3 up (since 103m), 3 in (since 103m)下⽅的data相关信息,由于没有创建pool,所以全部为0。CephFS部署下列步骤在node0执⾏即可。创建Data Poolsudo docker exec osd ceph osd pool create cephfs_data 128 128创建Metadata Pooldocker exec osd ceph osd pool create cephfs_metadata 64 64创建CephFSdocker exec osd ceph fs new cephfs cephfs_metadata cephfs_data查看FS信息sudo docker exec osd ceph fs ls⾄此,搭建完成。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690378487a340548.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信