[TUTORIAL] Cross-Cluster / Remote-Migration: Beispiel mit Erklärungen

hellfire

Renowned Member
Aug 17, 2016
79
44
83
46
Schön, dass die Cross-Cluster-Migration jetzt in einer ersten Umsetzung da ist! Danke schön!

Noch ist es etwas aufwändig, aber ich habe keine Zweifel, dass Ihr auch das nach und nach verbessert.

Ich habe hier mal eine kleine Anleitung geschrieben, die v. a. Neulinge unterstützen soll, das zum ersten Mal erfolgreich durchzuführen:

[debianforum.de] Proxmox VE Cross-Cluster Live-Migration: Beispiel mit Erklärungen

Tags: qm remote-migrate cross-cluster-migrate live-migration
 
Last edited:
  • Like
Reactions: pvps1 and Dunuin
Für mich leider nicht nutzbar, so lange die Cross-Cluster-Migration bei ZFS Pools auf Replikation setzt, da man mit verschlüsselten Pools/Datsets ja leider nicht Replizieren kann. *seufts*
Selbst als Offline-Migration wäre es so viel praktischer als immer den Umweg über PBS-Backups/Restores gehen zu müssen, wenn ich einen Gast zwischen meinen Clustern migrieren will.
 
Geht das auch Shared nothing? Also mit Disk kopieren?
 
Schön, dass die Cross-Cluster-Migration jetzt in einer ersten Umsetzung da ist! Danke schön!

Noch ist es etwas aufwändig, aber ich habe keine Zweifel, dass Ihr auch das nach und nach verbessert.

Ich habe hier mal eine kleine Anleitung geschrieben, die v. a. Neulinge unterstützen soll, das zum ersten Mal erfolgreich durchzuführen:

[debianforum.de] Proxmox VE Cross-Cluster Live-Migration: Beispiel mit Erklärungen

Tags: qm remote-migrate cross-cluster-migrate live-migration
Erstmal vielen Dank für deine Anleitung diese hat mir sehr weitergeholfen. Ich habe nur ein Problem - ich schreibe gerade ein Automatisierungscript welches auf einer Debian Node einen Proxmox Hypervisor installieren soll und anschliessend per qm remote-migrate eine vm von einem anderen standalone proxmox klonen soll. Leider kann ich also kein api token über das web interface auf meinem proxmox erstellen sondern müsste das über CLI Tools machen. Du meintest in deiner Anleitung dass das möglich ist. Könntest du mir hier weiterhelfen von welchem Tool/Tools hast du hier gesprochen?
 
Funktioniert die remote-migrate option auch zwischen 2 standalone proxmox hyprvisoren. ich frage da ich es hinbekommen möchte eine vm von hypervisor 1 auf hypervisor2 zu kopieren, aber leider seit tagen an dieser task verzweifel. ICh bin sehr dankbar für jede Hilfe :).
 
... müsste das über CLI Tools machen. Du meintest in deiner Anleitung dass das möglich ist. Könntest du mir hier weiterhelfen von welchem Tool/Tools hast du hier gesprochen?
https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_command_line_tool (-> pveum; Das wusste ich gerade auch nicht. Ich habe mir das von ChatGPT liefern lassen :p )

https://chat.openai.com/share/1f37ab02-1619-458f-a973-4d97630b5a50

Funktioniert die remote-migrate option auch zwischen 2 standalone proxmox hypervisoren. ich frage da ich es hinbekommen möchte eine vm von hypervisor 1 auf hypervisor2 zu kopieren, aber leider seit tagen an dieser task verzweifel. ICh bin sehr dankbar für jede Hilfe .
Ja. Das sollte ganz genauso funktionieren. Ich habe es aber selbst nur zwischen Standalone und Cluster hin und her migriert. Sehe aber keinen Grund, warum dass zwischen zwei Standalone-Servern irgend etwas anderes sein sollte.
 
Last edited:
  • Like
