1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 部署Ceph集群(块存储 文件系统存储 对象存储)

部署Ceph集群(块存储 文件系统存储 对象存储)

时间:2021-11-19 16:23:58

相关推荐

部署Ceph集群(块存储 文件系统存储 对象存储)

一前言

分布式文件系统(Distributed File System):文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于C/S模式

1,什么是Ceph?

Ceph:是一个 Linux PB 级分布式文件系统

特点:

具有高扩展,高可用,高性能的特点

可以提供对象存储,块存储,文件存储

可以提供PB级别的存储空间(PB->TB->GB)

帮助文档:/start/intro

中文文档:.cn/

Ceph核心组件:

OSD:存储设备(OSD越多性能越好)

Monitor:集群监控组件(取基数,如3,5,7)

MDS:存放文件系统的元数据(对象存储和块存储不需要该组件)

Client:ceph客户端

二搭建块存储

1,实验环境

虚拟机都是rhel7.4,真机centos7

虚拟机:4台

node1,node2,node3既是OSD,也是Mpnitor

真实机:(centos7)或者重新新建一台虚拟机代替真机也可以

镜像地址:/s/1Uo_7yEl4mTXTiS7N98Abfw

2,安装前准备

1)物理机为所有节点配置yum源服务器。

[root@room9pc01 ~]# yum -y install vsftpd

[root@room9pc01 ~]# mkdir /var/ftp/ceph

[root@room9pc01 ~]# mount -o loop \

rhcs2.0-rhosp9-1113-x86_64.iso /var/ftp/ceph#此光盘在网盘里

[root@room9pc01 ~]# systemctl restart vsftpd

2)修改所有节点都需要配置YUM源(这里仅以node1为例)。

[root@node1 ceph-cluster]# cat /etc/yum.repos.d/ceph.repo

[mon]

name=mon

baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON

gpgcheck=0

[osd]

name=osd

baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD

gpgcheck=0

[tools]

name=tools

baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools

gpgcheck=0

3)修改/etc/hosts并同步到所有主机。

警告:/etc/hosts解析的域名必须与本机主机名一致!!!!

[root@node1 ceph-cluster]# cat /etc/hosts

... ...

192.168.4.10 client

192.168.4.11 node1

192.168.4.12 node2

192.168.4.13 node3

警告:/etc/hosts解析的域名必须与本机主机名一致!!!!

[root@node1 ceph-cluster]# for i in 10 11 12 13

do

scp /etc/hosts 192.168.4.$i:/etc/

done

[root@node1 ceph-cluster]# for i in 10 11 12 13

do

scp /etc/yum.repos.d/ceph.repo 192.168.4.$i:/etc/yum.repos.d/

done

3)配置无密码连接(包括自己远程自己也不需要密码)。

[root@node1 ceph-cluster]# ssh-keygen -f /root/.ssh/id_rsa -N ''#生成密钥

[root@node1 ceph-cluster]# for i in 10 11 12 13#上传密钥到个个主机

do

ssh-copy-id 192.168.4.$i

done

3,配置NTP时间同步

1)真实物理机创建NTP服务器。

[root@room9pc01 ~]# yum -y install chrony

[root@room9pc01~]# cat /etc/chrony.conf

server 0.centos. iburst

allow 192.168.4.0/24

local stratum 10

[root@room9pc01 ~]# systemctl restart chronyd

[root@room9pc01 ~]# iptables -F#如果有防火墙规则,需要清空所有规则

2)其他所有节点与NTP服务器同步时间(以node1为例)。

[root@node1 ceph-cluster]# cat /etc/chrony.conf

#server 0.rhel. iburst

#server 1.rhel. iburst

#server 2.rhel. iburst

server 192.168.4.254 iburst

[root@node1 ceph-cluster]# systemctl restart chronyd

[root@node1 ceph-cluster]# systemctl enable chronyd

4,准备存储磁盘

直接打开虚拟机管理器添加磁盘,node1,node2,node3每台添加三个10G磁盘

5,部署软件

1)在node1安装部署工具,学习工具的语法格式。

[root@node1 ~]# yum -y install ceph-deploy

[root@node1 ~]# ceph-deploy --help#查看命令格式

2)创建目录

[root@node1 ~]# mkdir ceph-cluster

[root@node1 ~]# cd ceph-cluster/

6,部署Ceph集群

1)创建Ceph集群配置。

[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3

2)给所有节点安装软件包。

