集群与存储
块存储应用案例
1.环境准备
为虚拟机创建磁盘镜像:
[rood@node1~]# rbd create vm1-image --image-feature layering --size 10G
#”vm1-image”是创建的镜像名
[rood@node1~]#rbd list //查看所有rbd池里的镜像
[rood@node1~]#rbd info vm1-image //查看详细信息
[rood@node1~]#qemu-img info rbd:rbd/vm1-image
Ceph认证帐户:
Ceph默认开启用户认证,默认帐户名为client.admin , key是帐户的密钥
/etc/ceph/ceph.conf //配置文件
[root@node1 ceph]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
部署客户端环境(真机)
先装包:ceph-common
拷贝配置文件和连接密钥(否则无连接权限)
[root@room9pc01~]# scp 192.168.4.51:/etc/ceph/ceph.conf /etc/ceph/
[root@room9pc01~]#scp 192.168.4.51:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
2.创建kvm虚拟机
先Kvm创建初始化虚拟机
[root@room9pc01 ~]# virsh list --all //查看所有的虚拟主机
[root@room9pc01 ~]# ls /etc/libvirt/qemu //看所有虚拟主机的硬件配置文件信息
(虚拟机的名称,内存,磁盘,网卡等信息)
编写帐户的信息文件
[root@room9pc01 ~]# vim /root/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
生成随机的对应账户的UUID: 872a03f9-6d20-4a6b-89a5-53789d67d5d7
#如果定义过了,需要先删除原先的uuid
[root@room9pc01 ~]# virsh secret-undefine ebee4925-94b2-4a66-940a-6eebb96d3a26
编写账户信息文件(真实机操作)
[root@room9pc01 ~]#ceph auth get-key client.admin
AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
//获取 client.admin的key, 或者直接查看密钥文件
[root@room9pc01 ~]#cat /etc/ceph/ceph.clinet.admin.keyring
//出现内容与上面是一样的
设置secret,添加账户的密钥
[root@room9pc01~]# virsh secret-set-value --secret 872a03f9-6d20-4a6b-89a5-53789d67d5d7 --base64 AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
提示信息:secret 值设定
//这里cecret后面是创建的secret的uuid,base64后面是client.admin帐户的密码
[root@room9pc01 ~]# virsh dumpxml avpc > /tmp/avpc1.xml
或#cat /etc/libvirt/qemu/avpc.xml > /tmp/avpc1.xml
#创建一个新的虚拟机初始化生成配置文件即可,修改avpc虚拟机的硬件配置信息
[root@room9pc01 ~]# vim /tmp/avpc1.xml
<disk type='network' device='disk'>
<driver name='qemu' type='raw'/>
添加: <auth username='admin'>
<secret type='ceph' uuid='872a03f9-6d20-4a6b-89a5-53789d67d5d7'/>
</auth>
//这里的uuid就是secret的uuid,有client.admin帐户和密钥信息
<source protocol='rbd' name='rbd/vm1-image'>
<host name='192.168.4.51' port='6789'/>
</source>
//连接的ceph主机为192.168.4.51 端口号为6789
<target dev='vda' bus='virtio'/>
//将获取的镜像设为虚拟机的vda磁盘
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
使用编辑好的虚拟配置文件/tmp/avpc1.xml 创建虚拟机
[root@room9pc01 ~]# virsh define /tmp/avpc1.xml
定义域 avpc1(从 /tmp/avpc1.xml)
[root@room9pc01 ~]# virsh list --all | grep avpc1
8 avpc1 running
连接光盘镜像,引导选项>启用引导菜单打钩,下面3个选项打钩钩即可安转
(将系统装入镜像文件映射的vda磁盘里)
分布式文件系统CephFS
--分布式文件系统(Distibuted File System)是指文件系统管理的物理存储资
源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
--CephFS使用Ceph集群提供POSIX兼容的文件系统
--允许Linux直接将Ceph存储挂载到本地
准备一台新虚拟机,作为GW服务器
要求如下:ip地址:192.168.4.54
主机名:node4
配置yum源
时间同步client
Node1允许无密码远程node4
修改node1的/etc/hosts,并同步到所有node主机
元数据服务
元数据(Metata)
--任何文件系统中的数据分为数据和元数据
--数据是指普通文件中的实际数据
--元数据指用来描述一个文件的特征的系统数据(关于实际数据的数据)
--比如:访问权限,文件拥有者以及文件数据快的分布信息(inode)等
--所以Cephfs必须有MDSs节点
创建元数据服务器
登陆node4,安装ceph-mds软件包
[root@node4~]# yum -y install ceph-mds
登陆node1部署节点操作
[root@node1~]# cd /root/ceph-cluster //之前部署ceph集群创建的目录
[root@node1 ceph-cluser]# ceph-deploy mds create node4
//从node1拷贝配置文件至node4中,启动mds服务
[root@node1 ceph-cluser]# ceph-deploy admin node4
//发送密钥给node4
文件系统需要至少2个池
创建存储池
一个池用于存储,一个用于储存元数据
[root@node4~]# ceph osd pool create cephfs_data 128
[root@node4~]# ceph osd pool create cephfs_metadata 128
//需要指定大小,128PG,否则会分配所有空间
// PG是指定存储池存储对象的归属组的个数,每个PG里都可存多个对象
创建Ceph文件系统
[root@node4 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
//先写存元数据的池,再写储存数据的池
Fs:文件系统类型 myfs1:文件系统名
[root@node4 ~]# ceph fs ls
name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@node4 ~]# ceph mds stat //查看mds状态
e5: 1/1/1 up {0=node4=up:active}
客户端挂载(Linux内核支持ceph文件系统不用装软件)
[root@client ~]# mkdir /cephfs //创建用于挂载的文件夹
[root@client ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
//密钥信息
[root@client ~]# mount -t ceph 192.168.4.51:6789:/ /cephfs/ -o name=admin,secret=AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
//-t指定文件系统为ceph
//192.168.4.51为mon节点的ip
//用户名为admin
//secret是密钥
[root@client ~]# mount | grep ceph
192.168.4.51:/ on /cephfs type ceph (rw,relatime,name=admin,secret=<hidden>,acl)
//查看是否挂上
Ceph对象存储
什么是对象存储?
--就是键值存储,通其接口命令,也就是简单的GET,PUT,DEL和其他扩展,
向存储服务上传下载数据
--对象存储中所有数据都被认为是一个对象,so 任何数据都可以存入对象存储服务器,如图片,视频,音频等
RGW是Ceph对象存储网关,用于向客户端应用呈现储存界面,提供RESTful API访问接口
准备一台新虚拟机,作为元数据服务器
要求如下:ip地址:192.168.4.55
主机名:node5
配置yum源
时间同步client
Node1允许无密码远程node5
修改node1的/etc/hosts,并同步到所有node主机
部署RGW软件包
客户端通过RGW访问存储集群
通过node1安装ceph-radosgw
[root@node1~]# ceph-deploy install --rgw node5
同步配置文件与密钥node5
[root@node1~]# cd /root/ceph-cluser
[root@node1 ceph-cluser]# ceph-deploy admin node5
新建网关
启动一个rgw服务
[root@node1]# ceph-deploy rgw create node5
进入node5验证服务是否启动
[root@node5~]#ps aux | grep radosgw
修改服务端口
登陆node5 RGW默认服务端口为7480,修改为80,方便使用
[root@node5~]# /etc/ceph/ceph.conf
[client.rgw.node5]
Host = node5
Rgw_frontens = “civetweb port=80”
//node5是主机名
//civetweb是RGW内置的一个web服务
客户端测试RGW是否正常工作
[root@client~]# curl 192.168.4.55:80
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult
xmlns="http://s3.amazonaws.com/doc/2006-03-
01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets
></ListAllMyBucketsResult>
创建客户端连接时使用的帐户密码
[node5 ceph]# radosgw-admin user create --uid="testuser" --display-name="First User"
//--uid 指是用户名 --display-name 是描述信息
"keys": [
{
"user": "testuser",
"access_key": "356O8JOHCM0D0NCW84W3",
"secret_key": "zE4ONNIc9st6OJMADvJAYAYH2rhbWAeDhwrLtwMA"
}
],
// "access_key": 是客户端访问网关主机的密钥
// "secret_key": 是加密字符串
客户端安装访问网关主机node5的工具(命令行访问工具)
[root@client ~]# yum -y install s3cmd-2.0.1-1.el7.noarch.rpm
显示testuser用户密钥信息
node5 ceph]# radosgw-admin user info --uid=testuser
"keys": [
{
"user": "testuser",
"access_key": "356O8JOHCM0D0NCW84W3",
"secret_key": "zE4ONNIc9st6OJMADvJAYAYH2rhbWAeDhwrLtwMA"
}
],
执行,配置软件
[root@client /]# s3cmd --configure
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: 3D7J0E1479SVO7JH11SN
Secret Key: BN7uWCrQ5l8iu46cFQEZmG9zz8TgrcHrRSepEOOH
S3 Endpoint [s3.amazonaws.com]: 192.168.4.55:80
[%(bucket)s.s3.amazonaws.com]: %(nucket)s.192.168.4.55:80
Use HTTPS protocol [Yes]: no
Test access with supplied credentials? [Y/n] y
Save settings? [y/N] y
//其他注释默认回车不填写
客户端创建存储数据的bucket(类似于存储数据的目录)
[root@client ~]# s3cmd mb s3://my_bucket
Bucket 's3://my_bucket/' created
查看
[root@client ~]# s3cmd ls
2018-10-12 09:49 s3://my_bucket
客户端上传文件存储目录中(put 上传)
[root@client ~]# s3cmd put /etc/passwd s3://my_bucket/log/
upload: '/etc/passwd' -> 's3://my_bucket/log/passwd' [1 of 1]
2168 of 2168 100% in 6s 343.79 B/s done
客户端查看一下
[root@client ~]# s3cmd ls s3://my_bucket/log/
2018-10-12 09:51 2168 s3://my_bucket/log/passwd
将文件下载到本地(wget下载)
[root@client ~]# s3cmd get s3://my_bucket/log/passwd /tmp/
将文件删除(del 删除)
[root@client ~]# s3cmd del s3://my_bucket/log/passwd
delete: 's3://my_bucket/log/passwd'
再看一下就没了
[root@client ~]# s3cmd ls s3://my_bucket/log/