zoukankan      html  css  js  c++  java
  • run ceph in docker

    申明:基本安装是依照http://dockone.io/article/436来进行的,但原文中ceph集群的搭建不够完整。我这里会做一些补充及说明。


    1、   下载mon和osd镜像

    [root@ubuntu1 ~]# docker pull index.alauda.cn/georce/mon:hammer

    [root@ubuntu1 ~]# docker pull index.alauda.cn/georce/osd:hammer

    2、   一条命令搭建mon

    [root@ubuntu1~]# docker run -itd --name=mon --net=host -e MON_NAME=mymon -e MON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph index.alauda.cn/georce/mon:hammer

    这里网络选取了主机模式,另外须要注意的就是mon的ip。也就是本机的ip,这条命令会将映射本机/etc/ceph文件夹到container中。

    命令运行完毕后,会在该文件夹中创建出ceph须要的文件。

    3、   查看mon的日志

    [root@ubuntu1 ~]# docker logs -f mon

    4、   编辑ceph配置文件

    [root@ubuntu1 ~]# vi ceph.conf

    [global]

    fsid = 4efc5ee7-8982-4bf4-808b-15372862fb78  

    mon initial members = mymon

    mon host = 192.168.1.100

    auth cluster required = cephx

    auth service required = cephx

    auth client required = cephx

    osd crush chooseleaf type = 0

    osd journal size = 100

    osd pool default pg num = 8

    osd pool default pgp num = 8

    osd pool default size = 1

    public network = 192.168.1.0/24

    cluster network = 192.168.1.0/24

    5、   重新启动mon

    [root@ubuntu1 ~]# docker restart mon

    6、   两条命令创建osd

    [root@ubuntu1 ~]# docker exec mon ceph osd create   生成osd的id

    [root@ubuntu1 ~]# docker run -itd --name=osd0 --net=host -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=mymon -e MON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph -v /opt/osd/0:/var/lib/ceph/osd/ceph-0 index.alauda.cn/georce/osd:hammer

    注意osd的文件夹,也就是会说直接将host的文件夹映射到容器里供osd使用。这是一种方式。事实上还有第二种方式,就是将设备穿透到container里,然后由container格式化及创建文件系统来使用磁盘。

    7、   查看ceph集群状态

    [root@ubuntu1 ~]# docker exec -it mon ceph -s

    集群默认会有一个叫做rbd的pool。默认副本是1。也就是说仅仅有一个osd,pg应该也会达成active+clean, 但其实pg没有达成active+clean的。不清楚原因。

    但一个副本显然没有意义。因此我们再添加osd。

    那篇文章到此就结束了。这里继续补充例如以下。


    8、   再创建一个osd

    [root@ubuntu1 ~]# docker exec mon ceph osdcreate   生成osd的id

    [root@ubuntu1 ~]# docker run -itd --name=osd1--net=host -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=mymon -eMON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph -v /opt/osd/1:/var/lib/ceph/osd/ceph-1index.alauda.cn/georce/osd:hammer

    我们又创建了一个osd,但pg还没有达到active+clean状态。

    至此。我们在一个节点上。执行了三个容器,当中一个是mon,另外两个各自是一个osd。但将osd都执行在一个host上没有意义,因此我们在还有一个host上也开启两个osd。


    在另外一个节点上:

    1、  注意保持第一个几点的防火墙开放必要的port 6789-6810等,能关最好先将防火墙关掉

    2、  从第一个几点拷贝/etc/ceph文件夹到第二个节点

    3、  開始创建osd。还是两条命令。但要注意,第一条命令仅仅能在第一个几点上运行

    [root@ubuntu1 ~]# docker exec mon ceph osdcreate   生成osd的id

    [root@ubuntu2~]# docker run -itd--name=osd1 --net=host -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=mymon -eMON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph -v /opt/osd/2:/var/lib/ceph/osd/ceph-2index.alauda.cn/georce/osd:hammer

    4、  相同的命令能够创建新的osd


    至此,如今ceph集群包括一个mon。四个osd分布在两个host上,分布例如以下:

    root@ubuntu1:~# ceph osd tree

    ID WEIGHT  TYPE NAME        UP/DOWN REWEIGHT PRIMARY-AFFINITY 

    -1 4.00000 root default                                       

    -2 2.00000     host ubuntu1                                   

     0 1.00000         osd.0         up  1.00000          1.00000 

     1 1.00000         osd.1         up  1.00000          1.00000 

    -3 2.00000     host ubuntu2                                   

     3 1.00000         osd.3         up  1.00000          1.00000 

     2 1.00000         osd.2         up  1.00000          1.00000 


    假设pg没有达成active+claen状态,我们能够删除默认的pool(叫rbd),然后重建一个pool,而且将副本数改动为2.


    10、删除原来的pool。然后新建一个pool。

    新建的pool中全部pg都达成了active+clean状态。

     ceph osd pool create volumes 64 64

     ceph osd pool set volumes size 2

    root@ubuntu1:~# ceph -s

        cluster f116eaa2-c97b-4351-b264-6cab9963dd9a

         health HEALTH_OK

         monmap e1: 1 mons at {mymon=10.10.10.61:6789/0}

                election epoch 1, quorum 0 mymon

         osdmap e34: 4 osds: 4 up, 4 in

          pgmap v152: 128 pgs, 2 pools, 0 bytes data, 0 objects

                10503 MB used, 65443 MB / 80106 MB avail

                     128 active+clean 


    新节点创建osd,须要注意的就是防火墙和配置文件。

    这也仅仅是一个体验,不须要我们去解决ceph安装过程中包依赖的问题,确实便捷了非常多,但除此之外,利用docker的技术我们也更easy对osd进行资源限制。但除此之外,好像也没有什么特别有意义的地方。



  • 相关阅读:
    SpringCloud--Ribbon--源码解析--Ribbon入口实现
    SpringCloud--Ribbon--使用demo
    装饰着模式(Decorator Pattern)
    SpringCloud--Eureka--配置
    SpringCloud--Eureka--原理及源码解析
    SpringCloud--Eureka--搭建
    观察者模式(Observer Pattern)
    策略模式(Strategy Pattern)
    xeus-clickhouse: Jupyter 的 ClickHouse 内核
    Spring的学习与实战(续)
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6865667.html
Copyright © 2011-2022 走看看