
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
为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 docker.xuanyuan.run/modelrockettier/corosync-qnetd
[docker] 创建并启动docker corosync-qnetd容器:
docker run -d --name=qnetd --cap-drop=ALL -p 5403:5403 \ -v ${QNETD_DATA}:/etc/corosync docker.xuanyuan.run/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 docker.xuanyuan.run/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
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务