设置Proxmox VE集群使用Ceph共享存储
一个人的生命中迟早会有这样一个时刻——你必须开始考虑你的服务的弹性和高可用性。本文讨论如何在具有共享存储的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磁盘。
- 获取当前的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