[ English | Indonesia | Deutsch | 日本語 ]
Compute Node Failures dan Maintenance¶
Kadang-kadang node komputasi macet secara tak terduga atau membutuhkan reboot untuk alasan pemeliharaan.
Planned Maintenance¶
Jika Anda perlu me-reboot node komputasi karena pemeliharaan yang direncanakan, seperti peningkatan perangkat lunak atau perangkat keras, lakukan langkah-langkah berikut:
Nonaktifkan penjadwalan VM baru ke node, opsional memberikan komentar alasan:
# openstack compute service set --disable --disable-reason \ maintenance c01.example.com nova-compute
Verifikasi bahwa semua instance yang dihosting telah dipindahkan dari simpul:
Jika cloud Anda menggunakan penyimpanan bersama:
Dapatkan daftar instance yang perlu dipindahkan:
# openstack server list --host c01.example.com --all-projects
Migrasikan semua instance satu per satu:
# openstack server migrate <uuid> --live c02.example.com
Jika cloud Anda tidak menggunakan penyimpanan bersama, jalankan:
# openstack server migrate <uuid> --live --block-migration c02.example.com
Hentikan layanan
nova-compute
:# stop nova-compute
Jika Anda menggunakan sistem manajemen konfigurasi, seperti Puppet, yang memastikan layanan
nova-compute
selalu berjalan, Anda dapat memindahkan sementara fileinit
untuk sementara:# mkdir /root/tmp # mv /etc/init/nova-compute.conf /root/tmp # mv /etc/init.d/nova-compute /root/tmp
Matikan simpul komputasi Anda, lakukan pemeliharaan, dan nyalakan kembali simpul tersebut.
Mulai layanan
nova-compute
:# start nova-compute
Anda dapat mengaktifkan kembali layanan
nova-compute
dengan membatalkan perintah:# mv /root/tmp/nova-compute.conf /etc/init # mv /root/tmp/nova-compute /etc/init.d/
Aktifkan penjadwalan VM ke node:
# openstack compute service set --enable c01.example.com nova-compute
Secara opsional, migrasi instance kembali ke node komputasi aslinya.
Setelah node komputasi, reboot¶
Ketika Anda me-reboot node komputasi, pertama-tama pastikan itu berhasil boot. Ini termasuk memastikan bahwa layanan nova-compute
sedang berjalan:
# ps aux | grep nova-compute
# status nova-compute
Juga memastikan bahwa ia telah berhasil terhubung ke server AMQP:
# grep AMQP /var/log/nova/nova-compute.log
2013-02-26 09:51:31 12427 INFO nova.openstack.common.rpc.common [-] Connected to AMQP server on 199.116.232.36:5672
Setelah simpul komputasi berhasil dijalankan, Anda harus berurusan dengan instance yang dihosting pada simpul komputasi tersebut karena tidak ada satupun yang berjalan. Tergantung pada SLA Anda dengan pengguna atau pelanggan Anda, Anda mungkin harus memulai setiap instance dan memastikan bahwa mereka memulai dengan benar.
Instance¶
Anda dapat membuat daftar instance yang dihosting di node komputasi dengan melakukan perintah berikut:
# openstack server list --host c01.example.com --all-projects
Setelah Anda memiliki daftar, Anda dapat menggunakan perintah openstack untuk memulai setiap instance:
# openstack server reboot <server>
Catatan
Setiap kali sebuah instance dimatikan secara tak terduga, mungkin ada masalah saat boot. Sebagai contoh, instance mungkin memerlukan fsck
di partisi root. Jika ini terjadi, pengguna dapat menggunakan konsol VNC dasbor untuk memperbaikinya.
Jika sebuah instance tidak bisa boot, berarti virsh list
tidak pernah memperlihatkan instance tersebut bahkan ketika mencoba untuk boot, lakukan hal berikut pada node komputasi:
# tail -f /var/log/nova/nova-compute.log
Coba jalankan perintah openstack server reboot lagi. Anda akan melihat pesan kesalahan tentang mengapa instance tidak bisa boot.
Dalam kebanyakan kasus, kesalahan adalah hasil dari sesuatu dalam file XML libvirt (/etc/libvirt/qemu/instance-xxxxxxxx.xml
) yang tidak lagi ada. Anda dapat memberlakukan kembali penciptaan file XML serta me-reboot instance dengan menjalankan perintah berikut:
# openstack server reboot --hard <server>
Memeriksa dan Memulihkan Data dari Instance Gagal¶
Dalam beberapa skenario, instance berjalan tetapi tidak dapat diakses melalui SSH dan tidak menanggapi perintah apa pun. Konsol VNC dapat menampilkan pesan kegagalan boot atau kesalahan panik kernel. Ini bisa menjadi indikasi kerusakan sistem file pada VM itu sendiri. Jika Anda perlu memulihkan file atau memeriksa konten instance, qemu-nbd dapat digunakan untuk me-mount disk.
Peringatan
Jika Anda mengakses atau melihat konten dan data pengguna, dapatkan persetujuan terlebih dahulu!
Untuk mengakses disk instance (/var/lib/nova/instances/instance-xxxxxx/disk
), gunakan langkah-langkah berikut:
Tangguhkan instance menggunakan perintah
virsh
.Hubungkan perangkat qemu-nbd ke disk.
Pasang (mount) perangkat qemu-nbd.
Lepaskan (unmount) perangkat setelah memeriksa.
Putuskan sambungan perangkat qemu-nbd.
Lanjutkan instance.
Jika Anda tidak mengikuti tiga langkah terakhir, OpenStack Compute tidak dapat mengelola instance lagi. Gagal merespons perintah apa pun yang dikeluarkan oleh OpenStack Compute, dan ditandai sebagai dimatikan.
Setelah Anda memasang file disk, Anda harus dapat mengaksesnya dan memperlakukannya sebagai kumpulan direktori normal dengan file dan struktur direktori. Namun, kami tidak menyarankan Anda mengedit atau menyentuh file apa pun karena ini dapat mengubah access control lists (ACLs) yang digunakan untuk menentukan akun mana yang dapat melakukan operasi apa pada file dan direktori. Mengubah ACL dapat membuat instance tidak bisa di-boot jika belum.
Tangguhkan instance menggunakan perintah virsh , perhatikan ID internal:
# virsh list Id Name State ---------------------------------- 1 instance-00000981 running 2 instance-000009f5 running 30 instance-0000274a running # virsh suspend 30 Domain 30 suspended
Temukan ID untuk setiap instance dengan mendaftar ID server menggunakan perintah berikut:
# openstack server list +--------------------------------------+-------+---------+-----------------------------+------------+ | ID | Name | Status | Networks | Image Name | +--------------------------------------+-------+---------+-----------------------------+------------+ | 2da14c5c-de6d-407d-a7d2-2dd0862b9967 | try3 | ACTIVE | finance-internal=10.10.0.4 | | | 223f4860-722a-44a0-bac7-f73f58beec7b | try2 | ACTIVE | finance-internal=10.10.0.13 | | +--------------------------------------+-------+---------+-----------------------------+------------+
Hubungkan perangkat qemu-nbd ke disk:
# cd /var/lib/nova/instances/instance-0000274a # ls -lh total 33M -rw-rw---- 1 libvirt-qemu kvm 6.3K Oct 15 11:31 console.log -rw-r--r-- 1 libvirt-qemu kvm 33M Oct 15 22:06 disk -rw-r--r-- 1 libvirt-qemu kvm 384K Oct 15 22:06 disk.local -rw-rw-r-- 1 nova nova 1.7K Oct 15 11:30 libvirt.xml # qemu-nbd -c /dev/nbd0 `pwd`/disk
Pasang (mount) perangkat qemu-nbd.
Perangkat qemu-nbd mencoba untuk mengekspor partisi disk yang berbeda sebagai perangkat yang terpisah. Misalnya, jika vda adalah disk dan vda1 adalah partisi root, qemu-nbd mengekspor perangkat sebagai
/dev/nbd0
dan/dev/nbd0p1
, masing-masing:# mount /dev/nbd0p1 /mnt/
Anda sekarang dapat mengakses konten
/mnt
, yang sesuai dengan partisi pertama dari disk instance.Untuk memeriksa disk sekunder atau sementara, gunakan titik pemasangan alternatif jika Anda ingin drive primer dan sekunder dipasang pada saat yang bersamaan:
# umount /mnt # qemu-nbd -c /dev/nbd1 `pwd`/disk.local # mount /dev/nbd1 /mnt/ # ls -lh /mnt/ total 76K lrwxrwxrwx. 1 root root 7 Oct 15 00:44 bin -> usr/bin dr-xr-xr-x. 4 root root 4.0K Oct 15 01:07 boot drwxr-xr-x. 2 root root 4.0K Oct 15 00:42 dev drwxr-xr-x. 70 root root 4.0K Oct 15 11:31 etc drwxr-xr-x. 3 root root 4.0K Oct 15 01:07 home lrwxrwxrwx. 1 root root 7 Oct 15 00:44 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Oct 15 00:44 lib64 -> usr/lib64 drwx------. 2 root root 16K Oct 15 00:42 lost+found drwxr-xr-x. 2 root root 4.0K Feb 3 2012 media drwxr-xr-x. 2 root root 4.0K Feb 3 2012 mnt drwxr-xr-x. 2 root root 4.0K Feb 3 2012 opt drwxr-xr-x. 2 root root 4.0K Oct 15 00:42 proc dr-xr-x---. 3 root root 4.0K Oct 15 21:56 root drwxr-xr-x. 14 root root 4.0K Oct 15 01:07 run lrwxrwxrwx. 1 root root 8 Oct 15 00:44 sbin -> usr/sbin drwxr-xr-x. 2 root root 4.0K Feb 3 2012 srv drwxr-xr-x. 2 root root 4.0K Oct 15 00:42 sys drwxrwxrwt. 9 root root 4.0K Oct 15 16:29 tmp drwxr-xr-x. 13 root root 4.0K Oct 15 00:44 usr drwxr-xr-x. 17 root root 4.0K Oct 15 00:44 var
Setelah Anda menyelesaikan inspeksi, lepaskan mount point dan lepaskan perangkat qemu-nbd:
# umount /mnt # qemu-nbd -d /dev/nbd0 /dev/nbd0 disconnected
Lanjutkan instance menggunakan virsh:
# virsh list Id Name State ---------------------------------- 1 instance-00000981 running 2 instance-000009f5 running 30 instance-0000274a paused # virsh resume 30 Domain 30 resumed
Mengelola alamat IP mengambang antar instance¶
Dalam lingkungan cloud yang elastis menggunakan jaringan Public_AGILE
, setiap instance memiliki alamat IPv4 & IPv6 yang dapat diakses publik. Itu tidak mendukung konsep alamat IP mengambang OpenStack yang dapat dengan mudah dilampirkan, dihapus, dan ditransfer antar instance. Namun, ada solusi menggunakan port neutron yang berisi alamat IPv4 & IPv6.
Create a port that can be reused
Buat port di jaringan `` Public_AGILE``:
$ openstack port create port1 --network Public_AGILE Created a new port: +-----------------------+------------------------------------------------------+ | Field | Value | +-----------------------+------------------------------------------------------+ | admin_state_up | UP | | allowed_address_pairs | | | binding_host_id | None | | binding_profile | None | | binding_vif_details | None | | binding_vif_type | None | | binding_vnic_type | normal | | created_at | 2017-02-26T14:23:18Z | | description | | | device_id | | | device_owner | | | dns_assignment | None | | dns_name | None | | extra_dhcp_opts | | | fixed_ips | ip_address='96.118.182.106', | | | subnet_id='4279c70a-7218-4c7e-94e5-7bd4c045644e' | | | ip_address='2001:558:fc0b:100:f816:3eff:fefb:45fb', | | | subnet_id='11d8087b-6288-4129-95ff-42c3df0c1df0' | | id | 3871bf29-e963-4701-a7dd-8888dbaab375 | | ip_address | None | | mac_address | fa:16:3e:e2:09:e0 | | name | port1 | | network_id | f41bd921-3a59-49c4-aa95-c2e4496a4b56 | | option_name | None | | option_value | None | | port_security_enabled | True | | project_id | 52f0574689f14c8a99e7ca22c4eb572 | | qos_policy_id | None | | revision_number | 6 | | security_groups | 20d96891-0055-428a-8fa6-d5aed25f0dc6 | | status | DOWN | | subnet_id | None | | updated_at | 2017-02-26T14:23:19Z | +-----------------------+------------------------------------------------------+
Jika Anda tahu nama domain yang sepenuhnya memenuhi syarat (FQDN) yang akan ditetapkan ke alamat IP, tetapkan porta dengan nama yang sama:
$ openstack port create "example-fqdn-01.sys.example.com" --network Public_AGILE Created a new port: +-----------------------+------------------------------------------------------+ | Field | Value | +-----------------------+------------------------------------------------------+ | admin_state_up | UP | | allowed_address_pairs | | | binding_host_id | None | | binding_profile | None | | binding_vif_details | None | | binding_vif_type | None | | binding_vnic_type | normal | | created_at | 2017-02-26T14:24:16Z | | description | | | device_id | | | device_owner | | | dns_assignment | None | | dns_name | None | | extra_dhcp_opts | | | fixed_ips | ip_address='96.118.182.107', | | | subnet_id='4279c70a-7218-4c7e-94e5-7bd4c045644e' | | | ip_address='2001:558:fc0b:100:f816:3eff:fefb:65fc', | | | subnet_id='11d8087b-6288-4129-95ff-42c3df0c1df0' | | id | 731c3b28-3753-4e63-bae3-b58a52d6ccca | | ip_address | None | | mac_address | fa:16:3e:fb:65:fc | | name | example-fqdn-01.sys.example.com | | network_id | f41bd921-3a59-49c4-aa95-c2e4496a4b56 | | option_name | None | | option_value | None | | port_security_enabled | True | | project_id | 52f0574689f14c8a99e7ca22c4eb5720 | | qos_policy_id | None | | revision_number | 6 | | security_groups | 20d96891-0055-428a-8fa6-d5aed25f0dc6 | | status | DOWN | | subnet_id | None | | updated_at | 2017-02-26T14:24:17Z | +-----------------------+------------------------------------------------------+
Gunakan port saat membuat instance:
$ openstack server create --flavor m1.medium --image ubuntu.qcow2 \ --key-name team_key --nic port-id=PORT_ID \ "example-fqdn-01.sys.example.com"
Pastikan instance memiliki alamat IP yang benar:
+--------------------------------------+----------------------------------------------------------+ | Field | Value | +--------------------------------------+----------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | nova | | OS-EXT-SRV-ATTR:host | os_compute-1 | | OS-EXT-SRV-ATTR:hypervisor_hostname | os_compute.ece.example.com | | OS-EXT-SRV-ATTR:instance_name | instance-00012b82 | | OS-EXT-STS:power_state | Running | | OS-EXT-STS:task_state | None | | OS-EXT-STS:vm_state | active | | OS-SRV-USG:launched_at | 2016-11-30T08:55:27.000000 | | OS-SRV-USG:terminated_at | None | | accessIPv4 | | | accessIPv6 | | | addresses | public=172.24.4.236 | | config_drive | | | created | 2016-11-30T08:55:14Z | | flavor | m1.medium (103) | | hostId | aca973d5b7981faaf8c713a0130713bbc1e64151be65c8dfb53039f7 | | id | f91bd761-6407-46a6-b5fd-11a8a46e4983 | | image | Example Cloud Ubuntu 14.04 x86_64 v2.5 (fb49d7e1-273b-...| | key_name | team_key | | name | example-fqdn-01.sys.example.com | | os-extended-volumes:volumes_attached | [] | | progress | 0 | | project_id | 2daf82a578e9437cab396c888ff0ca57 | | properties | | | security_groups | [{u'name': u'default'}] | | status | ACTIVE | | updated | 2016-11-30T08:55:27Z | | user_id | 8cbea24666ae49bbb8c1641f9b12d2d2 | +--------------------------------------+----------------------------------------------------------+
Periksa koneksi port menggunakan utilitas netcat:
$ nc -v -w 2 96.118.182.107 22 Ncat: Version 7.00 ( https://nmap.org/ncat ) Ncat: Connected to 96.118.182.107:22. SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6
Detach a port from an instance
Temukan port yang sesuai dengan instance. Sebagai contoh:
$ openstack port list | grep -B1 96.118.182.107 | 731c3b28-3753-4e63-bae3-b58a52d6ccca | example-fqdn-01.sys.example.com | fa:16:3e:fb:65:fc | ip_address='96.118.182.107', subnet_id='4279c70a-7218-4c7e-94e5-7bd4c045644e' |
Jalankan perintah openstack port set untuk menghapus port dari instance:
$ openstack port set 731c3b28-3753-4e63-bae3-b58a52d6ccca \ --device "" --device-owner "" --no-binding-profile
Hapus instance dan buat instance baru menggunakan opsi
--nic port-id
.
Retrieve an IP address when an instance is deleted before detaching a port
Prosedur berikut adalah solusi yang mungkin untuk mengambil alamat IP ketika sebuah instance telah dihapus dengan port masih terpasang:
Luncurkan beberapa port neutron:
$ for i in {0..10}; do openstack port create --network Public_AGILE \ ip-recovery; done
Periksa port untuk alamat IP yang hilang dan perbarui namanya:
$ openstack port set 731c3b28-3753-4e63-bae3-b58a52d6ccca \ --name "don't delete"
Hapus port yang tidak diperlukan:
$ for port in $(openstack port list | grep -i ip-recovery | \ awk '{print $2}'); do openstack port delete $port; done
Jika Anda masih tidak dapat menemukan alamat IP yang hilang, ulangi langkah ini lagi.
Volumes¶
Jika instance yang terpengaruh juga memiliki volume terlampir, pertama-tama buat daftar instance dan volume UUID:
mysql> select nova.instances.uuid as instance_uuid,
cinder.volumes.id as volume_uuid, cinder.volumes.status,
cinder.volumes.attach_status, cinder.volumes.mountpoint,
cinder.volumes.display_name from cinder.volumes
inner join nova.instances on cinder.volumes.instance_uuid=nova.instances.uuid
where nova.instances.host = 'c01.example.com';
Anda akan melihat hasil yang serupa dengan yang berikut:
+--------------+------------+-------+--------------+-----------+--------------+
|instance_uuid |volume_uuid |status |attach_status |mountpoint | display_name |
+--------------+------------+-------+--------------+-----------+--------------+
|9b969a05 |1f0fbf36 |in-use |attached |/dev/vdc | test |
+--------------+------------+-------+--------------+-----------+--------------+
1 row in set (0.00 sec)
Selanjutnya, lepaskan dan pasang kembali volume secara manual, di mana X adalah titik pemasangan yang tepat:
# openstack server remove volume <instance_uuid> <volume_uuid>
# openstack server add volume <instance_uuid> <volume_uuid> --device /dev/vdX
Pastikan instance telah berhasil di-boot dan berada di layar login sebelum melakukan hal di atas.
kegagalan total Compute Node¶
Compute Node bisa gagal dengan cara yang sama seperti cloud controller bisa gagal. Kegagalan motherboard atau beberapa jenis kegagalan perangkat keras lainnya dapat menyebabkan seluruh compute Nodei offline. Ketika ini terjadi, semua instance yang berjalan pada compute Node itu tidak akan tersedia. Seperti halnya kegagalan pengontrol cloud, jika pemantauan infrastruktur Anda tidak mendeteksi compute Node yang gagal, pengguna Anda akan memberi tahu Anda karena instans mereka yang hilang.
Jika compute Node gagal dan tidak akan diperbaiki selama beberapa jam (atau sama sekali), Anda dapat meluncurkan kembali semua instance yang di-host pada node gagal jika Anda menggunakan penyimpanan bersama untuk /var/lib/nova/instances
.
Untuk melakukan ini, buat daftar instance UUID yang di-host pada node gagal dengan menjalankan query berikut pada database nova:
mysql> select uuid from instances
where host = 'c01.example.com' and deleted = 0;
Selanjutnya, perbarui database nova untuk menunjukkan bahwa semua instance yang dulu di-host di c01.example.com sekarang di-host di c02.example.com:
mysql> update instances set host = 'c02.example.com'
where host = 'c01.example.com' and deleted = 0;
Jika Anda menggunakan ML2 plug-in layanan Networking , perbarui database layanan Networking untuk menunjukkan bahwa semua port yang dulu di-host di c01.example.com sekarang di-host di c02.example.com:
mysql> update ml2_port_bindings set host = 'c02.example.com'
where host = 'c01.example.com';
mysql> update ml2_port_binding_levels set host = 'c02.example.com'
where host = 'c01.example.com';
Setelah itu, gunakan perintah openstack untuk me-reboot semua instance yang ada di c01.example.com saat membuat ulang file XML mereka pada saat yang sama:
# openstack server reboot --hard <server>
Terakhir, pasang kembali volume menggunakan metode yang sama seperti yang dijelaskan di bagian volume.
/var/lib/nova/instances¶
Layak disebutkan direktori ini dalam konteks gagal node komputasi. Direktori ini berisi image disk berbasis file KVM libvirt untuk instance yang di-host pada node komputasi itu. Jika Anda tidak menjalankan cloud di lingkungan penyimpanan bersama, direktori ini unik di semua node komputasi.
/var/lib/nova/instances
berisi dua jenis direktori.
Yang pertama adalah direktori _base
. Ini berisi semua image dasar yang di-cache dari glance untuk setiap image unik yang telah diluncurkan pada node komputasi itu. File yang diakhiri dengan _20
(atau nomor yang berbeda) adalah image dasar fana.
Direktori lain berjudul instance-xxxxxxxx
. Direktori-direktori ini berhubungan dengan instance yang berjalan pada node komputasi itu. File-file di dalamnya terkait dengan salah satu file di direktori _base
. Mereka pada dasarnya adalah file berbasis diferensial yang hanya berisi perubahan yang dibuat dari direktori _base
asli.
Semua file dan direktori di /var/lib/nova/instances
diberi nama unik. File-file di _base secara unik berjudul untuk glance image yang menjadi dasarnya, dan nama direktori instance-xxxxxxxx
secara unik berjudul untuk instance tertentu. Misalnya, jika Anda menyalin semua data dari /var/lib/nova/instances
pada satu node komputasi ke yang lain, Anda tidak menimpa file apa pun atau menyebabkan kerusakan pada image yang memiliki nama unik yang sama, karena mereka adalah dasarnya file yang sama.
Meskipun metode ini tidak didokumentasikan atau didukung, Anda dapat menggunakannya saat node komputasi Anda offline secara permanen tetapi Anda memiliki instance yang disimpan secara lokal di dalamnya.