按照我的方法安装的软件,服务器重启后,服务器上的实例不会自动重启。公云网有篇无博文提到了服务器重启后实例的恢复的问题,并提到了两个配置项:
resume_guests_state_on_host_boot=True
start_guests_on_host_boot=True
这两个选项会实例在nova-compute启动时重新启动,但是如果你是按照我的方法一步一步安装的OpenStack的话还需要多一些设置。
配置文件的更新
目前我采用如下的配置文件:
[DEFAULT]
# LOGS/STATE
verbose=True
# AUTHENTICATION
auth_strategy=keystone
# SCHEDULER
compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
# VOLUMES
volume_group=nova-volumes
volume_name_template=volume-%08x
iscsi_helper=tgtadm
# DATABASE
sql_connection=mysql://nova:[email protected]/nova
# COMPUTE
libvirt_type=kvm
connection_type=libvirt
instances_path=/home/instances
instance_name_template=instance-%08x
api_paste_config=/etc/nova/api-paste.ini
allow_resize_to_same_host=True
#esume_guests_state_on_host_boot=True
#tart_guests_on_host_boot=True
# APIS
osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
cc_host=10.61.2.88
ec2_host=10.61.2.88
ec2_dmz_host=10.61.2.88
ec2_url=http://10.61.2.88:8773/services/Cloud
keystone_ec2_url = http://10.61.2.88:5000/v2.0/ec2tokens
nova_url=http://10.61.2.88:8774/v1.1/
s3_host=10.61.2.88
s3_dmz=10.61.2.88
# RABBITMQ
# rabbit_host=10.61.2.88
# rabbit_userid=guest
# rabbit_password=service123
# QPID
rpc_backend=nova.rpc.impl_qpid
qpid_hostname=10.61.2.88
# GLANCE
image_service=nova.image.glance.GlanceImageService
glance_host=10.61.2.88
glance_api_servers=10.61.2.88:9292
# NETWORK
network_manager=nova.network.manager.FlatDHCPManager
force_dhcp_release=True
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
routing_source_ip=10.61.2.88
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
my_ip=10.61.2.88
public_interface=br100
vlan_interface=eth0
flat_network_bridge=br100
flat_interface=eth0
fixed_range=10.0.0.0/24
# NOVNC CONSOLE
novncproxy_base_url=http://10.61.2.88:6080/vnc_auto.html
xvpvncproxy_base_url=http://10.61.2.88:6081/console
vncserver_proxyclient_address=10.61.2.88
vncserver_listen=10.61.2.88
#OTHERS
bindir=/usr/bin
root_helper=sudo nova-rootwrap
我的控制节点ip为10.61.2.88,计算节点上只需修改以下两项即可:
my_ip=node_ip
vncserver_listen=node_ip
配置网桥
如果是按照我的方法安装的软件,你会发现服务器启动的时候是不会自动创建br100网桥的,控制节点br100的创建要到nova-network启动后才会创建,并且br100的ip为10.0.0.,然后通过iptables的NAT功能映射你原来的ip地址。计算节点br100的创建要更晚,nova-compute启动后不会创建,即使你在计算节点上启动nova-network后也不会创建,它的创建要推迟到在该节点上创建新的实例的时候,br100创建后会把它所绑定的interface的网络信息复制过来并删除原interface的网络信息。如果在br100创建之前就重启现有实例就会因为找不到br100而出错,所以要先让br100在服务器启动时就创建,方法如下:
创建并修改网络配置文件
这里我只使用eth0,br100绑定到eth0上,且eth0通过图形界面设置为手动ip。首先将/etc/sysconfig/network-scripts/ifcfg-eth0另存为/etc/sysconfig/network-scripts/ifcfg-br100,修改ifcfg-br100,我的文件内容如下:(注意:我这里没有设置网关和DNS信息,如果你打算设置的话请自行加上)
DEVICE="br100"
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=none
IPADDR=10.61.2.88
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System br100"
修改ifcfg-eth0,注释掉BOOTPROTO、IPADDR、PREFIX,添加BRIDGE=br100。我的文件内容如下:
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE=Ethernet
#BOOTPROTO=none
#IPADDR=10.61.2.88
#PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=C8:9C:DC:A4:3B:CA
BRIDGE=br100
如果你的文件里有GATEWAY、DNS1、DNS2等项,请注释掉在ifcfg-eth0中的这些项。(注意:保存完ifcfg-eth0后,网络就会中断,所以要本地操作服务器)
停止并禁用NetworkManager改用network管理网络
命令如下:
chkconfig NetworkManager off & service NetworkManager stop
chkconfig network on & service network restart
重启network后,br100就自动创建了,并且服务器重启后也能在开机时就自动创建,更重要的是我发现配置好br100后,服务器重启后服务器的实例被恢复为重启前的状态了,即使你没有运行任何的nova服务。
既然现在实例能自动恢复了,那还需不需要设置本文开头提到的那两个选项呢?
以下原因可能会让你不想设置这两个选项
1.这两个选项会让nova-compute在启动或重启时重启所有的实例(这里指通过OpenStack创建的实例,通过virt-manager创建的实例没有测试),不管你的实例是running,paused,还是poweroff,因此有些实例是你人为的paused的或poweroff的话,自然不希望这样。
2.如果nova-compute在重启某个实例时失败,就会报错退出,导致nova-compute无法启动。
3.nova-compute在重启实例时会等待一段时间以使实例关机,默认是两分钟,当然可以通过libvirt_wait_soft_reboot_seconds修改,但是如果有个十个八个实例要重启,这段时间仍然很可观的,且这段时间你如果通过nova-manage service list查询其状态的话是处于XXX的。
以下原因可能会让你想设置这两个选项
设置这两个选项后,启动或重启nova-compute时可以修复实例的状态不一致问题。我曾经尝试用nova suspend servername关掉一个实例,结果nova-compute报错,无法关掉,如果你查询实例的话,此时它处于suspending的状态,但此时nova-comute早就报错不管了,实例还在正常运行,如果这时你尝试其它电源管理操作的话,如pause,reboot,suspend,就会提示你实例处于suspending中,无法进行这些操作,唯一能做的就只有删除操作了,此时若设置了这两个选项,便可重启nova-compute来重启实例,这样实例就又正常运行了。
北方工业大学 | 云计算研究中心 | 姜永