100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Ceph部署 基本使用和与OpenStack的集成

Ceph部署 基本使用和与OpenStack的集成

时间:2019-06-24 11:12:34

相关推荐

Ceph部署 基本使用和与OpenStack的集成

本文并非关于Ceph的系统介绍,没有对Ceph原理等知识的介绍,基本都是操作命令。内容参考自Ceph官方文档,以及《Ceph Cookbook》。

本文内容在CentOS7上进行过几次成功的部署,没坑,所部署的Ceph版本为nautilus,部署工具为ceph-deploy

0 准备工作

0.1 安装ceph-deploy

以下方法二选一。

0.1.1 直接安装ceph-deploy

可以到国内的源中查找rpm包直接安装,比如阿里云:

rpm -Uvh /ceph/rpm-nautilus/el7/noarch/ceph-deploy-2.0.1-0.noarch.rpm yum install -y epel-release python-setuptools

0.1.2 基于repo来安装

# 命令来自官方文档sudo yum install -y yum-utils && sudo yum-config-manager --add-repo /pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/*

创建一个软件库配置文件。

sudo vim /etc/yum.repos.d/ceph.repo

内容如下:

[ceph-noarch]name=Ceph noarch packagesbaseurl=/ceph/rpm-nautilus/el7/noarchenabled=1gpgcheck=1priority=1type=rpm-mdgpgkey=/ceph/keys/release.asc

ceph-deploy是在noarch下的,所以先添加这个即可。然后就可以安装ceph-deploy了。

sudo yum install ceph-deploy python-setuptools

0.2 Ceph节点配置

0.2.1 安装chrony

sudo yum install -y chronymv /etc/chrony.conf /etc/chrony.conf.bakcat > /etc/chrony.conf <<EOFserver iburststratumweight 0driftfile /var/lib/chrony/driftrtcsyncmakestep 10 3bindcmdaddress 127.0.0.1bindcmdaddress ::1keyfile /etc/chrony.keyscommandkey 1generatecommandkeylogchange 0.5logdir /var/log/chronyEOFsystemctl enable chronydsystemctl restart chronyd

0.2.2 创建Ceph用户(可选)

在各 Ceph 节点创建新用户。

ssh user@ceph-serversudo useradd -d /home/{username} -m {username}sudo passwd {username}

确保各 Ceph 节点上新创建的用户都有 sudo 权限。

echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}sudo chmod 0440 /etc/sudoers.d/{username}

0.2.3 SSH配置

安装SSH服务器:

sudo yum install openssh-server

配置ceph-deploy到ceph各节点的SSH免密登录:

# 生成密钥对ssh-kengen# 配置免密登录ssh-copy-id {username}@node1ssh-copy-id {username}@node2ssh-copy-id {username}@node3

如果使用非root用户进行部署,那么推荐修改~/.ssh/config文件,

Host node1Hostname node1User {username}Host node2Hostname node2User {username}Host node3Hostname node3User {username}

0.2.4 开放端口

MON默认使用33006789端口,OSD默认使用6800-7300端口,RGW使用7480端口。

sudo firewall-cmd --zone=public --add-port=3300/tcp --permanentsudo firewall-cmd --zone=public --add-port=6789/tcp --permanentsudo firewall-cmd --zone=public --add-port=7480/tcp --permanentsudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent

0.2.5 关闭SELINUX

sudo setenforce 0

要使 SELinux 配置永久生效(如果它的确是问题根源),需修改其配置文件/etc/selinux/config

1 部署Ceph存储集群

先在管理节点上创建一个目录(非root用户可以选择其他目录),用于保存 ceph-deploy 生成的配置文件和密钥对。

mkdir /etc/cephcd /etc/ceph

ceph-deploy 会把有些文件输出到当前目录,最好在此目录下执行 ceph-deploy 。

1.0 重新部署

# 卸载Cephceph-deploy purge {ceph-node} [{ceph-node}]cd# 清掉数据ceph-deploy purgedata {ceph-node} [{ceph-node}]# 删除keyceph-deploy forgetkeys# 删除所有ceph-deploy产生的文件rm ceph.*# 在有OSD的节点删除ceph创建的LVMlvremove -f $(lvdisplay | grep "/dev/ceph" | awk '{print $3}')vgremove -f $(vgscan | grep ceph | awk '{print $4}' | tr -d \")

