OpenStack服務器節點遷移(修改IP)後引發的nova-compute不啓動

前些日子一直在忙活將OpenStack的那幾臺服務器從部門機房搬遷到集團的大機房去,由於要修改節點的public_ip,出現了許多問題,也是經過了2個不免之夜,終於將問題都解決了,在這裏將過程記錄一下,和大家分享。

原IP爲

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.2.116.14
netmask 255.255.255.0
broadcast 10.2.116.255
gateway 10.2.116.1
dns-nameservers 8.8.8.8

auto eth1
iface eth1 inet static
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
修改後改爲

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.2.15.3
netmask 255.255.255.0
broadcast 10.2.15.255
gateway 10.2.15.1
dns-nameservers 8.8.8.8

auto eth1
iface eth1 inet static
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
Eth0:Public_IP從原來的10.2.116.14變更爲10.2.15.3,回想了一下安裝過程,設計到此IP的主要有3個地方,KeyStone的Endpoint,Nova的配置文件nova.conf,以及設置Nova-network的floating_ip。將其一一修改爲新IP之後重啓,出現錯誤

TRACE nova libvirtError: Domain not found: no domain with matching name 'instance-0000005f'
查找instance-0000005f這個文件,發現其位置在/var/lib/nova/instances/instance-0000005f這個目錄下有libvirt.xml這個文件,這個文件在nova-compute啓動時會最爲虛擬機的參數配置文件

查找發現VNC的配置IP還是原IP

<graphics type='vnc' port='-1' autoport='yes' keymap='en-us' listen='10.2.116.14'/>
修改爲

<graphics type='vnc' port='-1' autoport='yes' keymap='en-us' listen='10.2.15.3'/>
之後重啓nova-compute問題依舊,仔細研讀出錯的log信息,發現錯誤頭爲libvirtError想到會不會是libvirt的錯誤,然後到/etc/libvirt/qemu目錄下查找,發現目錄爲空。證明libvirt啓動時沒有發現配置文件,正如上面的錯誤所示,“no domain with matching name instace-00xxxx"。研讀nova源碼發現,nova-compute啓動時會根據/var/lib/novainstances/instance-0000005f/libvirt.xml去創建libvirt所使用的標準domain文件,估計是緩存或是bug等原因,導致只修改了VNC的IP後還是不能正確生成libvirt的domain文件,所以我們用libvirt的virsh命令手動生成。

cd /etc/libvirt/qemu
virsh define instance-0000005f.xml
之後手動添加其配置信息

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE 
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit instance-0000005f
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>instance-0000005f</name>
  <uuid>e8f73117-1a19-4d3e-a8d5-f846199d3b75</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/var/lib/nova/instances/instance-0000005f/disk'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <interface type='bridge'>
      <mac address='fa:16:3e:1a:66:d3'/>
      <source bridge='br100'/>
      <model type='virtio'/>
      <filterref filter='nova-instance-instance-0000005f-fa163e1a66d3'>
        <parameter name='DHCPSERVER' value='192.168.4.33'/>
        <parameter name='IP' value='192.168.4.40'/>
      </filterref>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='file'>
      <source path='/var/lib/nova/instances/instance-0000005f/console.log'/>
      <target port='0'/>
    </serial>
    <serial type='pty'>
      <target port='1'/>
    </serial>
    <console type='file'>
      <source path='/var/lib/nova/instances/instance-0000005f/console.log'/>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='10.2.15.3' keymap='en-us'>
      <listen type='address' address='10.2.15.3'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>
保存後重啓nova-compute出現新錯誤

2012-12-16 21:03:06 TRACE nova     if ret == -1: raise libvirtError ('virDomainCreateWithFlags() failed', dom=self)
2012-12-16 21:03:06 TRACE nova libvirtError: Unable to read from monitor: Connection reset by peer
2012-12-16 21:03:06 TRACE nova 
可使用命令

virsh managedsave-remove NameOfDomain
之後再次重啓nova-compute,出現新錯誤

2012-12-16 19:47:28 TRACE nova ProcessExecutionError: Unexpected error while running command.
2012-12-16 19:47:28 TRACE nova Command: sudo nova-rootwrap iscsiadm -m node -T iqn.2010-10.org.openstack:volume-0000000a -p 10.2.116.14:3260 --rescan
2012-12-16 19:47:28 TRACE nova Exit code: 255
2012-12-16 19:47:28 TRACE nova Stdout: ''
2012-12-16 19:47:28 TRACE nova Stderr: 'iscsiadm: No portal found.\n'
經分析,是修改IP導致了nova-volume服務找不到對應的volume了,但是我們在nova-volume被沒有相關的配置文件,幾經思考之後決定查看openstack的系統數據庫,發現在block_device_mapping和volumes兩個表中有跟IP相關的列對應,將其修改爲新的IP,之後再次重啓nova-compute服務,終於一切正常。

2013-02-21 新增

上面nova-volume服務出現錯誤,主要是兩個數據表中和服務IP有關聯的項目所用的IP都是默認的外網IP端10.2.16.14,而我們服務器搬遷了之後正好更改的就是這個外網地址。我們可以修改nova.conf中增加--iscsi_ip_address=192.168.3.1,這樣申請的volume就會用這個內網地址寫到數據庫中,如再遇服務器搬遷修改外網IP等問題,不會對系統內部產生影響。


期間也走了許多彎路,出現問題並不可怕,要冷靜客觀。主要還是要有邏輯分析能力,能找到解決問題的思路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章