
modelrockettier/corosync-qnetd为Proxmox v6集群设置Corosync v3 QNet守护进程。
[]([***]
此镜像允许在未运行Proxmox的服务器(如NAS)上部署外部投票器。外部投票器主要用于打破平局(例如,当集群节点数量为偶数时)。
更多信息请参见<[***]>。
注意:此容器未安装SSH服务器,因此设置过程比简单的pvecm qdevice setup更复杂。
为Proxmox v6集群提供外部投票机制,解决偶数节点集群的投票决策问题,增强集群高可用性。
需满足以下条件:
CLUSTER_NAME: Proxmox集群名称(必须与Proxmox节点上/etc/corosync/corosync.conf中的cluster_name键匹配)
示例:
CLUSTER_NAME=cluster1
PROXMOX_NODE: 用于SSH连接到第一个Proxmox节点的凭据(通常为user@host或user@ip)
示例:
PROXMOX_NODE=root@proxmox1
QNETD_DATA: Docker主机上存储corosync-qnetd配置数据的路径
示例:
QNETD_DATA=/etc/corosync-data
总体流程:使用一个Proxmox节点设置qnet设备,然后添加其余Proxmox节点。
以下指令分别需要在Docker主机和初始Proxmox节点上运行,分别用**[docker]** 和**[proxmox]** 前缀标识。选择哪个Proxmox节点作为初始设置节点无关紧要,但确保该节点与Docker主机之间可直接传输文件(如通过scp)会更便捷。
[docker] 拉取docker corosync-qnetd容器(或从源码构建)
docker pull modelrockettier/corosync-qnetd
[docker] 创建并启动docker corosync-qnetd容器:
docker run -d --name=qnetd --cap-drop=ALL -p 5403:5403 \ -v ${QNETD_DATA}:/etc/corosync modelrockettier/corosync-qnetd
[docker] 将QNetd CA证书复制到第一个Proxmox节点:
scp ${QNETD_DATA}/qnetd/nssdb/qnetd-cacert.crt \ ${PROXMOX_NODE}:/etc/pve/corosync/qdevice/net/nssdb/
注意:由于Proxmox集群会自动同步/etc/pve目录中的所有内容,因此只需在一个节点上复制CA证书,它会自动传播到所有其他节点,无需单独复制到其他节点。
[proxmox] 在第一个Proxmox节点上安装corosync-qdevice包:
apt-get install corosync-qdevice
[proxmox] 在第一个Proxmox节点上启动并启用corosync-qdevice服务:
systemctl start corosync-qdevice systemctl enable corosync-qdevice
注意:如果启用失败,尝试删除/etc/init.d/corosync-qdevice后重试。详见<[**]>*
[proxmox] 在第一个Proxmox节点上初始化corosync-qdevice证书数据库:
corosync-qdevice-net-certutil -i \ -c /etc/pve/corosync/qdevice/net/nssdb/qnetd-cacert.crt
[proxmox] 在第一个Proxmox节点上生成证书签名请求:
corosync-qdevice-net-certutil -r -n ${CLUSTER_NAME}
[docker] 将证书签名请求复制到corosync配置目录:
scp ${PROXMOX_NODE}:/etc/corosync/qdevice/net/nssdb/qdevice-net-node.crq \ ${QNETD_DATA}/qnetd/nssdb/
[docker] 在corosync-qnetd容器中签署证书:
docker exec qnetd \ corosync-qnetd-certutil -s -n ${CLUSTER_NAME} \ -c /etc/corosync/qnetd/nssdb/qdevice-net-node.crq
注意:.crq文件路径是容器内部路径。
[docker] 将新生成的证书复制回第一个Proxmox节点:
scp ${QNETD_DATA}/qnetd/nssdb/cluster-${CLUSTER_NAME}.crt \ ${PROXMOX_NODE}:/etc/pve/corosync/qdevice/net/nssdb/
[proxmox] 在第一个Proxmox节点上导入证书:
corosync-qdevice-net-certutil -M -c cluster-${CLUSTER_NAME}.crt
[proxmox] 将输出的qdevice-net-node.p12复制到所有其他Proxmox节点:
cp -v /etc/corosync/qdevice/net/nssdb/qdevice-net-node.p12 \ /etc/pve/corosync/qdevice/net/nssdb/
注意:再次利用步骤3中提到的/etc/pve同步机制。
[proxmox] 设置所有其他Proxmox节点
重复上述步骤4-6
安装corosync-qdevice包
启动并启用corosync-qdevice服务
初始化corosync-qdevice证书数据库
corosync-qdevice-net-certutil -i \ -c /etc/pve/corosync/qdevice/net/nssdb/qnetd-cacert.crt
导入corosync集群证书和密钥:
corosync-qdevice-net-certutil -m \ -c /etc/pve/corosync/qdevice/net/nssdb/qdevice-net-node.p12
[proxmox] 在第一个Proxmox节点上将qdevice配置添加到/etc/pve/corosync.conf:
编辑/etc/pve/corosync.conf:
quorum { provider: corosync_votequorum }
${DOCKER_HOST}更改为Docker主机的主机名或IP):
quorum { provider: corosync_votequorum device { model: net votes: 1 net { tls: on host: ${DOCKER_HOST} algorithm: ffsplit } } }
更多信息见<[***]>。
[proxmox] 在所有Proxmox节点上重启corosync-qdevice服务:
systemctl restart corosync-qdevice
[docker] 确保corosync-qnetd正常工作
连接的客户端数量应等于在线的Proxmox节点数量。
此方法应能工作,且比上述快速入门指南更快捷简单,但尚未经过测试,且要求Proxmox节点能够SSH到Docker主机。
Docker主机必须安装SSH服务器,且步骤5中使用的Proxmox节点必须能够SSH到Docker服务器。
还需设置以下环境变量(或在命令中手动替换为相应值):
CLUSTER_NAME: Proxmox集群名称(必须与Proxmox节点上/etc/corosync/corosync.conf中的cluster_name键匹配)
示例:
CLUSTER_NAME=pm-cluster-1
DOCKER_HOST: Docker主机的主机名或IP地址
示例:
DOCKER_HOST=docker1
PROXMOX_NODES: Proxmox节点的主机名或IP地址列表
示例:
PROXMOX_NODES=( proxmox1 proxmox2 )
在所有Proxmox节点上安装corosync-qdevice包:
apt-get install corosync-qdevice
在所有Proxmox节点上启动并启用corosync-qdevice服务:
systemctl start corosync-qdevice systemctl enable corosync-qdevice
在Docker主机上创建并启动docker corosync-qnetd容器:
docker run -d --name=qnetd --cap-drop=ALL -p 5403:5403 \ -v /etc/corosync:/etc/corosync modelrockettier/corosync-qnetd
注意:corosync-qnetd数据必须存储在Docker主机的/etc/corosync目录中。
在Docker主机上,将QNetd工具复制到$PATH:
sudo docker cp qnetd:/usr/bin/corosync-qnetd-tool /usr/local/bin/ sudo docker cp qnetd:/usr/bin/corosync-qnetd-certutil /usr/local/bin/
从Proxmox节点运行Proxmox集群qdevice设置
pvecm qdevice setup ${DOCKER_HOST}
corosync-qdevice-net-certutil快速设置也可能工作(同样未测试):
corosync-qdevice-net-certutil -Q -n ${CLUSTER_NAME} ${DOCKER_HOST} ${PROXMOX_NODES[@]}
在Docker主机上,确保corosync-qnetd正常工作
连接的客户端数量应等于在线的Proxmox节点数量。
docker exec qnetd corosync-qnetd-tool -s
QNetd地址: *:5403 TLS: 支持(需要客户端证书) 已连接客户端: 2 已连接集群: 1



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务