一、Ceph存储介绍
- 向物理机和虚拟机供应存储
- 统一存储,同时提供对象、块以及文件的功能
(1)、块设备
通过Ceph clients使用块设备
精简配置
动态扩容
快照、克隆
写时拷贝技术
caching(缓存)
Rbd驱动已经集成到Linux内核中
支持计算模块KVM、Qemu、libvirt
支持虚拟和物理服务器
支持format-1和format-2两种类型
(2)、对象存储
不能直接当成文件系统
只能通过API访问
二、Ceph与传统存储的对比
三、建立一个Ceph块设备
(1)、安装ceph客户端
$:ceph-deploy insatll ceph-client
或
$:apt-get install ceph
(2)、创建块设备
$:rdb create {image-name} --size {me gabytes} --pool {pool-name}
例:
$:rdb create zhao --size 1024 --pool rdb
(3)、列出块设备
$:rbd ls {poolname}
例:
$:rbd ls rbd
$:rbd ls
(4)、检索块信息
$:rbd --image {image-name} info
例:
$:rbd --image zhao info
(5)、更改块大小
$:rbd resize --image {image-name} --size {megabytes}
例:
$:rbd resize --image zhao --size 2048
(6)、删除块设备
$:rbd rm {image-name}
例:
$:rbd rm zhao
(7)、映射块设备
$:rbd map {image-name} --pool {pool-name} --id {user-name}
例:
$:rbd map zhao --pool rbd --id admin
(8)、查看已映射块设备
$:rbd showmapped
(9)、取消映射块设备
$:rbd unmap /dev/rbd/{poolname}/{imagename}
例:
$:rbd unmap /dev/rbd/rbd/zhao
$:rbd unmap /dev/rbd0
四、使用块设备完整操作流程实战
第一步:创建块设备
$:rbd creat zhao --size 1024
$:rbd map zhao
$:rbd showmapped
$:mkfs.ext4 -q /dev/rbd0
$:mkdir /mnt/ceph-zhao
$:mount /dev/rbd0 /mnt/ceph-zhao
第二步:自动挂载
设置开机ceph自动map和mount rdb块设备
1:edit /etc/ceph/rbdmap
#poolname/imagename id=client,keyring=/etc/ceph/ceph.client.keyring
例:
rbd/zhao id=admin.keyring=/etc/ceph/ceph.client.keyring
2:edit /etc/fstab
/dev/rbd/rbd/zhao /mnt/ceph-zhao ext4 defaults,noatime,_netdev
第三步:块扩容
$:rbd resize rdb/zhao --size 2048
文件系统在线扩容
$:resize2fs /dev/rbd0
第四步:块删除
$:umount /mnt/ceph-zhao
edit /etc/ceph/rbdceph
删除rbd/zhao id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
edit /etc/fstab
删除 /dev/rbd/zhao /mnt/ceph-zhao xfs defaults,noatime,_netdev
rbd rm zhao
五、快照和克隆
快照:某块设备在一个特定时间点的一份只读副本
(1)创建快照
rbd --pool {poolname} snap creat --snap {snap-name} {image-name}
rbd snap creat {pool-nmae}/{image-name}@{snap-name}
例:
$:rbd --pool rbd snap creat --snap zhao_snap zhao
$:rbd snap create rbd/zhao@zhao_snap
(2)快照回滚
rbd --pool {pool-name} snap rollback --snap {snap-name} {image-name}
rbd snap rollback {pool-name}/{image-name}@{snap-name}
例:
$:rbd --pool rbd snap rollback --snap zhao_snap zhao
$:rbd snap rollback rbd/zhao@zhao_snap
(3)清除快照
rbd --pool {pool-name} snap purge {image-name}
rbd snap purge {pool-name}/{image-name}
例:
$:rbd --pool rbd snap purge zhao
$:rbd snap purge rbd/zhao
(4)删除快照
$:rbd snap rm rbd/zhao@zhao_snap
(5)列出快照
rbd --pool {pool-name} snap ls {image-name}
rbd snap ls {pool-name}/{image-name}
例:
$:rbd --pool rbd snap ls zhao
$:rbd snap ls rbd/zhao
(6)保护快照
rbd --pool {pool-name} snap protect --image {image-name} --snap {snapshot-name}
rbd snap protect {pool-name}/{image-name}@{snapshot-name}
例:
$:rbd --pool rbd snap protect --image my-image --snap my-snapshot
$:rbd snap protect rbd/zhao@zhao_snap
(7)取消保护
rbd --pool {pool-name} snap unprotect --image {image-name} --snap {snapshot-name}
rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
例:
$:rbd --pool rbd snap unprotect --image my-image --snap my-snapshot
$:rbd snap unprotect rbd/zhao@zaho_snap
(8)快照克隆
rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}
例:
$:rbd clone rbd/zhao@zhao_snap/zhao-snap-clone
分层:支持创建某一设备快照的很多写时复制(COW)克隆,分层快照使得ceph块设备客户端可以很快的创建映射。
(1)创建分层快照和克隆
$:rbd creat zhao1 --size 1024 --image-format 2
$:rbd --pool rbd snap create --snap zhao1_snap zhao1
$:rbd snap protect rbd/zhao1@zhao1_snap
$:rbd clone rbd/zhao1@zhao1-snap rbd/zhao1-snap-clone
(2)查看快照的克隆
rbd --pool {pool-name} children --image {image-name} --snap {snap-name}
rbd children {pool-name}/{image-name}@{snapshot-name}
例:
$:rbd children rbd/zhao1@zhao1_snap
六、安装RADOS gateway
(1)配置rados源
$:wget -q -O- https://raw.github.com/ceph/ceph/master/keys/autobuild.asc | sudo apt-key add -
$:echo debhttp://gitbuilder.ceph.com/apache2-deb-$(lsb_release-sc)-x86_64-basic/ref/master $(lsb_release -sc) main | sudo tee/etc/apt/sources.list.d/ceph-apache.list
$:echo debhttp://gitbuilder.ceph.com/libapache-mod-fastcgi-deb-$(lsb_release -sc)-x86_64-basic/ref/master $(lsb_release -sc) main | sudo tee/etc/apt/sources.list.d/ceph-fastcgi.list
(2)安装radosgw软件
$:apt-getupdate
$:apt-get install apache2 libapache2-mod-fastcgi radosgw –y
注意:更新源之后,这里执行apt-get update会报错误,我们自动忽略它。一般情况下不影响下面的安装
(3)生成秘钥环和秘钥
给RADOS网关创建密钥
ceph-authtool--create-keyring /etc/ceph/ceph.client.radosgw.$HOMENAME.keyring
chmod +r /etc/ceph/ceph.client.radosgw.$HOMENAME.keyring
创建一个密钥用于RADOS到集群的认证
ceph-authtool/etc/ceph/ceph.client.radosgw.$HOMENAME.keyring -n client.radosgw.$HOMENAME--gen-key
ceph-authtool -n client.radosgw.$HOMENNAME--cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph /ceph.client.radosgw. $HOMENAME.keyring
把密钥添加到ceph密钥
ceph -k /etc/ceph/ceph.client.admin.keyringauth add client.radosgw.$HOMENAME -i /etc/ceph /ceph.client.radosgw. $HOMENAME.keyring
(4)修改ceph配置文件
$:vim /etc/ceph/ceph.conf
[client.radosgw.node4]
host = node4
keyring =/etc/ceph/ceph.client.radosgw.node4.keyring
rgw socket path = /tmp/radosgw.sock
log file = /var/log/ceph/radosgw.node4.log
rgw dns name = node4
说明:keyring = /etc/ceph/ceph.client.radosgw.node4.keyring ,因为本次在创建的各种秘钥是node4,如果在其他节点上创建过,也可以用其他的keyring
(5)添加FastCGI脚本
$:vim /var/www/s3gw.fcgi
#!/bin/sh
exec /usr/bin/radosgw -c/etc/ceph/ceph.conf -n client.radosgw.node4
添加执行权限:
chmod +x /var/www/s3gw.fcgi
(6)创建网关配置文件(rgw.conf)
$:vim/etc/apache2/sites-available/rgw.conf
FastCgiExternalServer /var/www/s3gw.fcgi-socket /tmp/radosgw.sock
<VirtualHost *:80>
ServerName node4
DocumentRoot /var/www
RewriteEngine On
RewriteRule ^/(.*) /s3gw.fcgi?%{QUERY_STRING}[E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
<IfModule mod_fastcgi.c>
<Directory /var/www>
Options +ExecCGI
AllowOverride All
SetHandler fastcgi-script
Order allow,deny
Allow from all
AuthBasicAuthoritative off
</Directory>
</IfModule>
AllowEncodedSlashes on
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignatureoff
</VirtualHost>
(7)apache2添加ServerName
$:vim /etc/apache2/apache2.conf
ServerName node4
(8)加载模块和禁用默认站点启动rgw站点
$:a2enmod rewrite
$:a2enmod fastcgi
$:a2ensite rgw.conf
$:a2dissite 000-default
(9)启动服务
service ceph restart
service apache2 restart
/etc/init.d/radosgw start
(10)根据官方文档,补充步骤:
mkdir -p/var/lib/ceph/radosgw/ceph-radosgw.gateway
chown www-data:www-data /var/run/ceph
touch /var/log/ceph/radosgw.node4.log
chown www-data:www-data /var/log/ceph/radosgw.node4.log
/etc/init.d/radosgw start
/etc/init.d/apache2 start
七、创建S3和swift用户
(1)create a radosgw user for S3 access:
$:radosgw-admin user create --uid="testuser" --display-name="First User"
(2)Create Swift user:
$:radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full
(3)Creat the secret key:
$:radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
(4)查看用户信息
$:radosgw-admin user info --uid=testuser
(4)测试S3接口
$:apt-get install python-boto
$:vim s3test.py
import boto
import boto.s3.connection
access_key = 'IOPJDPCIYZ665MW88W9R'
secret_key = 'dxaXZ8U90SXzyS5ivamEP20hkLSUViiaR+ZDA'
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = '{hostname}',
is_secoure=False,
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.creat_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
print "{name}\t{created}".format(
name = bucket.name
created = bucket.creation_date,
)
(5)安装s3cmd
$:apt-get install python-setuptools
$:git clone https://github.com/s3tools/s3cmd.git
$:cd s3cmd
$:python setup.py install
$:/home/s3cmd/build/scripts-2.7/s3cmd --configure
$:ln -s /home/s3cmd/build/scripts-2.7/s3cmd/ /usr/bin/s3cmd
安装dnsmasq
$:apt-get install dnsmasq
$:vim /etc/dnsmasq.conf
address = /ceph4/192.168.88.103
listen-address=127.0.0.1
$:service dnsmasq restart
初始化操作
$:s3cmd --configure
(6)s3cmd的使用
#S3cmd help
s3cmd --help
#Display all buckets
s3cmd ls
#Creat new bucket
s3cmd mb s3://YOURBUCKET
#Upload new file
s3cmd put test.txt s3://YOURBUCKET
#Download file
s3cmd get s3://YOURBUCKET/test.txt text.txt
(7)安装swiftclient
$:apt-get install python-setuptools
$:easy_install pip
$:pip install --upgrade setuptools
$:pip install --upgrade python-swiftclient
(8)测试swift
swift -A http://{IP ADDRESS}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list
例:
$:swift -A http://192.168.88.101/auth/1.0 -U testuser:swift -K 'ABJassd#hsd639^&*Bvhsd' list
参考:
ceph社区老王的视频课整理而得!!