
为Proxmox v6集群设置Corosync v3 QNet守护进程。
https://hub.docker.com/r/modelrockettier/corosync-qnetd
此镜像允许在未运行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
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务