Reactions: valentinneedshelp
https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_command_line_tool (-> pveum; Das wusste ich gerade auch nicht. Ich habe mir das von ChatGPT liefern lassen :p )

https://chat.openai.com/share/1f37ab02-1619-458f-a973-4d97630b5a50


Ja. Das sollte ganz genauso funktionieren. Ich habe es aber selbst nur zwischen Standalone und Cluster hin und her migriert. Sehe aber keinen Grund, warum dass zwischen zwei Standalone-Servern irgend etwas anderes sein sollte.
Ich kriege hier leider immer wieder die Fehlermeldung [
user1@proxmox2:~$ sudo qm remote-migrate 200 200 'host=192.168.20.11,apitoken=PVEAPIToken=root@pam!apitoken1=89748394-0019-43ec-83dc-d24ca8bc6bd6,fingerprint=DC:F4:A3:85:D7:FF:26:39:BE:CC:59:3F:A5:C1:5E:2B:9F:2C:D4:5C:1A:AC:D4:80:49:02:73:42:F1:7E:6A:9B' --target-bridge=vmbr0 --target-storage local:local
Establishing API connection with remote at '192.168.20.11'
2024-05-10 13:23:17 ERROR: migration aborted (duration 00:00:00): 500 storage 'local-lvm' does not exist
migration aborted
].

An den Berechtigungen kann es kaum liegen da mein token administrator rechte hat und somit alles kann allerdings heisst mein storage im Web-Konfigurator ganz simpel local. Mache ich hier irgendetwas falsch oder muss ich noch ein local lvm anlegen fuer die vm damit die vm diese yum speicher nutzen kann?
 
Liest sich so, als ob die lokale VM ein Storage namens "local-lvm" hat und dass auf der remote-Seite nicht existiert.

Zeige mal qm config 200 vom Quellsystem.

Ansonsten führe mal auf beiden - Proxmox-Quell- und -Zielserver das folgende aus und zeige die Ausgabe hier.

Code:
# apt install jq  # --- jq installieren: json Datenextraktionswerkzeug
# pvesh get /cluster/resources --output-format=json | jq '.[] | select(.type == "storage")'

Ausgaben ggf. vor dem posten anonymisieren. Bitte alle Befehle und Ausgaben von Befehlen hier in [code] ... [/code] Tags schreiben! Danke!
 
Last edited:
Liest sich so, als ob die lokale VM ein Storage namens "local-lvm" hat und dass auf der remote-Seite nicht existiert.

Zeige mal qm config 200 vom Quellsystem.

Ansonsten führe mal auf beiden - Proxmox-Quell- und -Zielserver das folgende aus und zeige die Ausgabe hier.

Code:
# apt install jq  # --- jq installieren: json Datenextraktionswerkzeug
# pvesh get /cluster/resources --output-format=json | jq '.[] | select(.type == "storage")'

Ausgaben ggf. vor dem posten anonymisieren. Bitte alle Befehle und Ausgaben von Befehlen hier in [code] ... [/code] Tags schreiben! Danke!
'qm config 200' from the source proxmox gives out the following
Code:
boot: order=ide2;net0
cores: 4
cpu: x86-64-v2-AES
ide2: local:iso/debian-12.5.0-amd64-netinst.iso,media=cdrom,size=629M
memory: 8192
meta: creation-qemu=8.1.2,ctime=1714465825
name: debiantemplate
net0: virtio=BC:24:11:A8:1F:AA,bridge=vmbr0,firewall=1
numa: 0
ostype: 126
scsi0: local-lvm:vm-200-disk-0,iothread=1,size=32G
scsihw: virtio-scsi-single
smbios1: uuid=dacbff2e-ea3f-427c-89ef-ea7df8e708cd
sockets: 1
vmgenid: ae1477b3-f0c5-4328-9df6-8bf56948343c