1.1 创建集群

1.1.1 初始化一个集群

在管理节点上,进入刚创建的放置配置文件的目录,用 ceph-deploy 执行如下步骤。

ceph-deploy new {initial-monitor-node(s)}# 例如(多个节点用空格隔开):# ceph-deploy new node1

在当前目录下用lscat检查ceph-deploy的输出,应该有一个 Ceph 配置文件、一个 monitor 密钥环和一个日志文件。

1.1.2 网络配置

如果有多个网卡,需要在[global]中设置public network

public network = {ip-address}/{prefix}cluster network = {ip-address}/{prefix}# 例如# public network = 10.1.2.0/24# cluster network = 10.2.2.0/24

1.1.3 安装Ceph包:

# 使用阿里云的源export CEPH_DEPLOY_REPO_URL=/ceph/rpm-nautilus/el7export CEPH_DEPLOY_GPG_URL=/ceph/keys/release.asc# 安装ceph-deploy install {ceph-node} [{ceph-node} ...]# 例如:# ceph-deploy install admin-node node1 node2 node3

ceph-deploy 将在各节点安装 Ceph 。

1.1.4 部署初始MON节点

配置初始 monitor(s)、并收集所有密钥:

ceph-deploy mon create-initial

完成上述操作后,当前目录里应该会出现这些密钥环:

ceph.client.admin.keyringceph.bootstrap-mgr.keyringceph.bootstrap-osd.keyringceph.bootstrap-mds.keyringceph.bootstrap-rgw.keyring

1.1.5 复制配置文件到其他节点

复制配置文件(ceph.conf)和admin的key(ceph.client.admin.keyring)到其他节点,这样在相应的节点上就可以无需指定MON地址和keyring来执行ceph命令了。

ceph-deploy admin {ceph-node(s)}# 例如# ceph-deploy admin node1 node2 node3

1.1.6 部署一个manager daemon

luminous+的版本需执行:

ceph-deploy mgr create node1

1.1.7 添加OSD

添加前确保要使用的磁盘设备上没有重要数据,并且没有LVM虚拟卷和卷组。

ceph-deploy osd create --data {data-disk}# 例如# ceph-deploy osd create --data /dev/sdb node1

nautilus版本默认使用bluestore,早期版本一般使用filestore。

两种不同的文件系统在使用SSD做journal的时候是不同的方式,具体可以参考:如何ssd作为ceph-osd的日志盘使用。

1.1.8 查看健康状况

ceph -s ceph -w # 可以持续查看健康变化情况

1.2 扩展集群

1.2.1 添加MON节点

一个集群中至少要有一个MON节点和一个MGR节点。

多个MON节点基于Paxos投票机制工作,因此最好有2N+1个MON节点,以避免单点故障。

ceph-deploy mon add {ceph-node}# 例如:# ceph-deploy mon add node2

1.2.2 添加MGR节点

多个Manager节点以active/standby方式工作,若主节点宕机,备节点会接管。

ceph-deploy mgr create node2 node3

如果要添加控制面板功能:

# 安装 ceph-mgr-dashboard。注意,每个mgr节点都需要安装yum install ceph-mgr-dashboard -y# 启用 dashboardceph mgr module enable dashboard# 创建自签名证书ceph dashboard create-self-signed-cert# 创建用户ceph dashboard ac-user-create <user> <password> administrator# 防火墙开放8443端口firewall-cmd --zone=public --add-port=8443/tcp --permanentfirewall-cmd --reload

如果一段时间后发现dashboard无法访问,这样处理(暂时还没找到更好办法)是有效果的:

ceph mgr module disable dashboardceph config-key del mgr/dashboard/$name/server_addrceph config-key del mgr/dashboard/$name/server_portceph config-key del mgr/dashboard/server_addrceph config-key del mgr/dashboard/server_portceph mgr module enable dashboardsystemctl restart ceph-mgr.target

1.2.3 添加RGW节点

Ceph对象存储网关的使用需要RGW节点。

ceph-deploy rgw create {gateway-node}

默认情况下,RGW监听7480端口,其他端口可以这样配置:

[client]rgw frontends = civetweb port=80

1.3 存储/读取对象数据

要在Ceph存储集群中存储对象数据,需要:

设置对象名称指定一个pool

ceph osd map {poolname} {object-name}

