Ceph
Mulig feilfix for VMer som booter til initramfs/bsod
(muligens) pga en manglende konfigurasjon i ceph-mon capabilities i alle versjoner av puppet-modulen ntnuopenstack før versjon VQ.1.1, kan VMer som har blitt skrudd av med tvang, bli meget triste i disken sin og nekte å boote skikkelig. Dette kan fikses ved å gjøre en "flatten" av disken i ceph.
# Skru av VMen som ikke booter # Ta en backup (uuid er VMens uuid fra nova) cephmon1# rbd -p volumes export <uuid>_disk <filnavn> # Kjør flatten (uuid er VMens uuid fra nova) cephmon1# rbd flatten volumes/<uuid>_disk # Skru den på igjen
Skru av reabalansering av OSDer
Dette er nyttig hvis man skal ha planlagt vedlikehold av en ceph-server. Det sørger for at ceph IKKE rebalanserer data når man skrur av en ceph-boks (det skaper veldig mye trafikk).
Gjøres på en ceph-mon host
ceph osd set noout
Etter utført vedlikehold, må man skru på igjen rebalanseringen
ceph osd unset noout
Bytte en disk
storageNN# puppet agent --disable ceph-mon# ceph osd crush reweight osd.<id> 0 // Sett vekting på OSDen til 0, for å migrere data av den, og for å hindre en ny rebalansering når man fjerner OSDen fra crushmap // Vent til rebalanseringen er ferdig ceph-mon# ceph osd out osd.<id> storageNN# systemctl stop ceph-osd@<id> ceph-mon# ceph osd purge osd.<id> --yes-i-really-mean-it storageNN# umount /var/lib/ceph/osd/ceph-<id> // Slett raidet fra hpacucli e.l. Bytt disken fysisk, og opprett nytt raid. // Sørg for at OSet har oppdaget ny disk, og at hieradata for disken stemmer storageNN# puppet agent --enable; puppet agent --test
Lokal montering av disk fra ceph
Det hender at noen brukere ødelegger for seg selv. Da kan det være hyggelig å hjelpe dem litt. I den forbindelse kan det være praktisk å f.eks kunne montere opp disken til en VM, for å hente ut data, fikse feilconfig o.l.
Dette er skrevet for ceph luminous, og må utføres på en host som har Linux Kernel >=4.15, og ha pakken rbd–nbd installert, og ha rett ceph keyrings osv. Pakken blir installert av puppet på alt som inkluderer klassen profile::ceph::client
Nevnte kjerne, kan installeres på Ubuntu 16.04 vha
# apt install linux-image-generic-hwe-16.04-edge
Eller, tank maskinen med HWE-kjernen i utgangspunktet.
- Finn UUID-en til VMen du skal montere opp disken til # openstack server list +--------------------------------------+-----------+---------+--------------------------------------------------------------------------+------------------------------------------+---------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+-----------+---------+--------------------------------------------------------------------------+------------------------------------------+---------+ | 65af6457-51ca-407d-8ab4-aea00ab297c3 | edbmaskin | SHUTOFF | larsep-v6-testnet=192.168.123.14, 2001:700:1d00:ec40:f816:3eff:fe76:b9a9 | Ubuntu Server 16.04 (Xenial Xerus) amd64 | m1.tiny | +--------------------------------------+-----------+---------+--------------------------------------------------------------------------+------------------------------------------+---------+ // Noter ID-en, og sørg for at maskinen er skrudd av før du fortsetter. // På en host med kernel >=4.15, rbd-nbd installert og korrekte ceph-keyrings på plass: # rbd -p volumes ls | grep 65af6457-51ca-407d-8ab4-aea00ab297c3 65af6457-51ca-407d-8ab4-aea00ab297c3_disk // <- dette er objektet vi skal montere opp # rbd-nbd map volumes/65af6457-51ca-407d-8ab4-aea00ab297c3_disk /dev/nbd0 # fdisk -l /dev/nbd0 Disk /dev/nbd0: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xf1917857 Device Boot Start End Sectors Size Id Type /dev/nbd0p1 * 2048 41943006 41940959 20G 83 Linux # mount /dev/nbd0p1 /monter/disken/her // Og vips, har du tilgang til filsystemet :-)
Avmontering
Når du er ferdig, må du selvfølgelig avmontere ceph-objektet
# umount /monter/disken/her // For sikkerhets skyld, kan du sjekke hvilke ceph objekter som er mappet opp # rbd-nbd list-mapped pid pool image snap device 1037278 volumes 65af6457-51ca-407d-8ab4-aea00ab297c3_disk - /dev/nbd0 # rbd-nbd unmap /dev/nbd
Done! Nå er det trygt å skru på igjen VMen
Fjerne passord på Windowsbrukere
Vha trikset "lokal montering av disker fra ceph" nevnt ovenfor, kan man fjerne passordet fra en Windowsbruker dersom brukeren har glemt det; eller at cloudbase-init har funnet på endre det av seg selv (ja, dette har skjedd - flere ganger).
- Monter opp volumet fra ceph, slik nevnt over
- Installer chntpw, dersom det ikke er installert fra før
RDP trenger ikke nødvendigvis å godta innlogging uten passord, så det kan godt hende man må logge inn via konsollet i Horizon og sette nytt passord der.
Haproxy
To take a server out of haproxy rotation the following command can be used:
root@servicelb3:~# echo "disable server bk_keystone_public/controller03" | nc -U /var/lib/haproxy/stats
Openstack
Fix instances stuck in powering-off or powering-on
# Stuck powering-off? nova reset-state --active <id> openstack server stop <id> # Stuck powering-on nova reset-state <id> Reset state for server <id> succeeded; new state is error nova reset-state --active <id> openstack server stop <id> openstack server start <id
List instances on all compute nodes on stack.it.ntnu.no
tmp_file=/tmp/$$.stack.tmp while true ; do rm /tmp/*.stack.tmp for a in $(seq -w 01 07); do echo compute$a >> $tmp_file openstack server list --all --host compute$a >> $tmp_file done clear cat /tmp/bjarneskvms rm $tmp_file sleep 1 done
List all instances in a project
openstack server list --project ntnu-00001
List all instances in a project with specified name
openstack server list --project ntnu-00001 --name bjarneskvm-\*
Migrate all instances away from one node. Be sure that destination have capasity to receive. The break time is included for a safe time to hold ctrl+c
from_node=compute07 to_node=compute04 for a in $(openstack server list --host $from_node --all -f value -c ID); do do echo $a to $to_node openstack server migrate --block-migration --live $to_node --wait $a echo break sleep 3 echo break done
Specify virtual disk controller and/or virtual nic type
Windows does not ship with the virtio drivers. Since our installation always will default to virtio devices for i.e the virtual disk controller and the virtual network interface, the windows images in Glance needs to have these drivers pre-installed.
There may be situations where users want to upload existing Windows images without these drivers installed. To be able to boot them without adding these drivers, it is possible to change the virtual hardware devices:
openstack image set --property hw_disk_bus='ide' <image-id> openstack image set --property hw_vif_model='e1000' <image-id>
This commands will tell KVM/libvirt to use IDE disk controller and E1000 NIC. Be aware that this may reduce the virtual machine performance significantly!
Ping all routers in a given external network
openstack port list -f value --long --network ntnu-[global|internal] | grep router | awk '{print $3}' | cut -d"'" -f2 | xargs -n1 ping -c2
Fix missing neutron dragents in BGP speakers
For some odd reason the BGP speakers seems to forget which neutron dragents they have been configured to include. Here's som troubleshooting tips. Typical symptom is that all the tenant IPv6 routes are gone..
# List all neutron dragents (you will need the ID) $ openstack network agent list --sort-column Host --agent-type bgp +--------------------------------------+---------------------------+---------------+-------------------+-------+-------+---------------------+ | ID | Agent Type | Host | Availability Zone | Alive | State | Binary | +--------------------------------------+---------------------------+---------------+-------------------+-------+-------+---------------------+ | 73d17a70-6d81-4b41-9a17-ea0b64fbbca8 | BGP dynamic routing agent | neutronnet1 | None | :-) | UP | neutron-bgp-dragent | | 181618ad-ec71-4dc2-8074-459ff691d032 | BGP dynamic routing agent | neutronnet2 | None | :-) | UP | neutron-bgp-dragent | | 990cfb8d-4f21-48fa-9bd3-e1eed9f68b1f | BGP dynamic routing agent | neutronnet3 | None | :-) | UP | neutron-bgp-dragent | | f4cbef36-e812-41fc-acc2-57f0fc5e5604 | BGP dynamic routing agent | neutronv4bgp1 | None | :-) | UP | neutron-bgp-dragent | | 16546bec-d33a-4b44-8a0a-ac04b4fbc4af | BGP dynamic routing agent | neutronv4bgp2 | None | :-) | UP | neutron-bgp-dragent | | 8862c571-8e44-47a8-8e89-b091058497d8 | BGP dynamic routing agent | neutronv6bgp1 | None | :-) | UP | neutron-bgp-dragent | | 088a8f05-fb6f-4e2d-8b0c-4dcb2166337f | BGP dynamic routing agent | neutronv6bgp2 | None | :-) | UP | neutron-bgp-dragent | +--------------------------------------+---------------------------+---------------+-------------------+-------+-------+---------------------+ # List the BGP speakers (you will need the name) $ openstack bgp speaker list +--------------------------------------+---------------+----------+------------+ | ID | Name | Local AS | IP Version | +--------------------------------------+---------------+----------+------------+ | 33dc46ad-e6fc-4369-872e-b05436d320ee | bgpspeaker-v4 | 65102 | 4 | | 4c7c1129-f7c4-4756-af32-3d57abe4dc77 | bgpspeaker-v6 | 65102 | 6 | +--------------------------------------+---------------+----------+------------+ # List the dragents currently attached to a given speaker $ openstack bgp speaker show dragents bgpspeaker-v6 +--------------------------------------+---------------+-------+-------+ | ID | Host | State | Alive | +--------------------------------------+---------------+-------+-------+ | 088a8f05-fb6f-4e2d-8b0c-4dcb2166337f | neutronv6bgp2 | True | :-) | | 8862c571-8e44-47a8-8e89-b091058497d8 | neutronv6bgp1 | True | :-) | +--------------------------------------+---------------+-------+-------+ # If some of the agents above are missing, re-add them: $ openstack bgp dragent add speaker 8862c571-8e44-47a8-8e89-b091058497d8 bgpspeaker-v6
Rabbitmq
Manually drain a queue
kanin1# rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged
Fjerne en node fra clusteret (f.eks hvis det har delt seg)
kaninN# rabbitmqctl stop_app kaninN# rabbitmqctl reset ## På dette tidspunktet er det lurt å sjekke rabbitmqctl cluster_status på en annen node, for å verifisere at clusteret ikke lenger er flere partitions # Legg den til igjen kaninN# rabbitmqctl start_app kaninN# rabbitmqctl cluster_status # sjekk at alle er med, og det ikke er noen partitions
Migrering av VMer på infra-noder som kjører KVM
Smørbrødliste med prereqs for å migrere VMer mellom infra-/api-noder som kjører KVM. Lista tar høyde for at du gjør migreringen med en personliggrupper som har nødvendige rettigheter for å arbeide med kvm/librt/qemu. Denne guiden forklarer migrering tunnellert over SSH av VMer uten delt lagring.
- root på noden du skal flytte fra må ha et SSH-nøklepar hvor public keyen er lagt i ~/.ssh/authorized_keys for din egen bruker på noden du flytter til.
- Dette kan vel muligens egentlig fikse med puppet, men det kan selvfølgelig også fikses manuelt per behov...
- Opprett LVM-volumet for VMen som skal flyttes, på noden den skal flyttes til. Gjør gjerne dette i Virtual Machine Manager. Det er enklest.
- VMen som skal flyttes må være konfigurert med en CPU-model som er kompatibel med noden den skal flyttes til. Dersom den ikke er det, skru VMen av, velg en passende modell, og skru den på igjen.
Migreringen gjøres slik, på noden du skal flytte fra. VMen må være på.
$ virsh migrate --p2p --tunneled --persistent --copy-storage-all --verbose <vm-navn> qemu+ssh://<bruker>@<noden du skal flytte til>/system
VMen vil pauses under migreringen
Eksempel:
$ virsh migrate --p2p --tunneled --persistent --copy-storage-all --verbose flyttevm qemu+ssh://foo@kjempefinserver.mitt.domene.er.be.st/system
Kjente og/eller mulige ymse problemer og triks
- Vi har observert at VMer som migreres til ny host kan finne på å ta samme macvtap-interface som allerede kjørende VM. Det skaper åpenbart meget lite nettvirk når disse maskinen står på samtidig.
- Hvilket macvtap-interface VMene har, kan sjekkes med
virsh domiflist <vm-navn>
- Løsning: Skru av begge VMene. Skru dem på igjen, én og én
- Hvilket macvtap-interface VMene har, kan sjekkes med
- Hvis du endret CPU-model for VMen på flyttefot, kan det være hyggelig å endre den tilbake når den er ferdig flyttet. "Copy host-model" er en fin variant.
Utvide disk på VMer på infra-/api-noder som kjører KVM
De aller fleste VMene på disse KVM-hostene klarer seg fint med de 20 kjempebitene vi bruker som standard. Allikevel hender det at behovet for fler kjempebiter melder seg. Da bør man følge denne oppskriften:
Logg inn på KVM-hosten VMen kjører på, og kjør følgende kommando. Da blir VMens disk større
root@infraN# lvextend -L +<NN>G /dev/vmvg/<vm-navn>
Det virker som om VMene ikke helt klarer å få med seg at disken vokser. Derfor kan det være en god idé å skru den av og på igjen. (her dropper vi kommandoeksempel, for det tror vi de fleste vet hvordan man gjør)
VMene kjører også LVM. Derfor må vi utvide LVM-partisjonen:
root@kulvm# parted /dev/vda (parted) print <snip> Number Start End Size Type File system Flags 1 1049kB 1024MB 1023MB primary ext4 boot 2 1026MB 42.9GB 41.9GB extended 5 1026MB 5120MB 4095MB logical linux-swap(v1) 6 5121MB 42.9GB 37.8GB logical lvm ##### Her er partisjon 6 en del av den utvidede partisjon 2, derfor må vi først utvide 2, deretter 6. (parted) resizepart 2 Warning: Partition /dev/vda2 is being used. Are you sure you want to continue? Yes/No? yes End? [42.9GB]? 100% (parted) resizepart 6 End? [42.9GB]? 100% (parted) print <snip> Number Start End Size Type File system Flags 1 1049kB 1024MB 1023MB primary ext4 boot 2 1026MB 64.4GB 63.4GB extended 5 1026MB 5120MB 4095MB logical linux-swap(v1) 6 5121MB 64.4GB 59.3GB logical lvm (parted) quit ##### Og, vips har partisjonen blitt større
Nå må vi fortelle LVM at partisjonen har vokst (vda6 er da tilsvarende partisjon 6 i forrige steg. Den kan finne på å ha et annet tall). Sjekk gjerne at den har ledig plass etter å ha kjørt resize.
root@kulvm# pvresize /dev/vda6 Physical volume "/dev/vda6" changed 1 physical volume(s) resized / 0 physical volume(s) not resized root@kulvm# pvs PV VG Fmt Attr PSize PFree /dev/vda6 kulvm-vg lvm2 a-- 55.23g 20.00g
Da gjenstår det bare å utvide det logiske volumet på VMen som trenger mer plass. Flagget -r
utvider filsystemet i samme slengen.
root@kulvm# lvextend -L +20G -r /dev/kulvm-vg/var
ipmitool
apt install ipmitool
Hvis den ikke oppfører seg:
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory then you need to enable the following modules modprobe ipmi_devintf modprobe ipmi_si
SQL
Div kjekke SQL-spørringer som er mye raskere enn Openstack CLI og ei for-løkke
Hente info fra MISC-VMer
# Hent alle kjørende VMer i SkyHiGh's MISC-prosjekt, og all metadata knyttet til VMene MariaDB [nova]> SELECT i.uuid,i.hostname,md.key,md.value FROM instances i INNER JOIN instance_metadata md ON i.uuid = md.instance_uuid WHERE i.project_id='d9c7305133b44e98b2cf74aca04cc610' AND i.deleted=0 ; # Det eksemplet der var ikke så kult, fordi dette er også ganske raskt: openstack server list --project MISC --long --fit-width -c ID -c Name -c Status -c Properties
Hent alle prosjekter som har igjen færre enn N dager å leve
Hvor N er tallet (her eksempelvis 30) på slutten av spørringa
MariaDB [keystone]> SELECT name, extra FROM project WHERE domain_id=(SELECT id FROM project WHERE is_domain=1 AND name='NTNU') AND DATEDIFF(STR_TO_DATE(JSON_VALUE(extra,'$.expiry'),'%d.%m.%Y'),NOW()) <= 30;
Hent alle prosjekter uten expiry satt
MariaDB [keystone]> SELECT name FROM project WHERE domain_id=(SELECT id FROM project WHERE is_domain=1 AND name='NTNU') AND extra NOT LIKE '%expiry%';