三台服务器的时钟很重要因此要配置时钟一致node
HEALTH_WARN application not enabled on 1 pool(s)
POOL_APP_NOT_ENABLED application not enabled on 1 pool(s)
application not enabled on pool 'kube'
use 'ceph osd pool application enable <pool-name> <app-name>', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications.安全
enabled application 'rbd' on pool 'kube'服务器
HEALTH_OK网络
全部节点必须在同一子网,以便各个节点使用 corosync 多播通讯(详情可查看Corosync Cluster Engine)。Corosync 使用 UDP 5404 和 5405 端口进行集群通讯app
注意:有些交换机默认设置关闭了 IP 多播,须要先手工启用多播通讯ssh
添加位于不一样网段的节点
若是要添加一个节点,而该集群网络和该节点在不一样网段,你须要使用 ringX_addr 参数来指定节点在集群网络内使用的地址。分布式
pvecm add IP-ADDRESS-CLUSTER -ring0_addr IP-ADDRESS-RING0ide
若是你要使用冗余环协议,你还须要设置 ring1_addr 参数以传递第二个集群网络地址。性能
删除节点
警告:删除节点前请仔细阅读删除操做步骤,否则极可能会发生你预料不到的状况。测试
首先将待删除节点上全部虚拟机都迁移到其余节点。确保待删除节点上没有任何你须要保留的数据和备份,或者相关数据已经被妥善备份。
经过 ssh 登陆待删除节点。执行 pvecm nodes 命令再次确认节点 ID。
重要:这个时候,你必须将待删除节点关闭并断电,确保该节点再也不启动(在当前集群网络内)。
root@pve-1:~# pvecm nodes
Nodeid Votes Name 1 1 192.168.77.160 (local) 2 1 192.168.77.170 3 1 192.168.77.180
root@pve-1:~#
1
2
3
4
5
6
7
8
9
root@pve-1:~# pvecm nodes
Nodeid Votes Name 1 1 192.168.77.160 (local) 2 1 192.168.77.170 3 1 192.168.77.180
root@pve-1:~#
经过 ssh 登陆集群中其余任何一个节点,执行节点删除命令(这里将删除节点 hp4):
hp1# pvecm delnode hp4
若是命令执行成功,将直接返回,并且不会有任何输出。能够运行 pvecm nodes 或者pvecm status 检查删除节点后的集群状态。
重要:如前所述,必须在执行删除命令前先关闭待删除节点,而且确保被删除点再也不启动(在原集群网络中)。这是很是很是重要的!
若是你在原集群网络中从新启动被删除的节点,你的集群会所以而崩溃,而且很难恢复到一个干净的状态。
若是出于某种缘由,你须要将被删除节点从新加入原集群,须要按以下步骤操做:
格式化被删除节点,并从新安装 Proxmox VE。
如前一节所述步骤,将该节点从新加入集群。
隔离节点
重要:咱们不推荐使用隔离节点操做,按此方法操做时请务必当心。若是你对操做结果存有疑虑,建议使用删除节点的方法。
你能够将一个节点从集群中隔离出去,而无需格式化并重装该节点。但将节点从集群中隔离出去后,被隔离的节点仍然可以访问原 Proxmox VE 集群配置给它的共享存储。
你必须在将节点隔离出去以前解决这个问题。因为不能确保避免发生虚拟机 ID 冲突,
因此 Proxmox VE 集群之间不能共享同一个存储设备。建议为待隔离节点专门建立一个独享的新存储服务。例如,能够为待隔离节点分配一个新的 NFS 服务或者 Ceph 存储池。必须确保该存储服务是独享的。在分配存储以后,能够将该节点的虚拟机迁移到新存储服务,接下来就能够开始进行隔离节点的操做。
警告:必须确保全部的资源都被已经完全被隔离。不然将可能发生冲突或其余问题。
首先在待隔离节点上中止 pve-cluster 服务:
systemctl stop pve-cluster
systemctl stop corosync
而后将待隔离节点的集群文件系统设置为本地模式:
pmxcfs –l
接下来删除 corosync 配置文件:
rm /etc/pve/corosync.conf
rm /etc/corosync/*
最后从新启动集群文件系统服务:
killall pmxcfs
systemctl start pve-cluster
到此,该节点已经从集群中被隔离出去了。你能够在原集群中任意节点上执行删除命令:
pvecm delnode oldnode
若是因前面的隔离操做,原集群中剩余节点已经不知足多数票,节点删除命令就会失败。你能够将指望的多数票数量设置为 1,以下:
pvecm expected 1
而后重复节点删除命令便可。
接下来你能够从新登陆被隔离出去的节点,删除原集群遗留下的各个配置文件。删除
完成后,该节点便可从新加入任意其余集群。
rm /var/lib/corosync/*
被隔离节点的集群文件系统中仍然残留有和原集群其余节点有关的配置文件,这些也是须要删除的。你能够递归删除/etc/pve/nodes/NODENAME 目录清除这些文件。但在执行删除操做前请再三检查,确保删除操做无误。
警告:原集群中其余节点的 SSH 公钥仍会保留在 authorized_key 文件中。这意味着被隔离节点和原集群节点之间仍然能够用 SSH 公钥互相访问。为避免出现意外状况,能够删除/etc/pve/priv/authorized_keys 文件中的对应公钥。
多数票
Proxmox VE 采用了基于多数票(quorum)的机制确保集群节点状态一致。多数票是指在一个分布式系统内一个分布式交易获准执行所必须获得的最低票数。——Wikipedia 多数票(分布式计算)
在网络可能分裂为多个区域的状况下,修改集群状态须要获得大多数节点在线。若是集群内节点数量不足以构成多数票,集群将自动转为只读状态。
注意:默认状况下,Proxmox VE 集群内每一个节点都有一票的投票权。
集群网络
集群网络是 Proxmox VE 集群的核心。集群网络必须确保可靠地将集群通讯数据包按顺序送达全部节点。Proxmox VE 使用 corosync 来实现集群网络通讯,确保集群网络通讯的高性能,低延时,高可用。咱们的分布式集群文件系统(pmxcfs)就基于此构建。
集群网络配置要求
Proxmox VE 集群网络只有在网络延时低于 2ms 时(局域网内)才能够正常工做。尽管 corosync 支持节点间使用单播方式通讯,但咱们强烈建议使用多播方式进行集群通讯。集群网络内不该有其余大流量通讯。理想状况下,corosync 最好能拥有专用网络。
注意,必定不要在同一个网络同时运行 Proxmox VE 集群和存储服务。
最佳实践是在建立集群前先检测网络质量,确保网络能知足集群通讯要求。
确认全部的节点都在同一网段。而且要确保网络中只链接了用于集群通讯(corosync)的网卡。
确保节点彼此之间的网络都链接正常。可使用 ping 命令测试。
确保多播网络通讯工做正常并能达到很高的数据包传输速度。可使用 omping 命令测试。正常状况下,丢包率应小于 1%。
omping -c 10000 -i 0.001 -F -q NODE1-IP NODE2-IP …
确保多播通讯能在要求的时间段内可靠工做。这主要是为了不物理交换机启用IGMP 但未配置多播查询器(multicast querier)。该项测试至少须要持续 10 分钟。
omping -c 600 -i 1 -q NODE1-IP NODE2-IP …
如以上测试有任何一项未能经过,则你的网络不适合用于组建 Proxmox VE 集群。此时你须要检查网络配置。通常状况下,或者是交换机未启用多播通讯,或者是交换机配置了 IGMP 但未启用 multicast querier。
若是你的集群节点数量不多,在实在没法使用多播通讯的状况下也能够考虑使用单播方式。
独立集群网络
默认状况下,不带任何参数建立集群时,Proxmox VE 集群会和 Web GUI 以及虚拟机共享使用同一个网络。若是你配置不当,存储网络通讯流量也有可能会经过集群网络传输。咱们建议避免和其余应用共享使用集群网络,由于 corosync 是一个对时延很是敏感的实时应用。
准备一个新的网络
首先,你须要准备一个新的网络端口,该端口应链接在一个独立物理网络上。其次须要确保这个网络知足以上5.71集群网络配置要求。
建立集群时配置独立网络
能够用带 ring0_addr 和 bindnet0_addr 参数的 pvecm 命令建立拥有独立网络的Proxmox VE 集群。
若是你想配置独立网卡用于集群通信,而该网卡又配置了静态 IP 地址 10.10.10.1/25,
那么可使用以下命令:
pvecm create test –ring0_addr 10.10.10.1 –bindnet0_addr 10.10.10.0
而后可使用以下命令检查集群通讯是否正常:
systemctl status corosync
建立集群后配置独立网络
即便在你建立集群后,你也能够配置集群改用其余独立网络进行通讯,而无须重建整个集群。修改集群通讯网络,各节点的 corosync 服务须要逐个重启,以便使用新网络通讯,这可能会致使集群短期处于丧失多数票的状态。
首先确认你了解编辑 corosync.conf 文件的方法。而后打开 corosync.conf 文件。配置文件 corosync.conf 的内容示例以下:
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: due
nodeid: 2
quorum_votes: 1
ring0_addr: due
}
node {
name: tre
nodeid: 3
quorum_votes: 1
ring0_addr: tre
}
node {
name: uno
nodeid: 1
quorum_votes: 1
ring0_addr: uno
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: thomas-testcluster
config_version: 3
ip_version: ipv4
secauth: on
version: 2
interface {
bindnetaddr: 192.168.30.50
ringnumber: 0
}
}
首先,若是 node 对象中缺乏 name 属性,你须要手工增添该属性。注意 name 属性值必须和节点主机名一致。
而后,你须要将 ring0_addr 属性的值修改成节点在新集群网络内的地址。你可使用IP 地址或主机名设置 ring0_addr 属性。若是你使用主机名,必须确保全部的节点都能顺利解析该主机名。
在这里,咱们计划将集群通讯网络改成 10.10.10.1/25,因此须要相应修改全部的ring0_addr 属性。此外,还须要将 totem 一节中的 bindnetaddr 属性值修改成新网络中的地址。该地址能够配置为当前节点链接到新集群网络网卡的 IP 地址。
最后,你须要将 config_version 参数值增长 1。修改后的配置文件内容示例以下:
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: due
nodeid: 2
quorum_votes: 1
ring0_addr: 10.10.10.2
}
node {
name: tre
nodeid: 3
quorum_votes: 1
ring0_addr: 10.10.10.3
}
node {
name: uno
nodeid: 1
quorum_votes: 1
ring0_addr: 10.10.10.1
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: thomas-testcluster
config_version: 4
ip_version: ipv4
secauth: on
version: 2
interface {
bindnetaddr: 10.10.10.1
ringnumber: 0
}
}
最后你须要再次检查配置修改是否正确,而后能够根据编辑 corosync.conf 文件一节的内容,启用新的配置。
因为修改后的配置不能实时在线生效,因此必须重启 corosync 服务。
在一个节点上执行:
systemctl restart corosync
而后检查集群通讯是否正常
systemctl status corosync
若是在全部节点上 corosync 服务都能顺利重启并正常运行,那么全部的节点都将逐个改接入新的集群网络。
集群冷启动
很显然,当全部节点都断线时,集群是没法达到多数票要求的。例如,机房意外断电后,集群每每就处于这样的状态。
注意:使用不间断电源(UPS,也称为“后备电池电源”)是防止断电致使集群失去多数票的一个好办法,特别是在你须要实现 HA 效果的时候。
当节点重启启动时,pve-manager 服务会等待该节点加入集群并得到多数票状态。一旦得到多数票,该服务会启动全部设置了 onboot 标识的虚拟机。
所以,当你启动节点时,或者是意外断电后恢复供电时,你会发现一些节点启动速度会比其余节点快。另外要注意的是,在你的集群得到多数票之间,任何虚拟机都没法启动。
虚拟机迁移
可以把虚拟机从一个节点迁移到其余节点是集群的重要特性。Proxmox VE 提供了一些方法以便你控制虚拟机迁移过程。首先是 datacenter.cfg 提供了一些配置参数,其次是迁移命令行和 API 接口提供了相关控制参数。
5.10.1 迁移类型
迁移类型是指迁移过程采用加密(secure)或不加密(insecure)通道传输虚拟机数据。将迁移类型设置为 insecure 后,在迁移过程当中虚拟机内存数据将以明文方式传输,这有可能致使虚拟机上的敏感数据泄露(例如口令、密钥)。
所以,咱们强烈建议使用安全通道迁移虚拟机,特别在你没法控制整个网络链路并没有法保证网络不受窃听时。
注意:虚拟机磁盘迁移不受该配置影响。目前,虚拟机磁盘老是经过安全通道迁移。
因为数据加密会耗费大量计算资源,因此该虚拟机迁移时常常会选用“不安全”的传输方式,以节约计算资源。较新型的系统采用了硬件方式进行 AES 加密,受此影响较小。但在 10Gb 或更高速的网络中,该参数设置对于性能的影响会十分明显。