Ceph客户端会取得最新的集群map,并用CRUSH算法计算出如何将对象映射到placement group,然后计算出该placement group在哪个OSD上。

一些命令示例

# 创建一个对象(文件)echo {Test-data} > /tmp/testfile.txt# 创建存储池ceph osd pool create mypool 512# 存储文件# rados put {object-name} {file-path} --pool={pool-name}rados put testfile /tmp/testfile.txt --pool=mypool# 查看对象文件rados -p mytest ls# 下载对象文件# rados get {object-name} {file-path} --pool={pool-name}rados get testfile /tmp/testfile1.txt --pool=mypool# 查看对象文件位置# ceph osd map {pool-name} {object-name}ceph osd map mypool testfile# 删除对象rados rm testfile --pool=mypool# 删除存储池ceph osd pool rm mypool

2 块设备服务

2.1 基本操作

0.创建块设备存储池

# 在admin节点,使用`ceph`命令来创建一个pool(`rbd`)ceph osd pool create rbd 512# 在admin节点,使用`rbd`命令来初始化poolrbd pool init rbd

具体pg_num应该如何确定,可以参考这个计算网站。

1.在ceph-client节点上,创建一个块设备镜像。

# rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]rbd create rbd1 --size 4096 --image-feature layering -m 192.168.1.102 -k /etc/ceph/ceph.client.admin.keyring -p rbd

2.在ceph-client节点上,映射到一个块设备。

# sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]rbd map rbd0 --name client.admin -m 192.168.1.102 -k /etc/ceph/ceph.client.admin.keyring -p rbd

如果上一条命令报如下错误:

modinfo: ERROR: Module rbd not found.modprobe: FATAL: Module rbd not found.rbd: failed to load rbd kernel module (1)

则需升级kernel。

3.在块设备上创建文件系统。

# sudo mkfs.ext4 -m0 /dev/rbd/{pool-name}/foosudo mkfs.ext4 -m0 /dev/rbd/rbd/rbd0(/dev/rbd0)

4.挂载文件系统。

sudo mkdir /mnt/ceph-block-devicesudo mount /dev/rbd0 /mnt/ceph-block-devicecd /mnt/ceph-block-device

2.2rbd命令

2.2.1 创建块设备

# 创建块设备(单位MB)rbd create rbd0 --size 10240 --name client.rbd# 查看块设备rbd ls --name client.rbdrbd ls -p rbd --name client.rbdrbd info --image rbd/rbd0

2.2.2 映射块设备

# 默认存储池是rbd,否则需要指定 -p {pool_name}rbd map --image rbd/rbd0 --name client.rbdrbd showmapped --name client.rbd# 挂载到文件系统mkfs.xfs /dev/rbd0mkdir /mnt/rbd0mount /dev/rbd0 /mnt/rbd0# 取消映射umount /mnt/rbd0rbd unmap --image rbd/rbd0

挂载需要内核支持,如果在mount的时候提示没有rbd模块(具体啥错误不记得了),可以执行

modprobe rbd,然后,lsmod | grep rbd看看是否已经有该模块了。

如果依然没有,可能需要升级内核:yum update kernel(这篇文章发出来的时候,CentOS7最新的内核已经有rbd模块了)。

2.2.3 调整RBD大小

# 调整大小rbd resize --image rbd/rbd0 --size 20480 --name client.rbdxfs_growfs /dev/rbd0

2.2.4 快照

rbd snap create rbd/rbd0@snapshot1 --name client.rbd# rollback时需要先unmap RBDrbd snap rollback rbd/rbd0@snapshot1 --name client.rbdrbd snap ls rbd/rbd0 --name client.rbdrbd snap rm rbd/rbd0@snapshot1 --name client.rbd# 删除所有快照rbd snap purge rbd/rbd0 --name client.rbd

2.2.5 克隆

# 创建一个快照用于克隆rbd snap create rbd/rbd1@snapshot_for_cloning# 克隆前需要先保护起来,以防被删除rbd snap protect rbd/rbd1@snapshot_for_cloning# 克隆rbd clone rbd/rbd1@snapshot_for_cloning rbd/rbd1_clone# 查看信息,发现其parent属性指向快照rbd info rbd1_clone# 可以将父镜像合并到克隆的镜像,这样克隆的镜像就独立了rbd flatten rbd/rbd1_clone# 查看信息,发现parent属性清空rbd info rbd1_clone# 这时可以取消保护了rbd snap unprotect rbd/rbd1@snapshot_for_cloning# 删除快照rbd snap rm rbd/rbd1@snapshot_for_cloning

