注:此篇文章,如有疑惑,请参考上一篇【CEPH集群 分布式存储服务】。
一、块存储应用
1.1 Ceph认证账户
Ceph默认开启用户认证,客户端需要账户才可以访问
— 默认账户名称为client.admin ,key是账户的密钥
— 可以使用ceph auth 添加新账户(实验中使用默认账户)
node:
# cat /etc/ceph/ceph.conf //配置文件
[global]
fsid = 4cad35ad-9829-415a-9d40-8691c2648d74
mon_initial_members = node1, node2, node3
mon_host = 192.168.4.51,192.168.4.52,192.168.4.53
auth_cluster_required = cephx //开启认证
auth_service_required = cephx //开启认证
auth_client_required = cephx //开启认证
# cat /etc/ceph/ceph.client.admin.keyring //账户文件
[client.admin]
key = AQClRb9bvvkQHhAA0r2ihnFWR3JsBvgYJx7NAg==
配置:
准备实验环境真实机作为客户端
2.1 在管理主机上创建磁盘镜像(node1)
# cd /root/ceph-cluster
# rbd create vm1-image --image-feature layering --size 10G
# rbd create vm2-image --image-feature layering --size 10G
# rbd list(镜像列表)
demo-image
image-clone
vm1-image
vm2-image
# qemu-img info rbd:rbd/vm1-image(查看镜像的详细信息)
image: rbd:rbd/vm1-image
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: unavailable
2.3 从管理主机上拷贝集群配置文件和密码文件到本机(真机)的/etc/ceph/ 下
# yum -y install ceph-common.x86_64
# scp 192.168.4.51:/etc/ceph/ceph.conf /etc/ceph
# scp 192.168.4.51:/etc/ceph/ceph.client.admin.keyring /etc/ceph
# ls /etc/ceph/
ceph.client.admin.keyring ceph.conf rbdmap
2.4 在真机上创建一台新的虚拟机,常见好后不需要安装操作系统
# virsh list --all
2.5 libvirt secret
+++++++++++++++++++++++++++++++++++++
配置libvirt secret
KVM虚拟机需要使用librbd才可以访问ceph集群
Librbd访问ceph又需要账户认证
因此在这里,需要给libvirt设置账户信息
a) 编写账户信息文件(真实机操作)
# vim secret.xml
client.admin secret
b) 使用XML配置文件创建secret
# virsh secret-define --file secret.xml
生成 secret 342b4a54-8a03-4b79-9ffc-84a8eac89e36
//随机的UUID,这个UUID对应账户信息
注:删除secret 的方法
# virsh secret-undefine 342b4a54-8a03-4b79-9ffc-84a8eac89e36
c)编写账户信息文件(真实机)
# ceph auth get-key client.admin
//获取client.admin的key,或者直接查看密钥文件/etc/ceph/ceph.client.admin.keyring
d)设置secret,添加账户的密钥
# virsh secret-set-value --secret 90833f12-c0a1-44f3-92ea-09d37eec3ec6
--base64 AQClRb9bvvkQHhAA0r2ihnFWR3JsBvgYJx7NAg==
//这里secret后面是之前创建的secret的UUID
//base64后面是client.admin账户的密码
//现在secret中既有账户信息又有密钥信息
e) 将之前没有操作系统的虚拟机avpc的配置文件拷贝一份,进行修改
# virsh dumpxml avpc > /tmp/avpc1.xml
虚拟机的XML配置文件
每个虚拟机都会有一个XML配置文件,包括:
— 虚拟机的名称、内存、CPU、磁盘、网卡等信息
修改之前:
# vim /etc/libvirt/qemu/avpc.xml
# vim /tmp/avpc1.xml
删除下图中的 uuid这一行
继续在文中修改:内容如下:
37~43行之间的内容是手动添加的,其中红色部分时需要根据实际情况进行修改
username:
# cat /etc/ceph/ceph.client.admin.keyring(在此文件中获取)
uuid调取:
# virsh secret-list(之前生成的)
name获取:
# rbd list
//这里的uuid就是secret的uuid,有client.admin账户和密钥信息
//这里说明使用账户连接那台ceph主机和端口,访问哪个池和镜像
//这里说明经获取的镜像,设置为虚拟机的vda磁盘
根据配置文件生成虚拟机
使用编辑好的虚拟配置文件/tmp/avpc1.xml 创建虚拟机
#virsh define /tmp/avpc1.xml
定义域 avpc1(从 /tmp/avpc1.xml)
# virsh list --all
分布式文件系统存储
CephFs—— 分布式文件系统(Distributed File System)是指本地文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
CephFS使用Ceph集群提供与POSIX兼容的文件系统
允许Linux直接将Ceph存储mount到本地
元数据服务器
— 任何文件系统中的数据分为数据和元数据
— 数据是值普通文件中的实际数据
— 而元数据指用来描述一个文件的特征以及文件数据快的分布信息
— 比如:访问权限,文件拥有着以及文件数据块的分布信息
— 所以CephFS必须有MDSs节点
部署元数据服务器:
在node4上装ceph-mds软件包
# yum -y install ceph-mds
在管理主机node1上部署节点(创建数据服务器)
# cd /root/ceph-cluster/ //此目录是在部署ceph集群时创建的
# ceph-deploy mds create node4 //给node4拷贝配置文件,启动mds服务器
# ceph-deploy admin node4 //同步配置文件个key
创建存储池
# ceph osd pool create cephfs_data 128 //存储数据的池
# ceph osd pool create cephfs_meatedata 128 //存储元数据的池
使用前面创建的池,创建文件系统myfs1(名字可变)
# ceph fs new myfs1 cephfs_meatedata cephfs_data
//先写medadata池,再写data池,默认只能创建1个池,多于会报错
5. 产看mds状态信息
# ceph mds stat
在客户端50上使用cephfs方式共享的存储设备myfs1
创建挂载点
# mkdir /cephfs
查看连接集群管理主机的用户和密码
# cat /etc/ceph/ceph.client.admin.keyring
创建cephfs设备(客户端挂载)
#mount -t ceph 192.168.4.51:6789:/ /cephfs/ -o
name=admin,secret=AQClRb9bvvkQHhAA0r2ihnFWR3JsBvgYJx7NAg==
//文件系统类型ceph,192.168.4.51为MON节点的IP(不是MDS节点)
admin为用户名,secret是密钥,密钥可以在/etc/ceph/ceph.client.admin.keyring查看
查看挂载信息
# mount | grep cephfs
储存数据,使用ceph存储
# echo 1234567 > /cephfs/test3.txt
# cat /cephfs/test3.txt
卸载:(要先退出挂载目录执行卸载命令)
+++++++++++++++++++++++++++++++++++++++++++++++
对象存储
— 也是键值存储,通其接口指令,也就是简单的GIT、PUT、DEL和其他扩展,向存储服务上传下载数据
— 对象存储中所有数据都被认为是一个对象,所以,任何数据都可以存入对象存储服务器
RGW全称是Rados Gateway
RGW是Ceph对象存储网关,用于向客户端应用呈现存储界面,提供RESTful API访问接口
RGW可以部署多台,拓扑如下:
环境准备:添加一台虚拟机node55,要求如下
对象存储配置:
部署RGW软件包(因用户需要通过RGW访问存储集群)
node1主机:
# ceph-deploy install --rgw node5
# cd /root/ceph-cluster
# ceph-deploy admin node5
# ceph-deploy rgw create node5
# ls /etc/ceph
启动一个rgw服务
# ceph-deploy rgw create node5
登陆验证服务是否启动
# ps aux | grep radosgw
ceph 3604 0.1 2.0 2286132 21208 ? Ssl 04:54 0:14 /usr/bin/radosgw -f --cluster ceph --name client.rgw.node5 --setuser ceph --setgroup ceph
修改55主机内置web服务监听端口号(默认端口为7480 修改为80 端口便于客户端连接)
# vim /etc/ceph/ceph.conf(追加下面的内容)
[client.rgw.node5]
host = node5 //主机名
rgw_frontends = “civetweb port=80” //civetweb是RGW内置的一个为web服务
客户端client测试:此操作只测试RGW是否正常工作
—— 上传、下载数据还需要调用API端口
# curl http://192.168.4.55
anonymous
注;若出现web原始页面,需要关闭http服务;如出现无法连接,则重起ceph-radosgw@*服务
使用第三方软件访问:
在node5 创建客户端端连接时使用的用户名和密码
# radosgw-admin user create --uid="testuser" --display-name="First User"
# radosgw-admin user info --uid=testuser
客户端client安装访问网关主机node5的工具(命令行访问工具)
# yum -y install /root/s3cmd-2.0.1-1.el7.noarch.rpm(此软件包须自己准备)
配置软件 (//Access Key与Secret Key输入的内容从第1步的屏幕输出中复制)
# s3cmd --configure
# s3cmd ls
b) 创建存储数据的bucket(类似与存储数据的目录)
# s3cmd mb s3://my_bucket
c) 上传
# s3cmd put /var/log/messages s3://my_bucket/log/
d) 下载
# s3cmd get s3://my_bucket/log/messages /tmp/
e) 删除
# s3cmd del s3://my_bucket/log