空的集群不提了。家里有三台电脑,都装了PVE,都有虚拟机,直接创建集群将三个节点都加入,从Web console操作是不行的。命令行操作步骤如下:
1. 修改主机名
确保每台pve主机的主机名不一样。
假定原来主机名叫 pve
,新的主机名叫 pve1
,我都加了 local 的后缀。
hostnamectl set-hostname pve1.home.local
然后修改 /etc/hosts
和 /etc/postfix/main.cf
,确保里边的主机名是新的。
但是这样操作是不够的,还得去手动处理主机配置文件。(打开web console,看到的节点变成了两个,pve和pve1)
mv /etc/pve/nodes/pve/qemu-server/* /etc/pve/nodes/pve1/qemu-server/
建议顺手更新,然后重启系统。
2. 删除已有的集群信息(可选)
如果之前尝试过建集群,需要删掉这个集群,否则后边会进不了cluster的页面。
文档: https://pve.proxmox.com/wiki/Cluster_Manager#_remove_a_cluster_node
systemctl stop pve-cluster corosync
pmxcfs -l
rm /etc/corosync/*
rm /etc/pve/corosync.conf
killall pmxcfs
systemctl start pve-cluster
3. 修改主机ID
我其实不确定是不是必须,反正我是改了
脚本参考:https://forum.proxmox.com/threads/changing-vmid-of-a-vm.63161
#!/usr/bin/env bash
VM_TYPE=$1
OLD_VMID=$2
NEW_VMID=$3
#echo Put the VM type to change '(lxc, qemu)'
#read -r VM_TYPE
case "$VM_TYPE" in
"lxc") VM_TYPE="lxc" ;;
"qemu" | "qemu-server")
VM_TYPE="qemu-server" ;;
*)
echo bad input. Exiting
exit
;;
esac
#echo
#echo Put the VMID to change
#read -r OLD_VMID
case $OLD_VMID in
'' | *[!0-9]*)
echo bad input. Exiting
exit
;;
*)
echo Old VMID - "$OLD_VMID"
;;
esac
#echo
#echo Put the new VMID
#read -r NEW_VMID
case $NEW_VMID in
'' | *[!0-9]*)
echo bad input. Exiting
exit
;;
*)
echo New VMID - "$NEW_VMID"
;;
esac
echo
VG_NAME="$(lvs --noheadings -o lv_name,vg_name | grep "$OLD_VMID" | awk -F ' ' '{print $2}' | uniq)"
case "$VG_NAME" in
"")
echo Machine not in Volume Group. Exiting
exit
;;
*)
echo Volume Group - "$VG_NAME"
;;
esac
for volume in $(lvs -a | grep "$VG_NAME" | awk '{print $1}' | grep "$OLD_VMID"); do
newVolume="${volume//"${OLD_VMID}"/"${NEW_VMID}"}"
lvrename "$VG_NAME" "$volume" "$newVolume"
done
for volume in $(zfs list -t all | awk '{print $1}' | grep "vm-${OLD_VMID}-disk"); do
newVolume="${volume//"${OLD_VMID}"/"${NEW_VMID}"}"
zfs rename "$volume" "$newVolume"
done
sed -i "s/$OLD_VMID/$NEW_VMID/g" /etc/pve/"$VM_TYPE"/"$OLD_VMID".conf
mv /etc/pve/"$VM_TYPE"/"$OLD_VMID".conf /etc/pve/"$VM_TYPE"/"$NEW_VMID".conf
原脚本是交互输入参数的,我改成命令行参数了,这样可以搭配 for 去批量改id。
我的pve vm都是lvm的,所以这样没问题。如果是独立磁盘文件的,需要rename,然后qm rescan
4. 移动主机文件到一个统一的节点
假设我用 pve1 当主节点(我不知道pve有没有主节点的概念,就当临时用来操作的),pve1自己不动,其他节点需要把主机文件scp过去
假定pve1 ip是 192.168.111.1,现在处理 pve2
scp -pr /etc/pve/nodes/pve2 root@192.168.111.1:/etc/pve/nodes/
mv /etc/pve/nodes/pve2 /root/
5. 创建并加入集群
从pve1 创建集群,从其他已经处理好的节点加集群。
完。