Der andere Befehl gibt beim Source Proxmox folgendes aus
Code:
{
  "content": "images,rootdir",
  "disk": 53618578921,
  "id": "storage/proxmox2/local-lvm",
  "maxdisk": 362777935872,
  "node": "proxmox2",
  "plugintype": "lvmthin",
  "shared": 0,
  "status": "available",
  "storage": "local-lvm",
  "type": "storage"
}
{
  "content": "iso,backup,vztmpl",
  "disk": 24888061952,
  "id": "storage/proxmox2/local",
  "maxdisk": 100861726720,
  "node": "proxmox2",
  "plugintype": "dir",
  "shared": 0,
  "status": "available",
  "storage": "local",
  "type": "storage"
}

und beim destination Proxmox ist die ausgabe folgendes
Code:
{
  "content": "snippets,backup,vztmpl,images,rootdir,iso",
  "disk": 12427022336,
  "id": "storage/pve1/local",
  "maxdisk": 489570443264,
  "node": "pve1",
  "plugintype": "dir",
  "shared": 0,
  "status": "available",
  "storage": "local",
  "type": "storage"
}

Vielen Dank fuer deine Hilfe und Geduld hellfire - bin noch ziemlich neu bei dem ganzen und verstehe vieles nicht sehr gut.
 
'qm config 200' from the source proxmox gives out the following
Code:
boot: order=ide2;net0
cores: 4
cpu: x86-64-v2-AES
ide2: local:iso/debian-12.5.0-amd64-netinst.iso,media=cdrom,size=629M
memory: 8192
meta: creation-qemu=8.1.2,ctime=1714465825
name: debiantemplate
net0: virtio=BC:24:11:A8:1F:AA,bridge=vmbr0,firewall=1
numa: 0
ostype: 126
scsi0: local-lvm:vm-200-disk-0,iothread=1,size=32G
scsihw: virtio-scsi-single
smbios1: uuid=dacbff2e-ea3f-427c-89ef-ea7df8e708cd
sockets: 1
vmgenid: ae1477b3-f0c5-4328-9df6-8bf56948343c

Der andere Befehl gibt beim Source Proxmox folgendes aus
Code:
{
  "content": "images,rootdir",
  "disk": 53618578921,
  "id": "storage/proxmox2/local-lvm",
  "maxdisk": 362777935872,
  "node": "proxmox2",
  "plugintype": "lvmthin",
  "shared": 0,
  "status": "available",
  "storage": "local-lvm",
  "type": "storage"
}
{
  "content": "iso,backup,vztmpl",
  "disk": 24888061952,
  "id": "storage/proxmox2/local",
  "maxdisk": 100861726720,
  "node": "proxmox2",
  "plugintype": "dir",
  "shared": 0,
  "status": "available",
  "storage": "local",
  "type": "storage"
}

und beim destination Proxmox ist die ausgabe folgendes
Code:
{
  "content": "snippets,backup,vztmpl,images,rootdir,iso",
  "disk": 12427022336,
  "id": "storage/pve1/local",
  "maxdisk": 489570443264,
  "node": "pve1",
  "plugintype": "dir",
  "shared": 0,
  "status": "available",
  "storage": "local",
  "type": "storage"
}

Vielen Dank fuer deine Hilfe und Geduld hellfire - bin noch ziemlich neu bei dem ganzen und verstehe vieles nicht sehr gut.
eine weitere frage hierzu wäre aussserdem wieso ist auf dem einen hypervisor nur das local storage und bei dem anderen das local in 2 storages aufgeteilt. wie kann ich das lvm hinzufügen bzw entfernen?
 
Hi, wie hast du denn den zweiten Node installiert? Normalerweise macht der Installer aus deiner Disk eine kleinere Partition für das Betriebssystem und das wird mit EXT4 formatiert und als local eingehängt.
Der restliche Speicherplatz wird dann als LVM-Thin Pool angelegt, für deine VMs. Der Thin Pool fehlt auf dem zweiten Node. Warum das weiß nur der, der das ganze installiert hat.
 