[root@node1 ceph-cluster]# ceph-deploy install node1 node2 node3

3)初始化所有节点的mon服务(主机名解析必须对)

[root@node1 ceph-cluster]# vim ceph.conf #文件最后追加以下内容

public_network = 192.168.4.0/24#避免会出现如下错误加上这一行

[root@node1 ceph-cluster]# ceph-deploy mon create-initial//拷贝配置文件,并启动mon服务

常见错误及解决方法(非必要操作,有错误可以参考):

如果提示如下错误信息:

[node1][ERROR ] admin_socket: exception getting command descriptions: [Error 2] No such file or directory

解决方案如下(在node1操作):

先检查自己的命令是否是在ceph-cluster目录下执行的!!!!如果时确认是在该目录下执行的create-initial命令,依然保存,可以使用如下方式修复。

[root@node1 ceph-cluster]# vim ceph.conf #文件最后追加以下内容

public_network = 192.168.4.0/24

修改后重新推送配置文件:

[root@node1 ceph-cluster]# ceph-deploy --overwrite-conf config push node1 node2 node3

7,创建OSD

1)准备磁盘分区(node1,node2,node3都要做)

[root@node1 ceph-cluster]# parted /dev/vdb mklabel gpt

[root@node1 ceph-cluster]# parted /dev/vdb mkpart primary 1M 50%

[root@node1 ceph-cluster]# parted /dev/vdb mkpart primary 50% 100%

[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb1#授权给ceph用户

[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb2

提示:重启后失效,要想永久有效,1,把命令写入/etc/rc.local文件中,并给文件赋予执行权限;2,用udev写入权限

//这两个分区用来做存储服务器的日志journal盘

2)初始化清空磁盘数据(仅node1操作即可)

[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdc node1:vdd

[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdc node2:vdd

[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdc node3:vdd

提示:如果已经初始化过了,需要重新清空磁盘数据,就要取(node1,node2,node3)卸载掉

3)创建OSD存储空间(仅node1操作即可)

[root@node1 ceph-cluster]# ceph-deploy osd create node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2

//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL日志,

//一个存储设备对应一个日志设备,日志需要SSD,不需要很大

[root@node1 ceph-cluster]# ceph-deploy osd create node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2

[root@node1 ceph-cluster]# ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2

4)常见错误(非必须操作)

使用osd create创建OSD存储空间时,如提示run 'gatherkeys',可以使用如下命令修复:

[root@node1 ceph-cluster]# ceph-deploy gatherkeys node1 node2 node3

8,验证测试

1) 查看集群状态

[root@node1 ceph-cluster]# ceph -s

cluster d3266b4f-5c8c-44f3-b11e-7a2cafd1f75b

health HEALTH_OK#出现ok就成功了,err就失败了,如果出现warning,执行 systemctl restart ceph*.service ceph*.target重启服务

monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}

election epoch 6, quorum 0,1,2 node1,node2,node3

osdmap e42: 6 osds: 6 up, 6 in

flags sortbitwise

pgmap v323: 64 pgs, 1 pools, 88496 kB data, 5147 objects

503 MB used, 119 GB / 119 GB avail

64 active+clean

2)常见错误(非必须操作)

如果查看状态包含如下信息:

health: HEALTH_WARN

clock skew detected on node2, node3…

clock skew表示时间不同步,解决办法:请先将所有主机的时间都使用NTP时间同步!!!

如果状态还是失败,可以尝试执行如下命令,重启ceph服务:

[root@node1 ceph-cluster]# systemctl restart ceph*.service ceph*.target

9,创建镜像

1)查看存储池。

[root@node1 ceph-cluster]# ceph osd lspools

0 rbd,

2)创建镜像、查看镜像

两种创建镜像(共享硬盘)方式

方式一(没有指明存储池默认rbd)

[root@node1 ceph-cluster]# rbd create demo-image --image-feature layering --size 10G

方式二(指明存储池rbd)

[root@node1 ceph-cluster]# rbd create rbd/image --image-feature layering --size 10G

[root@node1 ceph-cluster]# rbd list #rbd ls也可以查看镜像

demo-image

image

[root@node1 ceph-cluster]# rbd info demo-image#查看具体某个镜像信息

rbd image 'demo-image':

size 10240 MB in 2560 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.d3aa2ae8944a

format: 2

features: layering

10,动态调整镜像大小

1)缩小容量

[root@node1 ceph-cluster]# rbd resize --size 7G image --allow-shrink

