类似于以下报错,通常都是nova用户ssh无密码登录设置不对。
Command: ssh 10.0.0.31 mkdir -p /var/lib/nova/instances/eac0e362-352f-45ad-b503-d28e588691be
Exit code: 255
Stdout: ''
Stderr: 'Host key verification failed.\r\n'. Setting instance vm_state to ERROR
解决方法:
(配置文件 /etc/passwd /etc/group /etc/shadow)
一、控制节点先修改系统用户nova,允许su成nova用户。
vim /etc/passwd (这一块我不知道nova用户的密码是多少,通过passwd命令可以自己设置)
nova:x:109:116::/var/lib/nova:/bin/flase 改成
nova:x:109:116::/var/lib/nova:/bin/bash (echo $SHELL 查看当前使用的shell环境)
二、通过nova系统用户来用ssh-keygen创建公钥
su nova
ssh-keygen -t rsa
输入后,会提示创建.ssh/id_rsa、id_rsa.pub的文件,其中第一个为密钥,第二个为公钥。过程中会要求输入密码,为了ssh访问过程无须密码,可以直接回车。
三、查看钥匙
ls /var/lib/nova/.ssh/
###可以发现 ssh目录下的两枚钥匙。id_rsa id_rsa.pub
###修改authorized_keys权限为600
cat id_rsa.pub > authorized_keys
chmod 600 authorized_keys (上面的操作全部是在nova用户下面操作)
把id_rsa,authorized_keys 拷贝到其它计算节点,我这里是:192.168.73.101(创建/var/lib/nova/.ssh/文件)
scp id_rsa.pub authorized_keys 192.168.73.101:/var/lib/nova/.ssh/ (root用户下面操作)
注意:记得修改权限
//chown root.root /var/lib/nova/.ssh/
chmod 600 /var/lib/nova/.ssh/authorized_keys(只需要修改权限)
chmod 600 /var/lib/nova/.ssh/id_rsa
修改之后的权限应该是:
-rw------- 1 nova nova 400 May 6 13:14 authorized_keys
-rw------- 1 nova nova 1679 May 6 13:17 id_rsa
四、测试
su nova
ssh 192.168.73.100 (openstack操作的时候是内部网络的IP)
但是我的机器内部网络是10.0.0.31,可以尝试ssh 内部网络,然后就会记住密钥。
可以登录且无密码的话,这个时候你再测试nova冷迁移,应该就没问题了。
如果两个节点间互相需要ssh和scp的话,上面的步骤在计算节点上运行一次即可。(注意权限的修改和ssh 10.0.0.11等内部网络)
迁移过程中源节点和目标节点之间需要ssh和scp,使得操作顺利进行,必须保证nova-compute进程的启动用户(通常是nova用户,可以通过ps命令确认)能够在计算节点之间无密码访问。