系统运维
三台服务器的时钟很重要所以要配置时钟一致
ceph health detail
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.
ceph osd pool application enable kube rbd
enabled application \’rbd\’ on pool \’kube\’
ceph health
HEALTH_OK
所有节点必须在同一子网,以便各个节点使用 corosync 多播通信(详情可查看Corosync Cluster Engine)。Corosync 使用 UDP 5404 和 5405 端口进行集群通信
注意:有些交换机默认设置关闭了 IP 多播,需要先手工启用多播通信
添加位于不同网段的节点
如果要添加一个节点,而该集群网络和该节点在不同网段,你需要使用 ringX_addr 参数来指定节点在集群网络内使用的地址。
pvecm add IP-ADDRESS-CLUSTER -ring0_addr IP-ADDRESS-RING0
如果你要使用冗余环协议,你还需要设置 ring1_addr 参数以传递第二个集群网络地址。
删除节点
警告:删除节点前请仔细阅读删除操作步骤,不然很可能会发生你预料不到的情况。
首先将待删除节点上所有虚拟机都迁移到其他节点。确保待删除节点上没有任何你需要保留的数据和备份,或者相关数据已经被妥善备份。
通过 ssh 登录待删除节点。执行 pvecm nodes 命令再次确认节点 ID。
重要:这个时候,你必须将待删除节点关闭并断电,确保该节点不再启动(在当前集群网络内)。
root@pve-1:~# pvecm nodes
Membership information
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
Membership information
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 或更高速的网络中,该参数设置对于性能的影响会十分明显。