[root@node1 ceph-cluster]# rbd info image

2)扩容容量

[root@node1 ceph-cluster]# rbd resize --size 15G image

[root@node1 ceph-cluster]# rbd info image

11,通过KRBD访问

1)集群内将镜像映射为本地磁盘

[root@node1 ceph-cluster]# rbd map demo-image#使用内核将镜像映射到块设备

/dev/rbd0

[root@node1 ceph-cluster]# lsblk

… …

rbd0 251:0 0 10G 0 disk #此处为加载识别的块设备

[root@node1 ceph-cluster]# mkfs.xfs /dev/rbd0 #格式化

[root@node1 ceph-cluster]# mount /dev/rbd0 /mnt#挂载使用

[root@node1 ceph-cluster]# df -h #查看当前挂载信息

2)客户端通过KRBD访问

#客户端需要安装ceph-common软件包

#拷贝配置文件(否则不知道集群在哪)

#拷贝连接密钥(否则无连接权限)

[root@client ~]# yum -y install ceph-common

[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/#从集群中下载配置文件

[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \

/etc/ceph/#从集群中下载密钥

[root@client ~]# rbd map image#使用内核将镜像映射到块设备

[root@client ~]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sr0 11:0 1 1024M 0 rom

vda 252:0 0 20G 0 disk

├─vda1 252:1 0 1G 0 part /boot

└─vda2 252:2 0 19G 0 part

├─rhel-root 253:0 0 17G 0 lvm /

└─rhel-swap 253:1 0 2G 0 lvm [SWAP]

rbd0 251:0 0 15G 0 disk #此处是使用的网络磁盘

[root@client ~]# rbd showmapped#查看使用的网络镜像(磁盘)信息

id pool image snap device

0 rbd image - /dev/rbd0

3) 客户端格式化、挂载分区并使用

[root@client ~]# mkfs.xfs /dev/rbd0

[root@client ~]# mount /dev/rbd0 /mnt/

[root@client ~]# echo "test" > /mnt/test.txt

12,创建镜像快照

磁盘快照(Snapshot)是针对整个磁盘卷册进行快速的档案系统备份,与其它备份方式最主要的不同点在于「速度」。进行磁盘快照时,并不牵涉到任何档案复制动作。就算数据量再大,一般来说,通常可以在一秒之内完成备份动作。

磁盘快照的基本概念与磁带备份等机制有非常大的不同。在建立磁盘快照时,并不需要复制数据本身,它所作的只是通知LX Series NAS服务器将目前有数据的磁盘区块全部保留起来,不被覆写。这个通知动作只需花费极短的时间。接下来的档案修改或任何新增、删除动作,均不会覆写原本数据所在的磁盘区块,而是将修改部分写入其它可用的磁盘区块中。所以可以说,数据复制,或者说数据备份,是在平常档案存取时就做好了,而且对效能影响极低.

1)创建镜像快照

[root@node1 ceph-cluster]# rbd snap create image --snap image-snap1

[root@node1 ceph-cluster]# rbd snap ls image#查看image的快照

SNAPID NAME SIZE

4 image-snap1 15360 MB

2)删除客户端写入的测试文件

[root@client ~]# rm -rf /mnt/test.txt

[root@client ~]# umount /mnt先卸载再去还原快照,不然会报下面错误

3) 还原快照

[root@node1 ceph-cluster]# rbd snap rollback image --snap image-snap1

#客户端重新挂载分区

[root@client ~]# mount /dev/rbd0 /mnt/

[root@client ~]# ls /mnt

test.txt

快照还原问题:

[root@client ~]# mount /dev/rbd0 /mnt

mount: 文件系统类型错误、选项错误、/dev/rbd0 上有坏超级块、

缺少代码页或助手程序,或其他错误

有些情况下在 syslog 中可以找到一些有用信息- 请尝试dmesg | tail 这样的命令看看

解决办法:

1,先在客户机卸载

2,在node1在还原快照

2,在客户机上挂载

13,创建快照克隆

1)克隆快照

[root@node1 ceph-cluster]# rbd snap protect image --snap image-snap1#把快照保护起来

[root@node1 ceph-cluster]# rbd snap rm image --snap image-snap1 //会失败

[root@node1 ceph-cluster]# rbd clone \

image --snap image-snap1 image-clone --image-feature layering

//使用image的快照image-snap1克隆一个新的image-clone镜像