3 CephFS文件系统

3.1 前提

配置CephFS前,需要先配置好存储集群,并且处于active + clean状态。

3.2 部署METADATA服务

在部署节点执行如下命令:

ceph-deploy mds create {ceph-node}

3.3 创建一个文件系统

ceph osd pool create cephfs_data 32ceph osd pool create cephfs_meta 32# ceph fs new <CephFS名称> <元数据存储池> <文件数据存储池>ceph fs new mycephfs cephfs_meta cephfs_data

建议:存储池可以命名为..,这样上边的pool可以命名为cephfs.mycehfs.data和cephfs.mycehfs.meta。

以上两个存储池分别用来保存文件的实际数据和元数据,可以放在不同的存储介质上的,比如元数据存储池可以放在SSD上,相关操作可以参考同一个ceph集群分别创建ssd和hdd池。

3.4 挂载文件系统

3.4.1 使用内核驱动

挂载命令如下:

sudo mount -t ceph :{path-to-mounted} {mount-point} -o name={user-name}sudo mount -t ceph :/ /mnt/mycephfs -o name=admin # usable version

完整的命令:sudo mount -t ceph {ip-address-of-MON}:{port-number-of-MON}:{path-to-be-mounted} -o name={user-name},secret={secret-key} {mount-point}

{path-to-be-mounted}是CephFS内的路径,{mount-point}是客户端要挂载的路径,{user-name}是具备挂载CephFS权限的CephX用户。

3.4.2 使用FUSE

使用FUSE(Filesystem in User Space)来挂载CephFS:

sudo ceph-fuse /mnt/mycephfs

如果要指定挂载目录可以使用-r

sudo ceph-fuse -r {path-to-be-mounted} /mnt/mycephfs

4 对象存储

4.1 安装Ceph对象网关程序

ceph-deploy install --rgw <client-node> [<client-node> ...]

4.2 创建Ceph对象存储实例

ceph-deploy rgw create <client-node>

4.3 配置Ceph对象存储实例

1.配置端口号

[client.rgw.client-node]rgw_frontends = "civetweb port=80"

2.重启服务

sudo systemctl restart ceph-radosgw.service

3.开放端口

sudo firewall-cmd --list-allsudo firewall-cmd --zone=public --add-port 80/tcp --permanentsudo firewall-cmd --reload

4.查看API

curl http://<client-node>:80

API响应如下:

<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="/doc/-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>

5 用户与权限

5.1 配置客户端与用户

1.在ceph-deploy执行节点执行如下命令:

ceph-deploy install client-node

2.将配置文件复制到client-node节点:

ceph-deploy config push client-node

3.一般不建议直接把client.admin复制到客户端节点,可以创建用户:

# 创建用户client.adminceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool =rbd'

4.将密钥添加到client-node节点:

ceph auth get-or-create client.rbd | ssh root@client-node tee /etc/ceph/ceph.client.rbd.keyring

5.使用密钥的时候需要指定用户名

ceph -s --name client.rbd

6 Ceph与OpenStack的集成

6.1 将OpenStack配置为Ceph客户端

1.首先配置ceph-deploy节点到OpenStack节点(os-node)的SSH免密登录。

2.在os-node上安装Ceph。

ceph-deploy install os-node

3.将ceph配置文件ceph.conf推送到os-node节点。

ceph-deploy config push os-node

4.创建Ceph存储池。

ceph osd pool create images 128ceph osd pool create volumes 128ceph osd pool create vms 128

5.为cinderglance创建新用户。

ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'

6.为os-node添加keyring。

ceph auth get-or-create client.glance | ssh os-node tee /etc/ceph/ceph.client.glance.keyringssh os-node chown glance:glance ceph.client.glance.keyringceph auth get-or-create client.cinder | ssh os-node tee /etc/ceph/ceph.client.cinder.keyringssh os-node chown cinder:cinder ceph.client.cinder.keyring

7.当从cinder挂载或卸载设备时,libvirt进程需要有访问Ceph集群的权限。

