美文网首页tool for work
设置Proxmox VE集群使用Ceph共享存储

设置Proxmox VE集群使用Ceph共享存储

作者: 开心人开发世界 | 来源:发表于2019-08-21 00:32 被阅读10次

    一个人的生命中迟早会有这样一个时刻——你必须开始考虑你的服务的弹性和高可用性。本文讨论如何在具有共享存储的3个节点上配置Proxmox HA集群,为VM的动态迁移提供可能。我们考虑了很多关于选择什么作为共享存储的问题(选择在ceph和gluster之间),最后决定详细讨论ceph。在这里这里,您可以找到关于这两个存储的优点和缺点,所以您可以自由地选择您的案例中需要的这个。


    创建集群

    我们的设置中使用的IP地址和DNS名称列表

    192.168.25.61 machine1
    192.168.25.62 machine2
    192.168.25.63 machine3
    

    首先,我们需要设置3个proxmox节点。为此我们可以从官方网站使用proxmox iso 或者从新的debian上的存储库安装它。

    从repo安装我建议使用官方指南

    安装完成后,您需要更新系统

    sudo apt-get update
    

    之后,我们将在每个节点上编辑/etc/hosts以获得更多便利

    127.0.0.1 localhost.localdomain localhost
    192.168.25.61 machine1.local machine1 pvelocalhost
    192.168.25.62 machine2.local machine2
    192.168.25.63 machine3.local machine3
    

    通过ping检查每个节点是否看到对方。

    为Proxmox添加repo

    echo "deb [http://download.proxmox.com/debian/pve](http://download.proxmox.com/debian/pve?source=post_page---------------------------) stretch pve-no-subscription" > /etc/apt/sources.list
    
    

    现在我们准备创建一个集群。在将充当主节点的节点上,输入命​​令

    pvecm create <clustername>
    

    将剩余节点添加到群集

    pvecm add "masternode ip or dns name"
    

    检查所有节点是否在群集中

    pvecm status
    

    如果一切顺利,我们可以访问web-gui并能够从一个浏览器窗口管理所有节点。无论您登录哪个节点,这都有效。(8006是Proxmox web-gui的默认端口)


    配置Ceph

    让我们配置Сeph存储,为此我建议使用分离的网络用于VM和专用网络用于Ceph(如果你想使用SSD,10gb网卡会很好看,特别是

    对于节点之间的VM实时迁移,您可能需要创建vlan,以便VM可以看到彼此,即使它们位于不同的节点上。

    确保在防火墙中允许端口6789,6800-7100。Ceph监视器默认侦听端口6789。守护进程也绑定到6800-7100范围内的端口。

    在所有节点上安装Ceph:

    pveceph install --version luminous
    

    仅在masternode上初始化Ceph(将10.10.10.0/24更改为您的CIDR块):

    pveceph init --network 10.10.10.0/24
    

    在节点上创建监视器,为每个重复此操作:

    pveceph createmon
    

    现在创建Ceph监视器之后,我们可以使用GUI来完成剩余的进程。

    通过web-ui创建OSD。在群集中的每个节点上执行此操作。

    顺便说一句,就是这样,你可以使用web-gui创建Ceph存储池,你会很好,buuuut ......


    默认情况下,在创建存储池时,它会尝试分配所有已发现的OSD。通常,Ceph集群通常由具有多个磁盘驱动器的多个节点组成。并且,这些磁盘驱动器可以是混合类型。我们将创建一个名为ssd-pool的池,由SSD磁盘支持,另一个池名为sata-pool,由SATA磁盘支持。

    在这种情况下,osd.0,osd.1和osd.2是SSD磁盘。类似地,osd.3,osd.4,osd.5,osd.6,osd.7和osd.8是SATA磁盘。

    1. 获取当前的CRUSH映射并对其进行反编译:
    ceph osd getcrushmap -o crushmapdump
    crushtool -d crushmapdump -o crushmapdump-decompiled
    

    2.编辑crushmapdump-decompiled CRUSH映射文件​​,并在根默认部分后添加以下部分:

    root ssd {
     id -20
     alg straw
     hash 0
     item osd.0 weight 0.010
     item osd.1 weight 0.010
     item osd.2 weight 0.010
    }
    root sata {
     id -21
     alg straw
     hash 0
     item osd.3 weight 0.010
     item osd.4 weight 0.010
     item osd.5 weight 0.010
     item osd.6 weight 0.010
     item osd.7 weight 0.010
     item osd.8 weight 0.010
    }
    

    3.通过在CRUSH映射的rules部分下添加以下规则来创建CRUSH规则,然后保存并退出该文件:

    rule ssd-pool {
     ruleset 1
     type replicated
     min_size 2
     max_size 10
     step take ssd
     step chooseleaf firstn 0 type osd
     step emit
    }
    rule sata-pool {
     ruleset 2
     type replicated
     min_size 2
     max_size 10
     step take sata
     step chooseleaf firstn 0 type osd
     step emit
    }
    

    4.在Ceph集群中编译并注入新的CRUSH映射:

    crushtool -c crushmapdump-decompiled -o crushmapdump-compiled
    ceph osd setcrushmap -i crushmapdump-compiled
    

    5.检查OSD树视图以了解新安排,并注意ssd和sata根桶:

    ceph osd tree
    

    6.创建并验证ssd-pool

    ceph osd pool create ssd-pool 128
    

    128 - pg_num的数量,您可以使用计算器来计算Ceph所需的放置组数量。

    验证ssd-pool,注意crush_ruleset是0,默认情况下:

    ceph osd dump | grep -i ssd
    

    让我们更改crush_ruleset,以便在SSD磁盘上创建新池:

    ceph osd pool set ssd-pool crush_rule ssd-pool
    

    验证池并注意crush_ruleset中的更改:

    ceph osd dump | grep -i ssd
    

    7.同样,创建并验证sata-pool

    ceph osd pool create sata-pool 128
    ceph osd dump | grep -i sata
    ceph osd pool create sata-pool 128
    ceph osd pool set sata-pool crush_rule sata-pool
    ceph osd dump | grep -i sata
    

    8.让我们检查它是否像预期的那样工作。

    由于这些池是新的,它们不应包含任何对象,但让我们使用rados list命令验证这一点:

    rados -p ssd-pool ls
    rados -p sata-pool ls
    

    现在我们使用rados put命令向这些池添加一个对象。语法应该是:

    rados -p <pool_name> put <object_name> <file_name>

    rados -p ssd-pool put dummy_object1 /etc/hosts
    rados -p sata-pool put dummy_object1 /etc/hosts
    

    使用rados list命令列出这些池。你应该得到我们在最后一步中存储的对象名称:

    rados -p ssd-pool ls
    rados -p sata-pool ls
    

    9.验证对象是否存储在正确的OSD集上。使用以下语法检查osd映射中的ssd-pool

    ceph osd map <pool_name> <object_name>

    ceph osd map ssd-pool dummy_object1
    

    您应该获得具有OSD的id的输出,其中实际存储“dummy_object1”。如前面的屏幕截图所示,在ssd-pool上创建的对象实际上存储在OSD集[0,2,1]中。此输出是预期的,它验证我们创建的池使用我们请求的正确OSD集。


    要指出结论,可以说目前是一个完整的解决方案,可以毫不费力地大大提高虚拟化平台的容错能力。另一方面,Ceph提供卓越的可靠性和可扩展性,使我们能够通过热添加OSD来增加存储容量。

    如果您发现这些扩展中的任何一个很有用并且您喜欢这篇文章,请随意点击并按住拍手按钮!:)

    转:https://medium.com/@qwonkiwow/setting-up-a-proxmox-ve-cluster-with-ceph-shared-storage-e7a4f652f321

    相关文章

      网友评论

        本文标题:设置Proxmox VE集群使用Ceph共享存储

        本文链接:https://www.haomeiwen.com/subject/bylqrctx.html