2)查看克隆镜像与父镜像快照的关系

[root@node1 ceph-cluster]# rbd info image-clone

rbd image 'image-clone':

size 15360 MB in 3840 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.d3f53d1b58ba

format: 2

features: layering

flags:

parent: rbd/image@image-snap1

#克隆镜像很多数据都来自于快照链

#如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!

[root@node1 ceph-cluster]# rbd flatten image-clone#解除与快照的关系

[root@node1 ceph-cluster]# rbd info image-clone

rbd image 'image-clone':

size 15360 MB in 3840 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.d3f53d1b58ba

format: 2

features: layering

flags:

#注意,父快照信息没了

14,其他操作

1) 客户端撤销磁盘映射

[root@client ~]# umount /mnt

[root@client ~]# rbd showmapped

id pool image snap device

0 rbd image - /dev/rbd0

[root@client ~]# rbd unmap /dev/rbd/rbd/image#撤销磁盘映射image

2)删除快照与镜像

[root@node1 ceph-deploy]# rbd snap unprotect image --snap image-snap1#解除保护

[root@node1 ceph-cluster]# rbd snap rm image --snap image-snap1#删除快照

[root@node1 ceph-cluster]# rbd list

[root@node1 ceph-cluster]# rbd rm image

15,块存储应用案例

1)创建磁盘镜像。

[root@node1 ceph-cluster]# rbd create vm1-image --image-feature layering --size 10G

[root@node1 ceph-cluster]# rbd create vm2-image --image-feature layering --size 10G

[root@node1 ceph-cluster]# rbd list

[root@node1 ceph-cluster]# rbd info vm1-image

[root@node1 ceph-cluster]# qemu-img info rbd:rbd/vm1-image

image: rbd:rbd/vm1-image

file format: raw

virtual size: 10G (10737418240 bytes)

disk size: unavailable

2)Ceph认证账户。

Ceph默认开启用户认证,客户端需要账户才可以访问,

默认账户名称为client.admin,key是账户的密钥,

可以使用ceph auth添加新账户(案例我们使用默认账户)。

[root@node1 ceph-cluster]# cat /etc/ceph/ceph.conf //配置文件

[global]

mon_initial_members = node1, node2, node3

mon_host = 192.168.2.10,192.168.2.20,192.168.2.30

auth_cluster_required = cephx //开启认证

auth_service_required = cephx //开启认证

auth_client_required = cephx //开启认证

[root@node1 ceph-cluster]# cat /etc/ceph/ceph.client.admin.keyring //账户文件

[client.admin]

key = AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==

3)部署客户端环境。

注意:这里使用真实机当客户端!!!

客户端需要安装ceph-common软件包,拷贝配置文件(否则不知道集群在哪),

拷贝连接密钥(否则无连接权限)。

[root@room9pc01 ~]# yum -y install ceph-common

[root@room9pc01 ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/#下载ceph配置文件

[root@room9pc01 ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \

/etc/ceph/#下载ceph密钥

4)创建KVM虚拟机。

使用virt-manager创建1台普通的KVM虚拟机。名称为vm1

5)配置libvirt secret。

编写账户信息文件(真实机操作)

[root@room9pc01 ~]# vim secret.xml //新建临时文件,内容如下

<secret ephemeral='no' private='no'>

<usage type='ceph'>

<name>client.admin secret</name>

</usage>

</secret>

#使用XML配置文件创建secret

[root@room9pc01 ~]# virsh secret-define --file secret.xml

生成 secret c409ec4c-803b-46bc-b4e4-35dc86a08f85

//随机的UUID,这个UUID对应的有账户信息

编写账户信息文件(真实机操作)

--获取client.admin的key,或者直接查看密钥文件

方式一:

[root@room9pc01 ~]# ceph auth get-key client.admin

方式二:

[root@room9pc01 ~]# cat /etc/ceph/ceph.client.admin.keyring

[client.admin]

key = AQDExOpbE+W9BxAA9QBqQUAY0tFmSmjOWmS8Nw==

--设置secret,添加账户的密钥

[root@room9pc01 ~]# virsh secret-set-value --secret c409ec4c-803b-46bc-b4e4-35dc86a08f85 --base64 AQDExOpbE+W9BxAA9QBqQUAY0tFmSmjOWmS8Nw==

//这里secret后面是之前创建的secret的UUID

//base64后面是client.admin账户的密码

//现在secret中既有账户信息又有密钥信息