# 在ceph节点创建一个临时的密钥副本,并传至OpenStack节点ceph auth get-key client.cinder | ssh os-node tee /etc/ceph/temp.client.cinder.key# 在OpenStack节点创建密钥# ① 先生成uuiduuidgen# ② 用输出的uuid编写密钥文件cat > secret.xml <<EOF<secret ephemeral='no' private='no'><uuid>{刚刚生成的uuid}</uuid><usage type='ceph'><name>client.cinder secret</name></usage></secret>EOF# ③ 定义密钥文件virsh secret-define --file secret.xml# ④ 设置好密钥值virsh secret-set-value --secret {刚刚生成的uuid} --base64 $(cat temp.client.cinder.key)virsh secret-list

6.2 配置Ceph为Glance后端存储

在OpenStack节点,编辑/etc/glance/glance-api.conf

default_store=rbdshow_image_direct_url=True...[glance_store]stores=rbdrbd_store_ceph_conf=/etc/ceph/ceph.confrbd_store_user=glancerbd_store_pool=imagesrbd_store_chunk_size=8

重新启动glance-api服务。

systemctl restart openstack-glance-api

测试一下:

glance image-list# 下载cirros镜像,并上传至glanceglance image-create --name cirros_0.5 --is-public=true --disk-format=qcow2 --container-format=bare < cirros-0.5.1-x86_64-disk.imgglance image-list# 在ceph中验证rados -p images ls --name client.glance --keyring /etc/ceph/ceph.client.glance.keyring | grep -i id

6.3 配置Ceph为Cinder后端存储

配置/etc/cinder/cincer.conf文件。其他包括:

glance_api_version=2rbd_pool=volumesrbd_user=cinderrbd_ceph_conf=/etc/ceph/ceph.confrbd_flatten_volume_from_snapshot=falserbd_secret_uuid=1f4e1d20-3c7f-4809-a2dd-dd88efa36c03rbd_max_clone_depth=5rbd_store_chunk_size=4rados_connect_timeout=-1volume_driver=cinder.volume.drivers.rbd.RBDDriver

重新启动Cinder服务:

systemctl restart openstack-cinder-volume

然后测试一下配置是否生效:

cinder list# 创建一个卷cinder create --display-name ceph-volume01 --display-description "Cinder volume on CEPH storage" 2# 查看cinder和radoscinder listrados -p volumes --name client.cinder --keyring ceph-client.cinder.keyring ls | grep -i id

6.4 挂载Ceph RBD到Nova上

编辑/etc/nova/nova.conf,找到nova.virt.libvirt.volume部分,添加以下代码行:

rbd_user=cinderrbd_secret_uuid={secret uuid}

重新启动nova-compute:

systemctl restart openstack-nova-compute

测试一下效果:

nova listcinder list# 将以上两个命令查到的虚拟机id和卷id用于以下命令:cinder volume-attach {vm-id} {volume-id}# 查看挂载效果cinder list

6.5 Nova基于Ceph RBD启动实例

编辑/etc/nova/nova.conf文件,在[libvirt]部分编辑如下参数:

inject_partition=-2images_type=rbdimages_rbd_pool=vmsimages_rbd_ceph_conf=/etc/ceph/ceph.confrbd_user=cinderrbd_secret_uuid=da6d95af-f8ba-4beb-8d65-60a916160f88

重启nova-compute服务:

systemctl restart openstack-nova-compute

测试一下效果:

# 将QCOW格式的镜像转换为RAW格式qemu-img convert -f qcow2 -O raw cirros-0.5.1-x86_64-disk.img cirros-0.5.1-x86_64-disk.raw# 用RAW镜像创建Glance镜像glance image-create --name cirros_raw_image --is-public=true --disk-format=raw --container-format=bare < cirros-0.5.1-x86_64-disk.raw# 创建一个可引导的卷来测试从Ceph卷启动虚拟机cinder create --image-id 8d1623ab-c3e1-4c30-a4b0-d6ca7fae9bbb --display-name cirros-ceph-boot-volume 1# 列出Cinder卷,看是不是bootable的cinder list# 基于可引导的卷创建虚拟机实例nova boot --flavor 1 --block_device_mapping vda=6525f635-85ed-4754-877a-8b556c86334c::0 --image 8d1623ab-c3e1-4c30-a4b0-d6ca7fae9bbb vm2_on_ceph# 检查实例状态nova list

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。