Ero sivun ”Debian homelab(opennebula, drbd, linstor ja ocfs2)” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
Ei muokkausyhteenvetoa
 
(104 välissä olevaa versiota samalta käyttäjältä ei näytetä)
Rivi 1: Rivi 1:
Tässä luodaan kolmen Debian 11/12 palvelimen klusteri [[homelab]]testaustarkoitukseen.
[[Tiedosto:135e3d55-669d-4e0e-95fe-66dfd6d6b783.jpg|pienoiskuva]]
Tässä luodaan kolmen Debian 11/12 palvelimen [[homelab]] ja/tai testiklusteri.


==Laitteistovaatimukset==
== Laitteistovaatimukset ==
Jokaisessa 3:ssa koneessa tulee minimissään löytyä seuraavat ominaisuudet:
Jokaisessa 3:ssa koneessa tulee minimissään löytyä seuraavat ominaisuudet:
* 4GB RAM
* 4GB RAM
* 2 ytiminen prosessori(suositeltava minimi 4 ydintä) ja valmistajasta riippuen [https://en.wikipedia.org/wiki/X86_virtualization#Processor VT-x tai AMD-V ominaisuudella]
* 2 ytiminen prosessori(suositeltava minimi 4 ydintä) ja valmistajasta riippuen [https://en.wikipedia.org/wiki/X86_virtualization#Processor VT-x tai AMD-V ominaisuudella]
* 1 kpl kiintolevy 10GB, jossa juuriosio ja johon on asennettu käyttöjärjestelmä
* 1 kpl kiintolevy 10GB (/dev/sda), jossa juuriosio ja johon on asennettu käyttöjärjestelmä
* 1 kpl kiintolevy 50GB, joka liitetään klusterin yhteiseksi levyksi
* 1 kpl kiintolevy 50GB (/dev/sdb), joka liitetään klusterin yhteiseksi levyksi
* 1 kpl Gigabitin verkkokortti RJ-45
* 1 kpl Gigabitin verkkokortti RJ-45


Laittistovaatimuksille ei perinteisesti ole ylärajaa. Edellämainitut ominaisuudet siis minimi vaatimukset ja mitä tehokkaampi laitteisto käytössä, sitä sulavammin ohjelmisto toimii.
Laittistovaatimuksille ei perinteisesti ole ylärajaa. Edellämainitut ominaisuudet siis minimi vaatimukset ja mitä tehokkaampi laitteisto käytössä, sitä sulavammin ohjelmisto toimii.


== Ohjelmistovaatimukset ==
* 1 kpl (controlnode)Debian 11 tuoreella minimaalisella asennuksella. Tämä palvelin toimii sekä osana klusteria, että käyttöliittymänä ja hallitsee muita klusterissa olevia palvelimia ja palveluita.
* 2 kpl(node 1 ja 2) Debian 12 tuoreella minimaalisella asennuksella.


==Ohjelmistovaatimukset==
Tässä ohjeessa emme käy [[Debian]]in perusasennusta läpi, koska onnistuakseen tässä pitää osata asentaa Debian ja tietää myös muita peruskäsitteitä Debianista ja Linux-järjestelmästä yleisesti.
* 1 kpl Debian 11 tuoreella minimaalisella asennuksella. Tämä palvelin toimii sekä osana klusteria, että käyttöliittymänä ja hallitsee muita klusterissa olevia palvelimia ja palveluita.
* 2 kpl Debian 12 tuoreella minimaalisella asennuksella.  


Seuraavat toimenpiteet tehdään jokaisessa klusterin palvelimessa.
== Muokataan /etc/hosts- tiedosto ==
sudo nano /etc/hosts
Lisätään rivit:
192.168.1.200  control.lan  control
192.168.1.201  node-1.lan  node-1
192.168.1.202 node-2.lan  node-2
Poistutaan ctrl+x
== Asennetaan [[ZFS]] -tiedostojärjestelmä ==
sudo apt install apt linux-headers-amd64 zfsutils-linux zfs-dkms zfs-zed
== Luodaan [[zpool]] looginen varanto ==
Haetaan /dev/sdb:n disk-id
  ls -lh /dev/disk/by-id/
Luodaan varanto tulosteesta saadusta disk-id:stä
Debian 11:
sudo zpool create controltank <disk-id>
Debian 12 node-1
sudo zpool create nodetank1 <disk-id>
Debian 12 node-2
sudo zpool create nodetank2 <disk-id>
== Asennetaan [[DRBD]] ja [[Linstor]] ==
Debianin pakettivarastoista ei löydy Linstoria, eikä sen vaatimaa DRBD 9 versiota, pelkästään version nro 8 löytyy, eikä se tue kuin kahta palvelinta, eikä myöskään Linstor tue kasiversiota. Joten käännämme tarvittavat paketit Ubuntun PPA:sta löytyvistä paketeista.
Nämä pitää tehdä Debian 11 koneella ja toisella Debian 12 koneella, valmiit .deb paketit voi kopioida ja asentaa käännöskoneena käytetyltä Debian 12 koneelta toiselle.
Asennetaan Debian SDK
sudo apt -y install devscripts build-essential dkms
Asennetaan [https://sdkman.io/ SDKMAN] ja Linstorin vaatima uusin [https://gradle.org/ Gradle] sen avulla.
SDKMAN:
sudo apt -y install curl zip && curl -s "https://get.sdkman.io" | bash
Ja sen jälkeen Gradle:
sdk install gradle 8.7
'''HUOM! Tässä ohjeessa haetaan uusimmat ohjeen kirjoittamisen aikaan(27.4.2024) olleet dsc:t. Linbitin PPA:sta poistuu vanhoja ja uusia tulee tilalle melko usein, joten ei kannata tästä suoraan copypeistata, vaan hakea uusimmat dsc:t täältä: [https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+packages Linbit/Ubuntu PPA DRBD9 stack] '''
Luodaan kansiot ja haetaan Ubuntun PPA:sta dsc-tiedot:
cd ~ && mkdir drbd && mkdir drbd-utils && mkdir -p linstor/server && mkdir -p linstor/client && mkdir -p linstor/python && mkdir drbd-linstor-debs
Kernelin tarvitsema DRBD-moduuli:
cd drbd && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/drbd/9.2.9~rc.1-1ppa1~jammy1/drbd_9.2.9~rc.1-1ppa1~jammy1.dsc
cd drbd-9.2.9~rc.1 && sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv drbd-dkms*.deb drbd-ueficert*.deb ~/drbd-linstor-debs/ && cd ..
Käyttöjärjestelmän tarvitsema drbd-utils paketti:
cd drbd-utils && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/drbd-utils/9.28.0~rc.1-1ppa1~jammy1/drbd-utils_9.28.0~rc.1-1ppa1~jammy1.dsc
cd drbd-utils-9.28.0~rc.1 && sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv drbd-utils*.deb  ~/drbd-linstor-debs/ && cd ..
Linstor server paketit:
cd linstor/server && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/linstor-server/1.27.0-1ppa1~jammy1/linstor-server_1.27.0-1ppa1~jammy1.dsc
cd linstor-server-1.27.0
nano debian/control
Muutetaan Build-Dependseistä
gradle (>=4.4.1-13)
Tallennetaan ja poistutaan ctrl+x
sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv linstor*.deb ~/drbd-linstor-debs/ && cd ..
Linstor client paketti:
cd client && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/linstor-client/1.22.0-1ppa1~jammy1/linstor-client_1.22.0-1ppa1~jammy1.dsc
cd linstor-client-1.22.0 && sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv linstor*.deb ~/drbd-linstor-debs/ && cd ..
Linstor python paketti:
cd python && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/python-linstor/1.22.0-1ppa1~jammy1/python-linstor_1.22.0-1ppa1~jammy1.dsc
cd python-linstor-1.22.0 &&  sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv python-linstor*.deb ~/drbd-linstor-debs/ && cd ~/drbd-linstor-debs/
Asennetaan riippuvuudet ja käännetyt paketit:
sudo apt install python3-natsort && sudo dpkg -i *.deb
Paketit asentuvat yleensä puhtaaseen Debian-asennukseen, mutta jos on tehty pienikin muokkaus niin häiriöitä voi esiintyä. Jos paketit eivät asennu ilman erroreita niin komento:
sudo reboot
Ja pakettien uudelleenasennus:
cd ~/drbd-linstor-debs/ && sudo dpkg -i *.deb
Jos vieläkään ei asennu niin komento:
sudo dmesg
Myös /var/log-tiedoston tutkiminen voi auttaa. Jos mikään ei auta niin paketit verkkolevylle tai muistitikulle talteen ja Debianin uudelleenasennus ja sitten pakettien asennus "puhtaaseen tauluun".
== Luodaan DRBD/Linstor klusteri ==
'''Huom! Nämä komennot annetaan AINOASTAAN Debian 11 control-koneessa.'''
Käynnistetään ja kytketään linstor-controller päälle:
sudo systemctl enable --now linstor-controller
Lisätään palvelimet klusteriin:
linstor node create control 192.168.1.200 --node-type combined
linstor node create node-1 192.168.1.201
linstor node create node-1 192.168.1.202
Komennolla:
linstor node list
Tulostuu seuraavaa:
{| class="wikitable"
|-
! Node !! NodeType !! Addresses !! State
|-
| control || COMBINED || 192.168.1.200:3366 (PLAIN) || Online
|-
| node-1 || SATELLITE || 192.168.1.201:3366 (PLAIN) || Online
|-
| node-2 || SATELLITE || 192.168.1.202:3366 (PLAIN) || Online
|}
Luodaan tallennusvaranto:
linstor storage-pool create zfs control homelabpool controltank
linstor storage-pool create zfs node-1 homelabpool nodetank1
linstor storage-pool create zfs node-2 homelabpool nodetank2
Komennolla:
linstor storage-pool list
Tulostuu jotakuinkin seuraavaa:
{| class="wikitable"
|-
! StoragePool !! Node  !! Driver !! PoolName !! FreeCapacity !!  TotalCapacity !! CanSnapshots !! State !! SharedName
|-
| DfltDisklessStorPool || control || DISKLESS || || || || False || Ok || control;DfltDisklessStorPool
|-
| DfltDisklessStorPool || node-1 || DISKLESS || || || || False || Ok || node-1;DfltDisklessStorPool
|-
| DfltDisklessStorPool || node-2 || DISKLESS || || || || False || Ok || node-2;DfltDisklessStorPool
|-
| homelabpool || control || ZFS || controltank || 50.00 GiB || 50.00 GiB || True || Ok || control;homelabpool
|-
| homelabpool || node-1 || ZFS || nodetank1 || 50.00 GiB || 50.00 GiB || True || Ok || node-1;homelabpool
|-
| homelabpool || node-2 || ZFS || nodetank2 || 50.00 GiB || 50.00 GiB || True || Ok || node-2;homelabpool
|-
|}
Luodaan resurssiryhmä ja määritellään tallennustila sille:
linstor resource-group create homelabrg --storage-pool homelabpool --place-count 3
Luodaan looginen tallennustila:
linstor resource-definition create homelabdisk0
linstor volume-definition create homelabdisk0 40G
linstor resource create control homelabdisk0 --storage-pool homelabpool
linstor resource create node-1 homelabdisk0 --storage-pool homelabpool
linstor resource create node-1 homelabdisk0 --storage-pool homelabpool
Tarkistuskomento:
linstor resource-definition list
Tulostaa jotakuinkin seuraavaa:
{| class="wikitable"
|-
! ResourceName !! Port !! ResourceGroup !! State
|-
| homelabdisk0 || 7000 || DfltRscGrp || ok
|-
|}
Ja jos kaikki meni oikein niin tarkastuskomento:
linstor resource list
Tulostaa jotakuinkin seuraavaa:
{| class="wikitable"
|-
! ResourceName !! Node !! Port !! Usage !! Conns !! State !! CreatedON
|-
| homelabdisk0 || control ||  || Unused || Ok || UpToDate || 2024-04-26 17:55:13
|-
| homelabdisk0 || node-1 ||  || Unused || Ok || UpToDate || 2024-04-26 17:58:13
|-
| homelabdisk0 || node-2 ||  || Unused || Ok || UpToDate || 2024-04-26 17:59:13
|}
Seuraavaksi sallitaan kaikkien klusterin palvelinten liittää samanaikaisesti Linstorin luoma jaettu /dev/drbd1000 resurssi:
linstor controller drbd-options --allow-two-primaries yes
'''<big>Huom! Tuota yllämainittua komentoa/ominaisuutta ei voi käyttää kuin [[Ocfs2]] ja [[GFS2]] tiedostojärjestelmien kanssa. Muilla(esim. [[ext4]] tai [[btrfs]] )järjestelmä vikaantuu pahasti.</big>'''
== [[Ocfs2]]-tiedostojärjestelmän asennus ja käyttöönotto ==
Seuraavat komennot annetaan jälleen kaikissa kolmessa palvelimessa.
Asennetaan komennolla:
sudo apt install ocfs2-tools
Luodaan klusteri:
sudo o2cb add-cluster homelabcluster
Lisätään palvelimet klusteriin:
sudo o2cb add-node homelabcluster control --ip 192.168.1.200 --port 7777 --number 0
sudo o2cb add-node homelabcluster node-1 --ip 192.168.1.201 --port 7777 --number 1
sudo o2cb add-node homelabcluster node-2 --ip 192.168.1.202 --port 7777 --number 2
Rekisteröidään klusteri:
sudo o2cb register-cluster homelabcluster
Tarkistetaan klusterin asetustiedosto:
cat /etc/ocfs2/cluster.conf
Jos kaikki meni oikein sen pitäisi antaa seuraanvan kaltainen tuloste:
cluster:
name = homelabcluster
heartbeat_mode = local
node_count = 3
node:
cluster = homelabcluster
number = 0
ip_port = 7777
ip_address = 192.168.1.200
name = control
node:
cluster = homelabcluster
number = 1
ip_port = 7777
ip_address = 192.168.1.201
name = node-1
node:
cluster = homelabcluster
number = 2
ip_port = 7777
ip_address = 192.168.1.202
name = node-2
'''HUOM! Debianin paketissa on bugi ja klusteri ei käynnisty ennenkuin teet pari manuaalista liitosta komennoilla. Tämä täytyy EHKÄ tehdä jokaisen käynnistyksen jälkeen, tai automatisoida se esimerkiksi crontabiin:'''
sudo mount -t ocfs2_dlmfs none /dlm && sudo sudo mount -t configfs none /config
Mikäli edellinen komento antaa virheen ja juuritiedostojärjestelmässä ei ole kansioita dlm ja config, voit luoda ne ja liittää komennolla:
sudo mkdir /dlm && sudo mkdir /config && sudo mount -t ocfs2_dlmfs none /dlm && sudo mount -t configfs none /config
Tämän jälkeen klusteri voidaan käynnistää kaikissa kolmessa palvelimessa komennolla ja samalla tarkistaa toiminta:
sudo /etc/init.d/o2cb start && sudo /etc/init.d/o2cb status
Tuloste pitäisi olla esimerkiksi Debian 12 node-1:ssä tämän kaltainen:
o2cb.service - LSB: Load O2CB cluster services at system boot.
Loaded: loaded (/etc/init.d/o2cb; generated)
Active: active (running) since Sat 2024-04-27 13:25:20 EEST; 3s ago
Docs: man:systemd-sysv-generator(8)
Process: 45895 ExecStart=/etc/init.d/o2cb start (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 9371)
Memory: 236.0K
CPU: 73ms
CGroup: /system.slice/o2cb.service
`-45942 o2hbmonitor
Apr 27 13:25:20 node-1 systemd[1]: Starting o2cb.service - LSB: Load O2CB cluster services at system boot....
Apr 27 13:25:20 node-1 o2cb[45895]: checking debugfs...
Apr 27 13:25:20 node-1 o2cb[45895]: Loading stack plugin "o2cb": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Loading filesystem "ocfs2_dlmfs": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Mounting ocfs2_dlmfs filesystem at /dlm: OK
Apr 27 13:25:20 node-1 o2cb[45895]: Setting cluster stack "o2cb": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Registering O2CB cluster "homelabcluster": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Setting O2CB cluster timeouts : OK
Apr 27 13:25:20 node-1 o2hbmonitor[45942]: Starting
Apr 27 13:25:20 node-1 systemd[1]: Started o2cb.service - LSB: Load O2CB cluster services at system boot..
Nyt voidaan luoda ocfs2-tiedostojärjestelmä Linstorin luomaan DRDB-osioon.
'''Seuraava komento annetaan ainoastaan Debian 11 control nodessa:'''
sudo mkfs.ocfs2 -b 4k -C 1M -N 3 -L homelab /dev/drbd1000
Jossa -b block size, -C cluster size, -N node count, -L label
Tiedostojärjestelmän luonnin jälkeen tehdään kaikissa palvelimissa  /var/lib/one/datastores- kansio ja liitetään /dev/drbd1000 siihen seuraavalla komennolla:
sudo mkdir -p /var/lib/one/datastores && sudo mount /dev/drbd1000 /var/lib/one/datastores
Tarkistetaan lsblk -f komennolla:
lsblk -f
Joka tulostaa levyt/tiedostojärjestelmät ja jos kaikki meni kaikilla palvelimilla oikein niin tulosteesta pitäisi löytyä rivi:
zd0        drbd      v09                                             
└─drbd1000               
Vielä voi tarkistaa df -h komennolla, että drbd laite on liitetty:
df -h
Tulosteesta pitäisi löytyä jotakuinkin tälläinen rivi:
/dev/drbd1000        50G  0,1G  50G  1% /var/lib/one/datastores
Ja jos kaikki meni oikein niin linstorin tarkastuskomento:
linstor resource list
Tulostaa nyt jotakuinkin seuraavaa:
{| class="wikitable"
|-
! ResourceName !! Node !! Port !! Usage !! Conns !! State !! CreatedON
|-
| homelabdisk0 || control ||  || InUse || Ok || UpToDate || 2024-04-26 17:55:13
|-
| homelabdisk0 || node-1 ||  || InUse || Ok || UpToDate || 2024-04-26 17:58:13
|-
| homelabdisk0 || node-2 ||  || InUse || Ok || UpToDate || 2024-04-26 17:59:13
|}
== Asennetaan [[Bridge-utils]] [[KVM]], [[Qemu]], [[libvirt]] ja [[Docker]] ==
Bridge-utils, [[KVM]], Qemu ja libvirt asennetaan seuraavalla komennolla:
sudo apt -y install bridge-utils qemu-system libvirt-daemon-system
[[Docker]] asennetaan seuraavasti:
sudo apt update
sudo apt -y install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Luodaan verkkosilta OpenNebulaan asennettaville virtuaalikoneille
sudo nano /etc/network/interfaces
[[DHCP]] silta(ei suositeltava) konfiguraatiosta tehdään tälläinen:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp0s25
iface enp0s25 inet manual
#Bridge br1 network configurations
auto br1
iface br1 inet dhcp
bridge_ports enp0s25
bridge_stp off      # disable Spanning Tree Protocol
bridge_waitport 0    # no delay before a ort becomes available
bridge_fd 0          # no forwarding delay
Tai suositeltava staattininen silta konfiguraatiosta tehdään tälläinen:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp0s25
iface enp0s25 inet manual
#Bridge br1 network configurations
auto br1
iface br1 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports enp0s25
bridge_stp off      # disable Spanning Tree Protocol
bridge_waitport 0    # no delay before a ort becomes available
bridge_fd 0          # no forwarding delay
== Asennetaan [[OpenNebula]] ==
'''Nämä komennot vain Debian 11 control node.'''
Lisätään pakettivaraston avain ja pakettivarasto:
sudo -i
wget -q -O- https://downloads.opennebula.io/repo/repo2.key | gpg --dearmor --yes --output /etc/apt/keyrings/opennebula.gpg
echo "deb [signed-by=/etc/apt/keyrings/opennebula.gpg] https://downloads.opennebula.io/repo/6.8/Debian/11 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
exit
Asennetaan Opennebula käyttöliittymä ja virtualisointiympäristö:
sudo apt update && sudo apt -y install opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow opennebula-provision opennebula-node-kvm docker-machine-opennebula
Lisätään asennuksen luoma oneadmin käyttäjä libvirt ja docker-ryhmiin
sudo adduser oneadmin docker && sudo adduser oneadmin libvirt
Vaihdetaan oneadmin-käyttäjäksi ja lisätään salasana:
sudo -u oneadmin /bin/sh
echo 'oneadmin:vaihdaminut123' > /var/lib/one/.one/one_auth
Kytketään ja käynnistetään OpenNebula:
sudo systemctl enable --now opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow
Jos kaikki meni putkeen ja palomuurista portti 9869 auki, voit selaimella mennä osoitteeseen https://<debian11_control_ip-osoite>:9869
Ja kirjautua oneadmin käyttäjänä ja aiemmin antamallisi salasanalla hallintapaneeliin.
'''Nämä komennot vain Debian 12 koneissa.'''
Koska osassa opennebulan paketeista on vielä tätä ohjetta kirjoitettaessa ristiriitaisuuksia Debian 12:n pakettien kanssa niin asennetaan pelkästään varmasti toimivat paketit näihin palvelimiin seuraavasti:
sudo apt install augeas-tools libnbd-bin ruby-sqlite3 ipset rsync ruby jq vlan
mkdir opennebula && cd opennebula
wget https://downloads.opennebula.io/repo/6.8/Debian/11/pool/opennebula/opennebula-common_6.8.0-1_all.deb
wget https://downloads.opennebula.io/repo/6.8/Debian/11/pool/opennebula/opennebula-common-onecfg_6.8.0-1_all.deb
wget https://downloads.opennebula.io/repo/6.8/Debian/11/pool/opennebula/opennebula-node-kvm_6.8.0-1_all.deb
sudo dpkg -i *.deb && sudo apt -f install
Oneadmin-käyttäjälle täytyy luoda salasanaton [[ssh]]-kirjautuminen palvelimien välille ja sitten voidaan Debian 12 palvelimet lisätä Debian 11 hallintapaneelista virtuaalikoneisänniksi.
HUOM! Oneadmin kayttäjän kotikansio on /var/lib/one ja ssh tiedot myös tallentuu ja haetaan sieltä. isäntiä ei saa lisättyä control-nodeen ellei näistä sijainneista löytyviä ssh-avaimia luoda ja kopioida esim. [[scp]]:n avulla koneelta toiselle /var/lib/one/.ssh/authorized_keys tiedostoon.
OpenNebula käyttää myös kansiota /var/tmp/one mutta asennuspaketti ei joka kerta sitä uudelle koneelle asennettaessa luo, joku bugi ilmeisesti, jolloin klusteri ei toimi. Siinä tapauksessa puuttuva /var/tmp/one kansio taytyy vain luoda [[mkdir]]-komennolla ja [[chown]]illa vaihtaa sen omistusoikeus oneadminille.
==Huomiota==
* Nyt on kolmen palvelimen korkean käytettävyyden [[homelab]] -perusta konfiguroitu.
* Klusteriin voi nyt lisätä palvelimia ja lisätä ne [[OpenNebula]]an isänniksi. Voi lisätä kovalevyjä ja tehdä niistä [[Linstor]]in ja [[Ocfs2]]:n avulla lisää jaettuja levyjä ja ajaa vaikka [[NFS]] ja/tai [[Samba]] -servereitä niillä.
* Voi lisätä [[Docker]] -kontteja eri sovelluksille tai ajaa vaikka [[Kubernetes]]tä klusterissa
* Voi rakentaa kokonaisen virtualisoidun pilviympäristön palomuureineen, verkkolevyineen reitittimineen yms.
* Yhteisen jaetun levyn ansiosta voit sulavasti siirtää jopa sammuttamatta virtuaalikoneen isännältä toiselle. Ks. [https://en.wikipedia.org/wiki/Live_migration Wikipedian Live migration artikkeli(englanniksi)]
* Voi ajaa klusterin päällä esim. [[Distcc]]:tä ja tehdä esim. Linux-[[ytimen_kääntäminen]] nopeammaksi. Tai minkä muun paketin tahansa.
==Erittäin tärkeää==
* Linstoria ajetaan tässä dual-primary moodissa ja äkillisen virtakatkoksen tai muun häiriön tapahtutuessa palvelinten uudelleenkäynnistyksen yhteydessä saattaa tapahtua nk. [https://www.google.com/search?q=split+brain+drbd&sca_esv=ee520a4c543f855e&sxsrf=ACQVn08x_CGXtg7oj1_8Cg7hJNlTDRbH9g%3A1714227872009&ei=oAotZrQLpY3A8A_v4JCoDg&udm=&oq=split+brain+dr&gs_lp=Egxnd3Mtd2l6LXNlcnAiDnNwbGl0IGJyYWluIGRyKgIIAjIIEAAYgAQYywEyCBAAGIAEG split-brain reaktio], joka tarkoittaa, että palvelin ei tiedä miltä koneelta tieto haetaan replikoitavaksi ja on haasteellista saada järjestelmä tästä virheestä toipumaan ilman uudelleenasennusta ja tietojen häviämistä. Joten etenkin tuotantokäytössä on syytä heti käyttöönoton jälkeen aloittaa [[crontab]]in ja vaikka [[rsync]]in avulla Linstorin DRBD-osion säännöllinen tiheä [[varmuuskopiointi]].
==Viritysvinkkejä==
*Useissa netistä löytyvissä ohjeissa suositellaan tai jopa käsketään konffata kahta verkkokorttia käyttäen. Siinä tietysti puolensa, koska helpompaa tehdä kahdella verkkoliitynnällä. Mutta vaikka asennetaan kaks verkkokorttia niin kannattaa bondata verkkoyhteydet ja [[vlan]]ia hyödyntäen niillä verkkoyhteydet koneille, niin on aina maksimit käytössä, eikä replikointi vie kaikkea kaistaa kotiverkossa olevilta muilta koneilta.
*Klusterin nopeutta saa kasvatettua huomattavasti verkkokorttien [[Verkkoliitynnät_monipuolisemmin#Yhteysnopeuden_kasvattaminen_ryhmitt.C3.A4m.C3.A4ll.C3.A4|bondingilla]] ja/tai tietenkin 2,5Gbitin tai jopa 10 Gigan verkkokorteilla ja kytkimillä.
*Toisekseen klusterin nopeutta saa kasvatettua paljon NVME-levyillä ja suurella määrällä RAM-muistia ja ajamalla niitä sovelluksia ja/tai virtuaalikoneita [[ramdisk]]issä jotka tarvitsevat paljon nopeutta/tehoa
*Helppo ja halpa tapa kasvattaa nopeutta on tietysti rakentaa [[zpool]]-pakka [[RAIDZ]]-muotoon stripingiä hyödyntymällä, joka vastaa muiden tiedostojärjestelmien [[RAID]]0-tasoa. Tässä systeemissä on [[varmuuskopiointi]] aivan äärimmäisen tärkeää. Vaikka klusteri toimii ja DRBD-osioilta saa tiedot vaikka vain kaksi konetta olisi päällä niin kun menee tilttiin niin kaikki tieto on vaarassa hävitä.
*OpenNebula control ja Linstor controlleria voi ajaa vaikka pöytäkoneella Docker-konteissa ja WakeOnLan:illa käynnistää klusterin koneet vain silloin ja sitä mukaa kun  niitä tarvii, niin se näkyy kyllä kodin sähkölaskussa. Etenkin jos klusterissa on vaikka 8 kpl servereitä, kuten tämän artikkelin alkuperäisellä kirjoittajalla on artikkelin kirjoittamisen aikaan.
==Aiheesta muualla==
*[https://openzfs.org/wiki/Main_Page OpenZFS wiki (englanniksi)]
*[https://linbit.com/user-guides-and-product-documentation/ DRBD ja Linstor virallinen dokumentaatio (enlanniksi)]
*[https://brian-candler.medium.com/linstor-networked-storage-without-the-complexity-c3178960ce6b Linstor klusterin tekeminen LXC kontteihin (englanniksi)]
*[https://pub.nethence.com/storage/drbd-linstor DRBD ja Linstor -ohje (englanniksi)]
*[https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack Linbitin Ubuntu paketit]
*[https://wiki.debian.org/BuildingTutorial#Method_1:_apt_source Debian wikin pakettien teko-ohje (englanniksi)]
*[https://wiki.debian.org/CreatePackageFromPPA Debian wikin Ubuntu pakettien käännösohje (englanniksi)]
*[https://ocfs2.wiki.kernel.org/ Ocfs2 wiki (englanniksi)]
*[https://docs.docker.com/engine/install/debian/ Dockerin Debian dokumentaatio (englanniksi)]
*[https://libvirt.org/ Libvirt dokumentaatio (englanniksi)]
*[https://linux-kvm.org/page/Main_Page KVM hypervisorin dokumentaatio (englanniksi)]
*[https://docs.opennebula.io/6.8/overview/opennebula_concepts/opennebula_overview.html OpenNebulan virallinen dokumentaatio (englanniksi)]
*[https://computingforgeeks.com/install-opennebula-kvm-node-on-debian/ OpenNebula KVM-noden konfigurointi -ohje (englanniksi)]
*[https://docs.opennebula.io/6.0/installation_and_configuration/containerized_deployment/architecture_deployment.html Frontend node Docker/Podman kontissa(englanniksi)]
[[Luokka:Verkko]]
[[Luokka:Tiedostojärjestelmät]]
[[Luokka:Ohjeet]]
[[Luokka:Ohjeet]]
[[Luokka:Debian GNU/Linux]]
[[Luokka:Debian GNU/Linux]]
[[Luokka:Palvelimet]]
[[Luokka:Palvelimet]]
[[Luokka: Virtuaalikoneet ja emulaattorit]]
[[Luokka:Emulaattorit ja virtuaalikoneet]]
[[Luokka:Pilvipalvelut]]

Nykyinen versio 6. toukokuuta 2024 kello 10.33

Tässä luodaan kolmen Debian 11/12 palvelimen homelab ja/tai testiklusteri.

Laitteistovaatimukset[muokkaa]

Jokaisessa 3:ssa koneessa tulee minimissään löytyä seuraavat ominaisuudet:

  • 4GB RAM
  • 2 ytiminen prosessori(suositeltava minimi 4 ydintä) ja valmistajasta riippuen VT-x tai AMD-V ominaisuudella
  • 1 kpl kiintolevy 10GB (/dev/sda), jossa juuriosio ja johon on asennettu käyttöjärjestelmä
  • 1 kpl kiintolevy 50GB (/dev/sdb), joka liitetään klusterin yhteiseksi levyksi
  • 1 kpl Gigabitin verkkokortti RJ-45

Laittistovaatimuksille ei perinteisesti ole ylärajaa. Edellämainitut ominaisuudet siis minimi vaatimukset ja mitä tehokkaampi laitteisto käytössä, sitä sulavammin ohjelmisto toimii.

Ohjelmistovaatimukset[muokkaa]

  • 1 kpl (controlnode)Debian 11 tuoreella minimaalisella asennuksella. Tämä palvelin toimii sekä osana klusteria, että käyttöliittymänä ja hallitsee muita klusterissa olevia palvelimia ja palveluita.
  • 2 kpl(node 1 ja 2) Debian 12 tuoreella minimaalisella asennuksella.

Tässä ohjeessa emme käy Debianin perusasennusta läpi, koska onnistuakseen tässä pitää osata asentaa Debian ja tietää myös muita peruskäsitteitä Debianista ja Linux-järjestelmästä yleisesti.

Seuraavat toimenpiteet tehdään jokaisessa klusterin palvelimessa.

Muokataan /etc/hosts- tiedosto[muokkaa]

sudo nano /etc/hosts

Lisätään rivit:

192.168.1.200   control.lan  control
192.168.1.201   node-1.lan   node-1
192.168.1.202	node-2.lan   node-2

Poistutaan ctrl+x

Asennetaan ZFS -tiedostojärjestelmä[muokkaa]

sudo apt install apt linux-headers-amd64 zfsutils-linux zfs-dkms zfs-zed

Luodaan zpool looginen varanto[muokkaa]

Haetaan /dev/sdb:n disk-id

 ls -lh /dev/disk/by-id/

Luodaan varanto tulosteesta saadusta disk-id:stä Debian 11:

sudo zpool create controltank <disk-id>

Debian 12 node-1

sudo zpool create nodetank1 <disk-id>

Debian 12 node-2

sudo zpool create nodetank2 <disk-id>

Asennetaan DRBD ja Linstor[muokkaa]

Debianin pakettivarastoista ei löydy Linstoria, eikä sen vaatimaa DRBD 9 versiota, pelkästään version nro 8 löytyy, eikä se tue kuin kahta palvelinta, eikä myöskään Linstor tue kasiversiota. Joten käännämme tarvittavat paketit Ubuntun PPA:sta löytyvistä paketeista.

Nämä pitää tehdä Debian 11 koneella ja toisella Debian 12 koneella, valmiit .deb paketit voi kopioida ja asentaa käännöskoneena käytetyltä Debian 12 koneelta toiselle.

Asennetaan Debian SDK

sudo apt -y install devscripts build-essential dkms

Asennetaan SDKMAN ja Linstorin vaatima uusin Gradle sen avulla.

SDKMAN:

sudo apt -y install curl zip && curl -s "https://get.sdkman.io" | bash

Ja sen jälkeen Gradle:

sdk install gradle 8.7

HUOM! Tässä ohjeessa haetaan uusimmat ohjeen kirjoittamisen aikaan(27.4.2024) olleet dsc:t. Linbitin PPA:sta poistuu vanhoja ja uusia tulee tilalle melko usein, joten ei kannata tästä suoraan copypeistata, vaan hakea uusimmat dsc:t täältä: Linbit/Ubuntu PPA DRBD9 stack

Luodaan kansiot ja haetaan Ubuntun PPA:sta dsc-tiedot:

cd ~ && mkdir drbd && mkdir drbd-utils && mkdir -p linstor/server && mkdir -p linstor/client && mkdir -p linstor/python && mkdir drbd-linstor-debs

Kernelin tarvitsema DRBD-moduuli:

cd drbd && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/drbd/9.2.9~rc.1-1ppa1~jammy1/drbd_9.2.9~rc.1-1ppa1~jammy1.dsc
cd drbd-9.2.9~rc.1 && sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv drbd-dkms*.deb drbd-ueficert*.deb ~/drbd-linstor-debs/ && cd ..

Käyttöjärjestelmän tarvitsema drbd-utils paketti:

cd drbd-utils && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/drbd-utils/9.28.0~rc.1-1ppa1~jammy1/drbd-utils_9.28.0~rc.1-1ppa1~jammy1.dsc
cd drbd-utils-9.28.0~rc.1 && sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv drbd-utils*.deb  ~/drbd-linstor-debs/ && cd ..

Linstor server paketit:

cd linstor/server && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/linstor-server/1.27.0-1ppa1~jammy1/linstor-server_1.27.0-1ppa1~jammy1.dsc
cd linstor-server-1.27.0
nano debian/control

Muutetaan Build-Dependseistä

gradle (>=4.4.1-13)

Tallennetaan ja poistutaan ctrl+x

sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv linstor*.deb ~/drbd-linstor-debs/ && cd ..

Linstor client paketti:

cd client && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/linstor-client/1.22.0-1ppa1~jammy1/linstor-client_1.22.0-1ppa1~jammy1.dsc
cd linstor-client-1.22.0 && sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv linstor*.deb ~/drbd-linstor-debs/ && cd ..

Linstor python paketti:

cd python && dget --extract --allow-unauthenticated https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack/+sourcefiles/python-linstor/1.22.0-1ppa1~jammy1/python-linstor_1.22.0-1ppa1~jammy1.dsc
cd python-linstor-1.22.0 &&  sudo mk-build-deps --install --remove && dpkg-buildpackage --build=binary --no-sign && cd ..
mv python-linstor*.deb ~/drbd-linstor-debs/ && cd ~/drbd-linstor-debs/

Asennetaan riippuvuudet ja käännetyt paketit:

sudo apt install python3-natsort && sudo dpkg -i *.deb

Paketit asentuvat yleensä puhtaaseen Debian-asennukseen, mutta jos on tehty pienikin muokkaus niin häiriöitä voi esiintyä. Jos paketit eivät asennu ilman erroreita niin komento:

sudo reboot

Ja pakettien uudelleenasennus:

cd ~/drbd-linstor-debs/ && sudo dpkg -i *.deb

Jos vieläkään ei asennu niin komento:

sudo dmesg

Myös /var/log-tiedoston tutkiminen voi auttaa. Jos mikään ei auta niin paketit verkkolevylle tai muistitikulle talteen ja Debianin uudelleenasennus ja sitten pakettien asennus "puhtaaseen tauluun".

Luodaan DRBD/Linstor klusteri[muokkaa]

Huom! Nämä komennot annetaan AINOASTAAN Debian 11 control-koneessa.

Käynnistetään ja kytketään linstor-controller päälle:

sudo systemctl enable --now linstor-controller

Lisätään palvelimet klusteriin:

linstor node create control 192.168.1.200 --node-type combined
linstor node create node-1 192.168.1.201
linstor node create node-1 192.168.1.202

Komennolla:

linstor node list

Tulostuu seuraavaa:

Node NodeType Addresses State
control COMBINED 192.168.1.200:3366 (PLAIN) Online
node-1 SATELLITE 192.168.1.201:3366 (PLAIN) Online
node-2 SATELLITE 192.168.1.202:3366 (PLAIN) Online

Luodaan tallennusvaranto:

linstor storage-pool create zfs control homelabpool controltank
linstor storage-pool create zfs node-1 homelabpool nodetank1
linstor storage-pool create zfs node-2 homelabpool nodetank2

Komennolla:

linstor storage-pool list

Tulostuu jotakuinkin seuraavaa:


StoragePool Node Driver PoolName FreeCapacity TotalCapacity CanSnapshots State SharedName
DfltDisklessStorPool control DISKLESS False Ok control;DfltDisklessStorPool
DfltDisklessStorPool node-1 DISKLESS False Ok node-1;DfltDisklessStorPool
DfltDisklessStorPool node-2 DISKLESS False Ok node-2;DfltDisklessStorPool
homelabpool control ZFS controltank 50.00 GiB 50.00 GiB True Ok control;homelabpool
homelabpool node-1 ZFS nodetank1 50.00 GiB 50.00 GiB True Ok node-1;homelabpool
homelabpool node-2 ZFS nodetank2 50.00 GiB 50.00 GiB True Ok node-2;homelabpool

Luodaan resurssiryhmä ja määritellään tallennustila sille:

linstor resource-group create homelabrg --storage-pool homelabpool --place-count 3


Luodaan looginen tallennustila:

linstor resource-definition create homelabdisk0
linstor volume-definition create homelabdisk0 40G
linstor resource create control homelabdisk0 --storage-pool homelabpool
linstor resource create node-1 homelabdisk0 --storage-pool homelabpool
linstor resource create node-1 homelabdisk0 --storage-pool homelabpool

Tarkistuskomento:

linstor resource-definition list

Tulostaa jotakuinkin seuraavaa:

ResourceName Port ResourceGroup State
homelabdisk0 7000 DfltRscGrp ok

Ja jos kaikki meni oikein niin tarkastuskomento:

linstor resource list

Tulostaa jotakuinkin seuraavaa:

ResourceName Node Port Usage Conns State CreatedON
homelabdisk0 control Unused Ok UpToDate 2024-04-26 17:55:13
homelabdisk0 node-1 Unused Ok UpToDate 2024-04-26 17:58:13
homelabdisk0 node-2 Unused Ok UpToDate 2024-04-26 17:59:13

Seuraavaksi sallitaan kaikkien klusterin palvelinten liittää samanaikaisesti Linstorin luoma jaettu /dev/drbd1000 resurssi:

linstor controller drbd-options --allow-two-primaries yes


Huom! Tuota yllämainittua komentoa/ominaisuutta ei voi käyttää kuin Ocfs2 ja GFS2 tiedostojärjestelmien kanssa. Muilla(esim. ext4 tai btrfs )järjestelmä vikaantuu pahasti.

Ocfs2-tiedostojärjestelmän asennus ja käyttöönotto[muokkaa]

Seuraavat komennot annetaan jälleen kaikissa kolmessa palvelimessa.

Asennetaan komennolla:

sudo apt install ocfs2-tools

Luodaan klusteri:

sudo o2cb add-cluster homelabcluster

Lisätään palvelimet klusteriin:

sudo o2cb add-node homelabcluster control --ip 192.168.1.200 --port 7777 --number 0
sudo o2cb add-node homelabcluster node-1 --ip 192.168.1.201 --port 7777 --number 1
sudo o2cb add-node homelabcluster node-2 --ip 192.168.1.202 --port 7777 --number 2

Rekisteröidään klusteri:

sudo o2cb register-cluster homelabcluster

Tarkistetaan klusterin asetustiedosto:

cat /etc/ocfs2/cluster.conf

Jos kaikki meni oikein sen pitäisi antaa seuraanvan kaltainen tuloste:

cluster:
name = homelabcluster
heartbeat_mode = local
node_count = 3
node:
cluster = homelabcluster
number = 0
ip_port = 7777
ip_address = 192.168.1.200
name = control
node:
cluster = homelabcluster
number = 1
ip_port = 7777
ip_address = 192.168.1.201
name = node-1
node:
cluster = homelabcluster
number = 2
ip_port = 7777
ip_address = 192.168.1.202
name = node-2

HUOM! Debianin paketissa on bugi ja klusteri ei käynnisty ennenkuin teet pari manuaalista liitosta komennoilla. Tämä täytyy EHKÄ tehdä jokaisen käynnistyksen jälkeen, tai automatisoida se esimerkiksi crontabiin:

sudo mount -t ocfs2_dlmfs none /dlm && sudo sudo mount -t configfs none /config

Mikäli edellinen komento antaa virheen ja juuritiedostojärjestelmässä ei ole kansioita dlm ja config, voit luoda ne ja liittää komennolla:

sudo mkdir /dlm && sudo mkdir /config && sudo mount -t ocfs2_dlmfs none /dlm && sudo mount -t configfs none /config

Tämän jälkeen klusteri voidaan käynnistää kaikissa kolmessa palvelimessa komennolla ja samalla tarkistaa toiminta:

sudo /etc/init.d/o2cb start && sudo /etc/init.d/o2cb status

Tuloste pitäisi olla esimerkiksi Debian 12 node-1:ssä tämän kaltainen:

o2cb.service - LSB: Load O2CB cluster services at system boot.
Loaded: loaded (/etc/init.d/o2cb; generated)
Active: active (running) since Sat 2024-04-27 13:25:20 EEST; 3s ago
Docs: man:systemd-sysv-generator(8)
Process: 45895 ExecStart=/etc/init.d/o2cb start (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 9371)
Memory: 236.0K
CPU: 73ms
CGroup: /system.slice/o2cb.service
`-45942 o2hbmonitor
Apr 27 13:25:20 node-1 systemd[1]: Starting o2cb.service - LSB: Load O2CB cluster services at system boot....
Apr 27 13:25:20 node-1 o2cb[45895]: checking debugfs...
Apr 27 13:25:20 node-1 o2cb[45895]: Loading stack plugin "o2cb": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Loading filesystem "ocfs2_dlmfs": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Mounting ocfs2_dlmfs filesystem at /dlm: OK
Apr 27 13:25:20 node-1 o2cb[45895]: Setting cluster stack "o2cb": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Registering O2CB cluster "homelabcluster": OK
Apr 27 13:25:20 node-1 o2cb[45895]: Setting O2CB cluster timeouts : OK
Apr 27 13:25:20 node-1 o2hbmonitor[45942]: Starting
Apr 27 13:25:20 node-1 systemd[1]: Started o2cb.service - LSB: Load O2CB cluster services at system boot..

Nyt voidaan luoda ocfs2-tiedostojärjestelmä Linstorin luomaan DRDB-osioon.

Seuraava komento annetaan ainoastaan Debian 11 control nodessa:

sudo mkfs.ocfs2 -b 4k -C 1M -N 3 -L homelab /dev/drbd1000

Jossa -b block size, -C cluster size, -N node count, -L label

Tiedostojärjestelmän luonnin jälkeen tehdään kaikissa palvelimissa /var/lib/one/datastores- kansio ja liitetään /dev/drbd1000 siihen seuraavalla komennolla:

sudo mkdir -p /var/lib/one/datastores && sudo mount /dev/drbd1000 /var/lib/one/datastores

Tarkistetaan lsblk -f komennolla:

lsblk -f

Joka tulostaa levyt/tiedostojärjestelmät ja jos kaikki meni kaikilla palvelimilla oikein niin tulosteesta pitäisi löytyä rivi:

zd0         drbd       v09                                               
└─drbd1000                

Vielä voi tarkistaa df -h komennolla, että drbd laite on liitetty:

df -h

Tulosteesta pitäisi löytyä jotakuinkin tälläinen rivi:

/dev/drbd1000        50G  0,1G  50G   1% /var/lib/one/datastores

Ja jos kaikki meni oikein niin linstorin tarkastuskomento:

linstor resource list

Tulostaa nyt jotakuinkin seuraavaa:

ResourceName Node Port Usage Conns State CreatedON
homelabdisk0 control InUse Ok UpToDate 2024-04-26 17:55:13
homelabdisk0 node-1 InUse Ok UpToDate 2024-04-26 17:58:13
homelabdisk0 node-2 InUse Ok UpToDate 2024-04-26 17:59:13

Asennetaan Bridge-utils KVM, Qemu, libvirt ja Docker[muokkaa]

Bridge-utils, KVM, Qemu ja libvirt asennetaan seuraavalla komennolla:

sudo apt -y install bridge-utils qemu-system libvirt-daemon-system

Docker asennetaan seuraavasti:

sudo apt update
sudo apt -y install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
 $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Luodaan verkkosilta OpenNebulaan asennettaville virtuaalikoneille

sudo nano /etc/network/interfaces

DHCP silta(ei suositeltava) konfiguraatiosta tehdään tälläinen:

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp0s25
iface enp0s25 inet manual
#Bridge br1 network configurations
auto br1
iface br1 inet dhcp
bridge_ports enp0s25
bridge_stp off       # disable Spanning Tree Protocol
bridge_waitport 0    # no delay before a ort becomes available
bridge_fd 0          # no forwarding delay


Tai suositeltava staattininen silta konfiguraatiosta tehdään tälläinen:

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp0s25
iface enp0s25 inet manual
#Bridge br1 network configurations
auto br1
iface br1 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports enp0s25
bridge_stp off       # disable Spanning Tree Protocol
bridge_waitport 0    # no delay before a ort becomes available
bridge_fd 0          # no forwarding delay

Asennetaan OpenNebula[muokkaa]

Nämä komennot vain Debian 11 control node.

Lisätään pakettivaraston avain ja pakettivarasto:

sudo -i
wget -q -O- https://downloads.opennebula.io/repo/repo2.key | gpg --dearmor --yes --output /etc/apt/keyrings/opennebula.gpg
echo "deb [signed-by=/etc/apt/keyrings/opennebula.gpg] https://downloads.opennebula.io/repo/6.8/Debian/11 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
exit

Asennetaan Opennebula käyttöliittymä ja virtualisointiympäristö:

sudo apt update && sudo apt -y install opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow opennebula-provision opennebula-node-kvm docker-machine-opennebula

Lisätään asennuksen luoma oneadmin käyttäjä libvirt ja docker-ryhmiin

sudo adduser oneadmin docker && sudo adduser oneadmin libvirt

Vaihdetaan oneadmin-käyttäjäksi ja lisätään salasana:

sudo -u oneadmin /bin/sh
echo 'oneadmin:vaihdaminut123' > /var/lib/one/.one/one_auth

Kytketään ja käynnistetään OpenNebula:

sudo systemctl enable --now opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow

Jos kaikki meni putkeen ja palomuurista portti 9869 auki, voit selaimella mennä osoitteeseen https://<debian11_control_ip-osoite>:9869

Ja kirjautua oneadmin käyttäjänä ja aiemmin antamallisi salasanalla hallintapaneeliin.

Nämä komennot vain Debian 12 koneissa.

Koska osassa opennebulan paketeista on vielä tätä ohjetta kirjoitettaessa ristiriitaisuuksia Debian 12:n pakettien kanssa niin asennetaan pelkästään varmasti toimivat paketit näihin palvelimiin seuraavasti:

sudo apt install augeas-tools libnbd-bin ruby-sqlite3 ipset rsync ruby jq vlan
mkdir opennebula && cd opennebula
wget https://downloads.opennebula.io/repo/6.8/Debian/11/pool/opennebula/opennebula-common_6.8.0-1_all.deb 
wget https://downloads.opennebula.io/repo/6.8/Debian/11/pool/opennebula/opennebula-common-onecfg_6.8.0-1_all.deb 
wget https://downloads.opennebula.io/repo/6.8/Debian/11/pool/opennebula/opennebula-node-kvm_6.8.0-1_all.deb
sudo dpkg -i *.deb && sudo apt -f install

Oneadmin-käyttäjälle täytyy luoda salasanaton ssh-kirjautuminen palvelimien välille ja sitten voidaan Debian 12 palvelimet lisätä Debian 11 hallintapaneelista virtuaalikoneisänniksi.

HUOM! Oneadmin kayttäjän kotikansio on /var/lib/one ja ssh tiedot myös tallentuu ja haetaan sieltä. isäntiä ei saa lisättyä control-nodeen ellei näistä sijainneista löytyviä ssh-avaimia luoda ja kopioida esim. scp:n avulla koneelta toiselle /var/lib/one/.ssh/authorized_keys tiedostoon.

OpenNebula käyttää myös kansiota /var/tmp/one mutta asennuspaketti ei joka kerta sitä uudelle koneelle asennettaessa luo, joku bugi ilmeisesti, jolloin klusteri ei toimi. Siinä tapauksessa puuttuva /var/tmp/one kansio taytyy vain luoda mkdir-komennolla ja chownilla vaihtaa sen omistusoikeus oneadminille.

Huomiota[muokkaa]

  • Nyt on kolmen palvelimen korkean käytettävyyden homelab -perusta konfiguroitu.
  • Klusteriin voi nyt lisätä palvelimia ja lisätä ne OpenNebulaan isänniksi. Voi lisätä kovalevyjä ja tehdä niistä Linstorin ja Ocfs2:n avulla lisää jaettuja levyjä ja ajaa vaikka NFS ja/tai Samba -servereitä niillä.
  • Voi rakentaa kokonaisen virtualisoidun pilviympäristön palomuureineen, verkkolevyineen reitittimineen yms.
  • Voi ajaa klusterin päällä esim. Distcc:tä ja tehdä esim. Linux-ytimen_kääntäminen nopeammaksi. Tai minkä muun paketin tahansa.

Erittäin tärkeää[muokkaa]

  • Linstoria ajetaan tässä dual-primary moodissa ja äkillisen virtakatkoksen tai muun häiriön tapahtutuessa palvelinten uudelleenkäynnistyksen yhteydessä saattaa tapahtua nk. split-brain reaktio, joka tarkoittaa, että palvelin ei tiedä miltä koneelta tieto haetaan replikoitavaksi ja on haasteellista saada järjestelmä tästä virheestä toipumaan ilman uudelleenasennusta ja tietojen häviämistä. Joten etenkin tuotantokäytössä on syytä heti käyttöönoton jälkeen aloittaa crontabin ja vaikka rsyncin avulla Linstorin DRBD-osion säännöllinen tiheä varmuuskopiointi.

Viritysvinkkejä[muokkaa]

  • Useissa netistä löytyvissä ohjeissa suositellaan tai jopa käsketään konffata kahta verkkokorttia käyttäen. Siinä tietysti puolensa, koska helpompaa tehdä kahdella verkkoliitynnällä. Mutta vaikka asennetaan kaks verkkokorttia niin kannattaa bondata verkkoyhteydet ja vlania hyödyntäen niillä verkkoyhteydet koneille, niin on aina maksimit käytössä, eikä replikointi vie kaikkea kaistaa kotiverkossa olevilta muilta koneilta.
  • Klusterin nopeutta saa kasvatettua huomattavasti verkkokorttien bondingilla ja/tai tietenkin 2,5Gbitin tai jopa 10 Gigan verkkokorteilla ja kytkimillä.
  • Toisekseen klusterin nopeutta saa kasvatettua paljon NVME-levyillä ja suurella määrällä RAM-muistia ja ajamalla niitä sovelluksia ja/tai virtuaalikoneita ramdiskissä jotka tarvitsevat paljon nopeutta/tehoa
  • Helppo ja halpa tapa kasvattaa nopeutta on tietysti rakentaa zpool-pakka RAIDZ-muotoon stripingiä hyödyntymällä, joka vastaa muiden tiedostojärjestelmien RAID0-tasoa. Tässä systeemissä on varmuuskopiointi aivan äärimmäisen tärkeää. Vaikka klusteri toimii ja DRBD-osioilta saa tiedot vaikka vain kaksi konetta olisi päällä niin kun menee tilttiin niin kaikki tieto on vaarassa hävitä.
  • OpenNebula control ja Linstor controlleria voi ajaa vaikka pöytäkoneella Docker-konteissa ja WakeOnLan:illa käynnistää klusterin koneet vain silloin ja sitä mukaa kun niitä tarvii, niin se näkyy kyllä kodin sähkölaskussa. Etenkin jos klusterissa on vaikka 8 kpl servereitä, kuten tämän artikkelin alkuperäisellä kirjoittajalla on artikkelin kirjoittamisen aikaan.

Aiheesta muualla[muokkaa]