[root@room9pc01 room]# virsh secret-list#查看uuid

UUID 用量

c409ec4c-803b-46bc-b4e4-35dc86a08f85 ceph client.admin secret

6)虚拟机的XML配置文件。

每个虚拟机都会有一个XML配置文件,包括:

虚拟机的名称、内存、CPU、磁盘、网卡等信息

[root@room9pc01 ~]# vim /etc/libvirt/qemu/vm1.xml

//修改前内容如下

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2'/>

<source file='/var/lib/libvirt/images/vm1.qcow2'/>

<target dev='vda' bus='virtio'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>

</disk>

不推荐直接使用vim修改配置文件,推荐使用virsh edit修改配置文件,效果如下:

[root@room9pc01] virsh edit vm1 //vm1为虚拟机名称

<disk type='network' device='disk'>

<driver name='qemu' type='raw'/>

<auth username='admin'>

<secret type='ceph' uuid='c409ec4c-803b-46bc-b4e4-35dc86a08f85'/>

</auth>

<source protocol='rbd' name='rbd/vm1-image'>

<host name='192.168.4.11' port='6789'/>

</source>

<target dev='vda' bus='virtio'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>

</disk>

提示:保存退出出现"编辑了域 rhel7.4 XML 配置。"说明成功了

源路经:rbd://192.168.4.11:6789/rbd/vm1-image

Ceph块存储总结:

1,Linux可以直接使用

2,Kvm虚拟机使用,修改kvm虚拟机xml配置文件

二Ceph文件系统(MDS)

1,添加一台新的虚拟机,要求如下:

IP地址:192.168.4.14

主机名:node4(部署元数据服务器)

配置yum源(包括rhel、ceph的源)

与真机主机同步时间([root@node1 ceph-deploy]# scp /etc/chrony.conf root@192.168.4.14:/etc/)

node1允许无密码远程node4 命令:ssh-copy-id root@192.168.4.14

[root@node1 ceph-deploy]#vim /etc/hosts #并拷贝到node1-4,client

192.168.4.10 client

192.168.4.11 node1

192.168.4.12 node2

192.168.4.13 node3

192.168.4.14 node4

2,部署元数据服务器

登陆node4,安装ceph-mds软件包

[root@node1 ceph-cluster]yum -y install ceph-mds

登陆node1部署节点操作

[root@node1 ceph-cluster]# cd /root/ceph-cluster#该目录,是最早部署ceph集群时,创建的目录

[root@node1 ceph-cluster]# ceph-deploy mds create node4#给nod4拷贝配置文件,启动mds服务

[root@node1 ceph-cluster]# ceph-deploy admin node4#同步配置文件和key

3,创建存储池

[root@node1 ceph-cluster]ceph osd pool create cephfs_data 128#创建存储池,对应128个PG

[root@node1 ceph-cluster]ceph osd pool create cephfs_metadata 128#创建存储池,对应128个PG

4,创建Ceph文件系统

[root@node1 ceph-cluster]ceph mds stat //查看mds状态

e2:, 1 up:standby

[root@node1 ceph-cluster]ceph fs new myfs1 cephfs_metadata cephfs_data

new fs with metadata pool 2 and data pool 1

//注意,现在medadata池,再写data池

//默认,只能创建1个文件系统,多余的会报错

[root@node1 ceph-cluster]ceph fs ls

name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

[root@node1 ceph-cluster]ceph mds stat

e4: 1/1/1 up {0=node4=up:creating}

5,客户端挂载

[root@client ~]# mount -t ceph 192.168.4.11:6789:/ /mnt/cephfs/ \

-o name=admin,secret=AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==

//注意:文件系统类型为ceph

//192.168.4.11为MON节点的IP(不是MDS节点)

//admin是用户名,secret是密钥

//密钥可以在/etc/ceph/ceph.client.admin.keyring中找到

三创建对象存储服务器(RGW)

1,部署对象存储服务器

1)准备实验环境,要求如下:

IP地址:192.168.4.15

主机名:node5

配置yum源(包括rhel、ceph的源)

与真机主机同步时间

node1允许无密码远程node5命令:ssh-copy-id root@192.168.4.15

修改node1的/etc/hosts,并同步到所有node主机

[root@node1 ceph-cluster]# vim /etc/hosts

... ...

192.168.4.10 client

192.168.4.11 node1

192.168.4.12 node2

192.168.4.13 node3

192.168.4.14 node4

192.168.4.15 node5

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