# 更改主机名
更改主机名的操作和 Debian 基本一致,但是 PVE 中会产生新的问题:
- 配置文件需要手动迁移
- 如果该节点已加入了集群,集群同步会出问题:
- 集群配置文件需要手动更新
- 节点之间 ssh 通信问题
- Cepth 我在这次还没有配置 Cepth,所以情况未知
和 Debian 一样的操作:
#!/bin/bash | |
# 获取旧主机名字 | |
old_hostname=$(hostname) | |
# 输入新主机名 | |
echo "请输入新的主机名:" | |
read new_hostname | |
sudo sed -i "s/$old_hostname/$new_hostname/g" /etc/hosts /etc/hostname /etc/postfix/main.cf |
然后需要重启让新主机名生效。重启会可能会同时看到新节点和旧节点,新节点上看不到原来的虚拟机、容器,旧节点上看得到,因为虽然重启创建了 /etc/pve/nodes/$new_hostname/
目录,但是旧节点的配置文件还在 /etc/pve/nodes/$old_hostname/
中。
其中 /etc/pve/nodes/$old_hostname/qemu-server/
比较特殊, mv
指令无法将它们直接移动,需要借助 “中转” 移动过去。
#!/bin/bash | |
# 输入新主机名 | |
read old_hostname | |
# 获取旧主机名 | |
new_hostname=$(hostname) | |
cp -r /etc/pve/nodes/$old_hostname/* /etc/pve/nodes/$new_hostname/ | |
# 中转 | |
mkdir /root/temp | |
mv /etc/pve/nodes/$old_hostname/qemu-server/* /root/temp/ | |
cp /root/temp/* /etc/pve/nodes/$new_hostname/qemu-server/ | |
rm -rf /etc/pve/nodes/$old_hostname /root/temp /root/t.sh |
每一个更改主机名的节点,都要单独对其执行如上操作。
# 集群同步
# 集群配置文件
按照官方文档,在每一个节点上编辑集群配置文件 /etc/pve/corosync.conf
和 /etc/corosync/corosync.conf
(一般重启 corosync
会自动和前者同步),可以修改不同节点主机名、IP、集群 id 等:
cp /etc/pve/corosync.conf /etc/pve/corosync.conf.new | |
cp /etc/pve/corosync.conf /etc/pve/corosync.conf.bak | |
nano /etc/pve/corosync.conf.new | |
mv /etc/pve/corosync.conf.new /etc/pve/corosync.conf | |
systemctl restart corosync |
如果修改节点 id,一定注意它是从 1 开始而不是 0 开始的!
这里因为权限问题不能直接编辑,而是创建新文件覆盖的方式编辑。原因如下:
root@node3:~# ls -lah /etc/pve/corosync.conf | |
-rw-r----- 1 root www-data 638 Aug 13 14:36 /etc/pve/corosync.conf |
还有另一种方式可以编辑这样的文件,通过切换文件系统的方式。如果上述方法操作失误或编辑出错了,可以通过如下方法挽救:
systemctl stop pve-cluster | |
systemctl stop corosync | |
pmxcfs -l | |
# 现在可以编辑任意文件了 | |
nano /etc/pve/corosync.conf | |
# 恢复 | |
killall pmxcfs | |
systemctl start pve-cluster | |
systemctl start corosync |
此外,若修改了节点的 id,还需要在重启 corosync
前受影响节点上删除旧的 id 信息:
rm -rf /var/lib/corosync/* |
编辑好配置文件之后,预期将在面板的 数据中心->概要; Datacenter(Cluster)->Summary
看到预期的节点情况。
这个过程由于我参考了官方文档 “从删除集群删除节点” 的内容,我曾误删过
/etc/corosync/authkey
和 ,导致了systemctl start corosync
失败,查看日志看到no such file or directory
这样的的报错,可以从其他节点tcp
等方式拷贝过去解决。
# ssh 通信
修改主机名后还会导致节点之间的 ssh 通信出问题,登录某一节点 ip 的面板无法访问另一个节点的信息。
修改 /etc/hosts
增加这些节点和 ip,仍没有解决。
在每一个节点上对每一个其他节点 nodeX (x.x.x.x) 执行 /usr/bin/ssh -e none -o 'HostKeyAlias=nodeX' root@x.x.x.x /bin/true
,仍没有解决。
最终解决:
在每一个节点 nodeX (x.x.x.x) 上,查看 /etc/ssh/ssh_host_rsa_key.pub
得到该节点为 PVE 使用的 rsa 公钥 (pub)xxx...
,然后在集群共享文件 /etc/pve/priv/known_hosts
中编辑确保有且仅有如下信息,删去旧的不正确的信息:
x.x.x.x ssh-rsa (pub)xxx... | |
nodeX ssh-rsa (pub)xxx... | |
x.x.x.x ssh-rsa (pub)xxx... | |
nodeX ssh-rsa (pub)xxx... | |
...... |
在每一个节点上,建立软链接:
ln -s /etc/pve/priv/known_hosts /etc/ssh/ssh_known_hosts |
最后重启 pveproxy
服务:
systemctl restart pveproxy |