OpenStack 整合使用Ceph实现(Copy-On-Write)克隆 (笔记)

作者:zhangshen  发表于:2014-08-28

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

(http://blog.csdn.net/mrz001 )


本文使用的系统环境: CentOS6.5 四台机器 规划如下:


HostName IP        安装服务
c01 192.168.40.101 mon mds osd
c02 192.168.40.102 mon osd
c03 192.168.40.103 osd
c04 192.168.40.104 备用


部署完成后将另做变更操作
1、增加OSD节点


在c04节点上增加OSD节点
c01 192.168.40.101 mon mds osd
c02 192.168.40.102 mon osd
c03 192.168.40.103 osd
c04 192.168.40.104 osd
2、增加MON节点


在c03节点上新增加MON节点
c01 192.168.40.101 mon mds osd
c02 192.168.40.102 mon osd
c03 192.168.40.103 mon osd
c04 192.168.40.104 osd


  
首先三台机器组成ceph存储集群,hostname分别为c01,c02,c03,下文将都是使用这些短的hostname代表节点,其中在这三台机器上都部署monitor和对象存储osd,在mds上部署metadata服务器mds,另外一台机器作为openstack all-in-one环境节点 hostname:client
采用ceph-deploy来部署安装ceph, 这个类似与我们部署openstack用的chef。非常方便。
第一步:  在所有ceph节点上修改/etc/hosts,ceph-deploy 后面的节点参数必须使用hostname,为了能够解析hostname,需要配置/etc/hosts。


[root@c01 ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
10.10.6.101 c01
10.10.6.102 c02
10.10.6.103 c03
10.10.6.104 c04




第二步:配置ceph节点无密码访问其他节点,这个是方便我们使用ceph-deploy部署安装ceph


[root@c01 ~]# ssh-keygen  
[root@c01 ~]# ssh-copy-id c02  
[root@c01 ~]# ssh-copy-id c03  
[root@c01 ~]# ssh-copy-id c04  


第三步:关闭selinux和iptables;
关闭selinux并且关闭iptables或允许6789端口


/etc/init.d/iptables stop &&chkconfig iptables off
sed -i '/^SELINUX=/ cSELINUX=disabled' /etc/selinux/config
setenforce 0




第四步: 安装ceph
4.1 安装ceph-deploy
本文使用ceph-deploy来做部署,ceph-deploy为Ceph官方提供的安装部署工具,只需要在任意一台ceph节点安装即可。使用ceph-deploy的前提是配置统一hosts与ssh key互相认证。本次ceph-deploy安装在c01节点上。。
[root@c01 ~]# rpm -ivh http://ceph.com/rpm-firefly/el6/noarch/ceph-release-1-0.el6.noarch.rpm
[root@c01 ~]# yum -y install ceph-deploy




部署之前确保ceph每个节点没有ceph数据包(先清空之前所有的ceph数据,如果是新装环境不用执行此步骤,如果是重新部署的话也执行下面的命令),其中c01、c02为主机名
 [root@c01 ~]# ceph-deploy purgedata c01 c02  
 [root@c01 ~]# ceph-deploy forgetkeys
 [root@c01 ~]# ceph-deploy purge c01 c02  


注:如果是新环境,没有任何数据的无需执行


4.2 批量安装ceph


在c01节点使用ceph-deploy工具向各个节点安装ceph
[root@c01 ~]# ceph-deploy install c01 c02 c03 c04
(如果安装过程中由于网络原因中断,可以单独为某台服务器安装ceph-deploy install <hostname> 即可)
注:也可以纯手动安装ceph,安装过程如下:


yum clean all
yum -y install wget
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh --replacepkgs epel-release-6*.rpm
yum -y install yum-plugin-priorities
rpm --import https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
rpm -Uvh --replacepkgs http://ceph.com/rpm-firefly/el6/noarch/ceph-release-1-0.el6.noarch.rpm
yum -y install ceph
ceph --version
[c01][DEBUG ] ceph version 0.80.5 (38b73c67d375a2552d8ed67843c8a65c2c0feba6)


4.3 部署mon节点
4.3.1 创建mon节点
建立一个集群包含c01 c02
使用ceph-deploy new c01 c02      
(执行这条命令后c01和c02都作为了monitor节点,多个mon节点可以在后面加入hostname多个实现互备如: ceph-deploy new c01 c02 c03)
[root@c01 ~]#  cd /etc/ceph/
[root@c01 ceph]# ceph-deploy new c01 c02  
 
查看生成的配置


[root@c01 ceph]# ls
ceph.conf  ceph.log  ceph.mon.keyrin
[root@c01 ceph]# cat ceph.conf 
[global]
auth_service_required = cephx
filestore_xattr_use_omap = true
auth_client_required = cephx
auth_cluster_required = cephx
mon_host = 10.10.6.101,10.10.6.102
mon_initial_members = c01, c02
fsid = 1fb6919e-f455-4948-8038-e7383b840770


[root@c01 ceph]# 


4.3.2 修改默认osd大小
编辑mon节点的ceph配置文件,把下面的配置放入ceph.conf中
如果只有1个osd节点那么下面2个配置都设置成1。否则设置osd pool default size = 2即可
[root@c01 ceph]# vim /etc/ceph/ceph.conf
osd pool default size = 1
osd pool default min size = 1


4.3.3 修改安全认证
为了更方便得让客户端挂载,使用none无需使用cephx认证。
[root@c01 ceph]# vim /etc/ceph/ceph.conf
auth_service_required = none
auth_client_required = none 
auth_cluster_required = none
auth supported = none


4.3.4 初始化mon节点
添加初始监控节点并收集密钥(新的ceph-deploy v1.1.3以上的版本需要此配置)。


[root@c01 ceph]# ceph-deploy --overwrite-conf mon create-initial


日志见附录1.1


可以看到在/etc/ceph目录下多出了3个keyring文件
[root@c01 ceph]# ll -lh
total 172K
-rw-r--r--. 1 root root   71 Aug 13 14:27 ceph.bootstrap-mds.keyring
-rw-r--r--. 1 root root   71 Aug 13 14:27 ceph.bootstrap-osd.keyring
-rw-------. 1 root root   63 Aug 13 14:26 ceph.client.admin.keyring




4.3.5 检查mon状态
使用ceph quorum_status --format json-pretty查看mon节点性息
[root@c01 ceph]# ceph quorum_status --format json-pretty


{ "election_epoch": 4,
  "quorum": [
        0,
        1],
  "quorum_names": [
        "c01",
        "c02"],
  "quorum_leader_name": "c01",
  "monmap": { "epoch": 1,
      "fsid": "1fb6919e-f455-4948-8038-e7383b840770",
      "modified": "0.000000",
      "created": "0.000000",
      "mons": [
            { "rank": 0,
              "name": "c01",
              "addr": "10.10.6.101:6789\/0"},
            { "rank": 1,
              "name": "c02",
              "addr": "10.10.6.102:6789\/0"}]}}
也可以使用ceph -s命令查看状态,看到有2个mon
[root@c01 ceph]# ceph -s
    cluster 1fb6919e-f455-4948-8038-e7383b840770
     health HEALTH_ERR 192 pgs stuck inactive; 192 pgs stuck unclean; no osds
     monmap e1: 2 mons at {c01=10.10.6.101:6789/0,c02=10.10.6.102:6789/0}, election epoch 4, quorum 0,1 c01,c02
     osdmap e1: 0 osds: 0 up, 0 in
      pgmap v2: 192 pgs, 3 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail
                 192 creating


2014-08-22 17:25:12.597033 mon.0 [INF] osdmap e1: 0 osds: 0 up, 0 in




4.4 配置osd节点
4.4.1 配置OSD节点硬盘设备


使用c01上的/dev/sdb1设备作为osd
[root@c01 ceph]# fdisk -l


Disk /dev/sdb: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd6257124


   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        3916    31455238+  83  Linux
/dev/sdb2            3917        7832    31455270   83  Linux
/dev/sdb3            7833       11748    31455270   83  Linux


4.4.2 准备分区文件系统
在c01节点上添加osd节点,默认文件系统是xfs,--fs-type参数可以指定使用ext4。此处c01为节点hostname,/dev/sdb1为预先为osd0准备好的分区


增加osd.0节点
[root@c01 ceph]# ceph-deploy osd prepare c01:/dev/sdb1 --fs-type ext4


日志见附录1.2
4.4.3 激活osd
[root@c01 ceph]# ceph-deploy osd activate c01:/dev/sdb1


日志见附录1.3




[root@c01 ceph]# ceph -s
    cluster 1fb6919e-f455-4948-8038-e7383b840770
     health HEALTH_OK
     monmap e1: 2 mons at {c01=10.10.6.101:6789/0,c02=10.10.6.102:6789/0}, election epoch 6, quorum 0,1 c01,c02
     osdmap e5: 1 osds: 1 up, 1 in
      pgmap v7: 192 pgs, 3 pools, 0 bytes data, 0 objects
            5294 MB used, 23405 MB / 30236 MB avail
                 192 active+clean


2014-08-22 22:25:33.550694 mon.0 [INF] pgmap v7: 192 pgs: 192 active+clean; 0 bytes data, 5294 MB used, 23405 MB / 30236 MB avail
[root@c01 ceph]# 
修改所有节点ceph配置


[osd]
osd mkfs type =ext4
osd mount options ext4 = "rw,noatime,user_xattr"


[osd.0]
host=c01
devs=/dev/sdb1




4.5 增加osd.1节点
ceph-deploy osd prepare c02:/dev/sdb1 --fs-type ext4
ceph-deploy osd activate c02:/dev/sdb1


[root@c01 ceph]# ceph -s
    cluster 1fb6919e-f455-4948-8038-e7383b840770
     health HEALTH_OK
     monmap e1: 2 mons at {c01=10.10.6.101:6789/0,c02=10.10.6.102:6789/0}, election epoch 6, quorum 0,1 c01,c02
     osdmap e9: 2 osds: 2 up, 2 in
      pgmap v15: 192 pgs, 3 pools, 0 bytes data, 0 objects
            10587 MB used, 42027 MB / 55430 MB avail
                  28 active+clean+replay
                 164 active+clean
[root@c01 ceph]# 


修改配置增加
[osd.1]
host=c02
devs=/dev/sdb1


4.6 增加osd.2
ceph-deploy osd prepare c03:/dev/sdb1 --fs-type ext4
ceph-deploy osd activate c03:/dev/sdb1


修改配置增加
[osd.2]
host=c03
devs=/dev/sdb1






[root@c01 ceph]# ceph -s
    cluster 1fb6919e-f455-4948-8038-e7383b840770
     health HEALTH_OK
     monmap e1: 2 mons at {c01=10.10.6.101:6789/0,c02=10.10.6.102:6789/0}, election epoch 6, quorum 0,1 c01,c02
     osdmap e13: 3 osds: 3 up, 3 in
      pgmap v26: 192 pgs, 3 pools, 0 bytes data, 0 objects
            15879 MB used, 60649 MB / 80624 MB avail
                 192 active+clean
[root@c01 ceph]# 
[root@c01 ceph]# 
[root@c01 ceph]# ceph osd tree
# id weight type name up/down reweight
-1 0.06998 root default
-2 0.03 host c01
0 0.03 osd.0 up 1
-3 0.01999 host c02
1 0.01999 osd.1 up 1
-4 0.01999 host c03
2 0.01999 osd.2 up 1
[root@c01 ceph]# 




4.6 添加mds节点


[root@c01 ceph]# ceph-deploy mds create c01


[root@c01 ceph]# ceph -s
    cluster 1fb6919e-f455-4948-8038-e7383b840770
     health HEALTH_OK
     monmap e1: 2 mons at {c01=10.10.6.101:6789/0,c02=10.10.6.102:6789/0}, election epoch 8, quorum 0,1 c01,c02
     mdsmap e4: 1/1/1 up {0=c01=up:active}
     osdmap e20: 3 osds: 3 up, 3 in
      pgmap v124: 192 pgs, 3 pools, 1884 bytes data, 20 objects
            15880 MB used, 60647 MB / 80624 MB avail
                 192 active+clean
[root@c01 ceph]# 








5.1 RBD存储
5.1.1 安装ceph客户端工具
配置源
rpm -ivh http://ceph.com/rpm-firefly/el6/noarch/ceph-release-1-0.el6.noarch.rpm
安装ceph-fuse
yum install ceph-fuse -y --disablerepo=epel
把秘钥及配置文件拷贝到客户端
[root@c01 ceph]# scp ceph.conf ceph.client.admin.keyring <client ip>:/etc/ceph/




5.1.2 创建池


 默认情况下,Ceph的块设备使用RBD池。您可以使用任何可用的池。我们建议创建一个 Cinder使用池和一个Glance使用池。确保您的Ceph的集群正常运行,然后再创建池。


   ceph osd pool create volumes 128
   ceph osd pool create images 128
   ceph osd pool create backups 128






5.2 配置使用Ceph的OpenStack


 
5.2.1 配置GLANCE


 


GLANCE可以使用多个后端存储镜像。默认情况下使用Ceph块设备,编辑 /etc/glance/glance-api.conf,并添加:


default_store = rbd
rbd_store_user = admin
rbd_store_pool = images


如果你要启用读写克隆镜像到volumes,还可以添加:


show_image_direct_url = True


5.2.2 配置CINDER


     OpenStack请求驱动程序与Ceph的块设备互动。您还必须指定块设备的池名称。在你的OpenStack的节点主机上,编辑/etc/cinder/cinder.conf 并添加如下内容:


volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool =volumes
glance_api_version = 2
(#)
rbd_user=admin
# rbd_secret_uuid=<None>
rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot=false
rbd_max_clone_depth=5




如果你使用认证cephx,添加到libvirt之前要配置用户和安全的UUID:


rbd_user = volumes
#rbd_secret_uuid = {uuid of secret}




vim /etc/cinder/cinder.conf
backup_driver=cinder.backup.drivers.ceph
backup_ceph_user=admin
backup_ceph_pool=backups
backup_ceph_chunk_size=134217728
backup_ceph_stripe_unit=0
backup_ceph_stripe_count=0
restore_discard_excess_bytes=true


5.2.3 配置nova使用ceph
本文中安装的qemu,libvirt均为新版本,版本过低可能存在rbd的支持问题。编译安装的方法为qemu安装libvirt安装
【问题: qemu版本问题,必须能支持rbd格式的,因为libvirt就是通过qemu相关命令与ceph存储交互,可通过"qemu-img–help”察看。
qemu-img version 0.12.1,
Supported formats: raw cow qcow vdi vmdk cloop dmg bochs vpc vvfat qcow2 qedvhdx parallels nbd blkdebug host_cdrom host_floppy host_device filegluster gluster gluster gluster
可以看到0.12.1不支持rbd,要装0.15以上的】
为了集成nova, 先做如下给libvirt创建密钥的操作,这个密钥在qemu执行创建image命令时会使用到,应在nova-compute服务运行的节点上执行如下操作。本文使用all-in-one,所以直接在client节点执行
qemu包含rbd
http://ceph.com/packages/ceph-extras/rpm/centos6/x86_64/qemu-kvm-0.12.1.2-2.415.el6.3ceph.x86_64.rpm
http://ceph.com/packages/ceph-extras/rpm/centos6/x86_64/qemu-img-0.12.1.2-2.415.el6.3ceph.x86_64.rpm
http://ceph.com/packages/ceph-extras/rpm/centos6/x86_64/qemu-kvm-tools-0.12.1.2-2.415.el6.3ceph.x86_64.rpm


[root@c01 ~]# cat > secret.xml << EOF  
<secret ephemeral = 'no' private = 'no'>  
<usage type = 'ceph'>  
<name>client.admin secret</name>  
</usage>  
</secret>  
EOF  
[root@c01 ~]# sudo virsh secret-define --file secret.xml  
Secret 28ca7db4-a1f3-e007-2db6-4a06252c8e0a created  


[root@c01 ~]# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
key = AQDiZuxTeKUjNxAA8gaEVK/GYqXg94lD+LBpUg==
[root@c01 ~]# sudo virsh secret-set-value --secret 28ca7db4-a1f3-e007-2db6-4a06252c8e0a --base64 AQDiZuxTeKUjNxAA8gaEVK/GYqXg94lD+LBpUg==
Secret value set




vim /etc/nova/nova.conf
libvirt_images_type=rbd
libvirt_images_rbd_pool=volumes
libvirt_images_rbd_ceph_conf=/etc/ceph/ceph.conf 
rbd_secret_uuid=28ca7db4-a1f3-e007-2db6-4a06252c8e0a
rbd_user=admin






重新启动OpenStack


下载镜像
wget http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
qcow2转raw
qemu-img convert -f qcow2 -O raw cirros-0.3.2-x86_64-disk.img cirros-0.3.2-x86_64-disk.raw


上传image


查看pool下的文件
[root@c0611 ~]# rados -p images ls
rbd_data.10a695b62b0.0000000000000002
rbd_directory
rbd_data.10a695b62b0.0000000000000000
rbd_header.10a695b62b0
rbd_id.6822eca5-4f4c-4db4-a75e-2f95bc0d59fd
rbd_data.10a695b62b0.0000000000000004
rbd_data.10a695b62b0.0000000000000001
rbd_data.10a695b62b0.0000000000000003


创建1个云硬盘后查看pool下文件
[root@c0611 ~]# rados -p volumes ls
rbd_directory
rbd_header.10c0158a4c5f
rbd_id.volume-5f918839-20b2-4bb8-8214-e1ce1106f0a1
[root@c0611 ~]# 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值