Hi, wie hast du denn den zweiten Node installiert? Normalerweise macht der Installer aus deiner Disk eine kleinere Partition für das Betriebssystem und das wird mit EXT4 formatiert und als local eingehängt.
Der restliche Speicherplatz wird dann als LVM-Thin Pool angelegt, für deine VMs. Der Thin Pool fehlt auf dem zweiten Node. Warum das weiß nur der, der das ganze installiert hat.
Hey Falk, die zweite Node wurde nicht wie die erste manuell installiert sondern automatisiert über ein Ansible Playbook, ich denke mal da ist auch der Haken. Ich kann dir das Play dazu hier mal reinkopieren, falls du dich mit Ansible auskennst:
(die installation besteht aus 2 plays)

das erste:
Code:
---
- name: 'Add Proxmox VE repository'
  ansible.builtin.lineinfile:
    path: '{{ proxmox_host.repository_path }}'
    line: '{{ proxmox_host.url_of_repo }}'
    mode: '0644'
    state: present
    create: true
  become: true

- name: 'Add the Proxmox VE repository key'
  ansible.builtin.get_url:
    url: '{{ proxmox_host.url_of_repo_key }}'
    dest: '{{ proxmox_host.dest_of_key }}'
    mode: '0644'
  become: true

- name: 'Update and upgrade all packages to the latest version'
  ansible.builtin.apt:
    update_cache: true
    upgrade: full
  become: true

- name: 'Install Proxmox VE kernel'
  ansible.builtin.apt:
    name: '{{ proxmox_host.kernel_version }}'
    state: present
  become: true

- name: 'Reboot node'
  ansible.builtin.reboot:
    reboot_timeout: 150
    test_command: 'whoami'
  become: true

und das zweite:
Code:
---
- name: 'Set postfix configuration for delivery mode'
  ansible.builtin.debconf:
    name: postfix
    question: 'postfix/main_mailer_type'
    value: '{{ proxmox_host.delivery_mode }}'
    vtype: 'select'
  become: true

- name: 'Install required packages'
  ansible.builtin.apt:
    name: '{{ proxmox_host.pve_packages }}'
    state: present
  become: true

- name: 'Remove debian packages'
  ansible.builtin.apt:
    name: '{{ proxmox_host.linux_packages }}'
    state: absent
  become: true

- name: 'Update and check grub2 config'
  ansible.builtin.command: update-grub
  become: true

- name: 'Remove the os-proper package'
  ansible.builtin.apt:
    name: os-prober
    state: absent
  become: true

- name: 'Reboot node'
  ansible.builtin.reboot:
    reboot_timeout: 200
    test_command: 'whoami'
  become: true
 
Hey Falk, die zweite Node wurde nicht wie die erste manuell installiert sondern automatisiert über ein Ansible Playbook, ich denke mal da ist auch der Haken. Ich kann dir das Play dazu hier mal reinkopieren, falls du dich mit Ansible auskennst:
(die installation besteht aus 2 plays)

das erste:
Code:
---
- name: 'Add Proxmox VE repository'
  ansible.builtin.lineinfile:
    path: '{{ proxmox_host.repository_path }}'
    line: '{{ proxmox_host.url_of_repo }}'
    mode: '0644'
    state: present
    create: true
  become: true

- name: 'Add the Proxmox VE repository key'
  ansible.builtin.get_url:
    url: '{{ proxmox_host.url_of_repo_key }}'
    dest: '{{ proxmox_host.dest_of_key }}'
    mode: '0644'
  become: true

- name: 'Update and upgrade all packages to the latest version'
  ansible.builtin.apt:
    update_cache: true
    upgrade: full
  become: true

- name: 'Install Proxmox VE kernel'
  ansible.builtin.apt:
    name: '{{ proxmox_host.kernel_version }}'
    state: present
  become: true

- name: 'Reboot node'
  ansible.builtin.reboot:
    reboot_timeout: 150
    test_command: 'whoami'
  become: true

