====== Move a VPS to a different datacenter ====== The migration of VPS to a different datacenter can be completed in several steps. Of course, this can get more or less tricky, depending on the services running on your system. To better understand, we will take this simple example. We have a VPS in Paris (named //parisVM// ) with only one disk, its system disk. We want to migrate this server to the Luxembourg, we will call it //luxVM//. Here are the key steps to perform this type of migration : - Prepare the system (of the server parisVM) to be migration-ready - Stop the server and take a snapshot of the disk - Create the new server **and** a disk in the desired location - Create a new disk from the snapshot taken previously - Update the DNS zone file(s) of the domain(s) pointing to the former VPS to point to the new VPS/IP Commands starting with **$ gandi** refer to our [[ http://cli.gandi.net/ | CLI]]. ===== Step 1 - prepare the migration ===== By default, the primary network interface is configured statically. Since network interfaces cannot be moved between datacenters, the IP address will be changed (i.e. a new network interface will be created). Therefore, we need to set the primary interface to be configured automatically (using dhcp). So, we need to change ''/etc/network/interfaces'' from this : auto eth0 iface eth0 inet static address x.x.x.x netmask 255.255.254.0 gateway 185.26.125.254 into : auto eth0 iface eth0 inet dhcp Also, remove ''eth0'' from the variable ''CONFIG_NODHCP'' in ''/etc/default/gandi'': Before: CONFIG_NODHCP="eth0" After: CONFIG_NODHCP="" ===== Step 2 - Take a snapshot ===== Just in case, we take a snapshot of the system disk of parisVM. First, stop the server and take a snapshot of its system disk. This can be done using the CLI: $ gandi disk list $ gandi disk snapshot --name Or via [[https://wiki.gandi.net/en/iaas/references/disk/snapshots#how_to_take_a_snapshot|your account interface]]. ===== Step 3 - Create the new server ===== Create a new server in the datacenter of your choice. In this example we are creating a new server in Luxembourg. $ gandi vm create --hostname luxVM --datacenter LU --ip-version 4 --memory 512 --cores 2 --image 'Ubuntu 14.04 64 bits LTS (HVM)' --password password: **Repeat for confirmation:** * root user will be created. * Configuration used: 2 cores, 512Mb memory, ip v4+v6, image Debian 7 64 bits (HVM), hostname: luxVM, datacenter: LU Creating your Virtual Machine luxVM. Progress: [###################################] 100.00% 00:00:57 Your Virtual Machine luxVM has been created. Waiting for the vm to come online ===== Step 4 - Create a new disk ===== The disk that we are going to create will contain the data of the **system disk** of the former server (parisVM). The copy of the **data disk** will be done later. Let's create the disk: This disk should be the **same** size (or bigger) as the former system disk. $ gandi disk create --datacenter LU --name sys-lux --size 5G --vm luxVM Creating your disk. Progress: [#######################################] 100.00% 00:00:39 Attaching your disk. Progress: [#######################################] 100.00% 00:00:29 Here, the disk is created **and** attached to the new server, luxVM. Connect (via ssh) to the new server: $ gandi vm ssh luxVM Un-mount the disk sys-lux. The //mount// command will help you identify the device: mount /dev/sda on / type ext4 (rw,noatime,errors=remount-ro) [...] /dev/sdc on /srv/sys-lux type ext3 (rw,nosuid,nodev,noatime) umount /dev/sdc We will also need to allow root to log in with a password, since by default password authentication is disabled for root. //PermitRootLogin without-password// allows root login only with public key authentication. Replace it with: PermitRootLogin yes in /etc/ssh/sshd_config And restart SSH: /etc/init.d/ssh restart ===== Step 5 - copy the data to the new system disk ===== In this step we will copy the data of the system disk on the former server (parisVM) to the new system disk (previously created in **step 4**). The copy will be done using the ''dd'' command. First, duplicate your system disk : $ gandi disk create --datacenter FR --source sys-fr --vm parisVM Creating your disk. Progress: [##########################################################] 100.00% 00:00:22 Attaching your disk. Progress: [##########################################################] 100.00% 00:00:23 Then SSH to the former server : $ gandi vm ssh parisVM Un-mount the disk just created : df -h /dev/xvdb 5.0G /srv/UBUNTU14.04_64 umount /dev/xvdb Launch the copy of the disk: dd iflag=direct bs=8k if=/dev/xvdb | ssh "dd bs=8k of=/dev/sdc" The copy may take more or less time depending on the size of the source disk. ===== Step 6 - Make the new system disk bootable ===== Assign a kernel to the system disk (''sys-lux'' in our case): $ gandi disk update sys-lux --kernel 3.2-x86_64 Updating your disk. Progress: [###############################################] 100.00% 00:00:26 Stop the server luxVM : $ gandi vm stop luxVM Stopping your Virtual Machine(s) 'luxVM'. Progress: [###########################################] 100.00% 00:00:35 Detach the disk sys-lux from luxVM : $ gandi disk detach sys-lux Are you sure you want to detach sys-lux? [y/N]: y The disk is still attached to the vm 166658. Will detach it. Detaching your disk(s). Progress: [########################################] 100.00% 00:00:04 Attach it again to luxVM, but this time will indicate the disk as being the one to boot from: $ gandi disk attach sys-lux --position 0 luxembourg Are you sure you want to attach disk 'sys-lux' to vm 'luxembourg' [y/N]: y Attaching your disk(s). Progress: [################################################] 100.00% 00:00:20 Start the server: $ gandi vm start luxVM You should be all set. But of course you want to make sure that is the case: $ gandi vm ssh luxVM ===== Edit the DNS zone file(s) ===== Again, this can be done via your [[http://wiki.gandi.net/en/dns/zone/edit| web interface ]] or via the CLI. Using the CLI ----------------- List existing DNS zone file entries for your domain: $ gandi record list example.net Delete the relevant entry (e.g. the A record for the ''www'' subdomain): $ gandi record delete example.net --name www Then create a new one with the IP address of your new VM: $ gandi record create example.net --name www --type A --value --ttl 3600 The change will take about 3 hours to propagate, depending on when you last browsed to your site.