und das zweite:
Code:
---
- name: 'Set postfix configuration for delivery mode'
  ansible.builtin.debconf:
    name: postfix
    question: 'postfix/main_mailer_type'
    value: '{{ proxmox_host.delivery_mode }}'
    vtype: 'select'
  become: true

- name: 'Install required packages'
  ansible.builtin.apt:
    name: '{{ proxmox_host.pve_packages }}'
    state: present
  become: true

- name: 'Remove debian packages'
  ansible.builtin.apt:
    name: '{{ proxmox_host.linux_packages }}'
    state: absent
  become: true

- name: 'Update and check grub2 config'
  ansible.builtin.command: update-grub
  become: true

- name: 'Remove the os-proper package'
  ansible.builtin.apt:
    name: os-prober
    state: absent
  become: true

- name: 'Reboot node'
  ansible.builtin.reboot:
    reboot_timeout: 200
    test_command: 'whoami'
  become: true


Hier noch die Variablen die in dem Play genutzt werden:
Code:
debian_release: 'bookworm'
linux_version: 'linux-image-6.1*'
os_architecture: 'linux-image-amd64'
debian_version: '12.5.0'


# defaults file for proxmox_installation
proxmox_host:


  # path to pve-install-repository
  repository_path: '/etc/apt/sources.list.d/pve-install-repo.list'


  # url of repository that should be used
  url_of_repo: 'deb [arch=amd64] http://download.proxmox.com/debian/pve {{ debian_release }} pve-no-subscription'


  # url of repository key
  url_of_repo_key: 'https://enterprise.proxmox.com/debian/proxmox-release-{{ debian_release }}.gpg'


  # location on host where the key should be copied to
  dest_of_key: '/etc/apt/trusted.gpg.d/proxmox-release-{{ debian_release }}.gpg'


  # proxmox kernel version that should be installed
  kernel_version: 'proxmox-default-kernel'


  # set postfix delivery mode to local only
  delivery_mode: 'Local only'

    # list of required packages for proxmox install
  pve_packages:
    - proxmox-ve
    - postfix
    - open-iscsi
    - chrony


  # os-architecture of the installed debian os
  # linux version that is used by the installed debian distribution
  linux_packages:
    - '{{ os_architecture }}'
    - '{{ linux_version }}'


  # list of file paths to remove
  path_to_files:
    - '/etc/hostname'
    - '/etc/hosts'

  # security software for hardening purposes
  security_packages:
    - 'ufw'
    - 'fail2ban'
 
Da du anscheinend erst Debian und dann PVE nachinstallierst, musst du das LVM-Thin von Hand oder über das zweite Playbook einrichten.
 
Code:
# qm config 200

...

ide2: local:iso/debian-12.5.0-amd64-netinst.iso,media=cdrom,size=629M
...

scsi0: local-lvm:vm-200-disk-0,iothread=1,size=32G

Also der Fehler ist damit klar. Du hast auf dem Source-Node in der VM sowohl das Storage "local" in Verwendung als auch das Storage "local-lvm". Da Du in Deinem "qm remote-migrate" - Befehl kein Mapping dafür konfigurierst, schlägt das fehl.

In der Manpage ( https://pve.proxmox.com/pve-docs/qm.1.html ) steht ...

Code:
qm remote-migrate <vmid> [<target-vmid>] <target-endpoint> --target-bridge <string> --target-storage <string> [OPTIONS]

Migrate virtual machine to a remote cluster. Creates a new migration task.EXPERIMENTAL feature!

...

--target-storage <string>

Mapping from source to target storages. Providing only a single storage ID maps all source storages to that storage.
Providing the special value 1 will map each source storage to itself.

Also brauchst Du diesen Parameter:

Code:
--target-storage local

Und das ISO brauchst Du ja bestimmt nicht mehr, kannst es also aus der VM lösen, bevor Du migrierst.
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!