Migrar do software-RAID & EXT3 para o RAID-Z no novo hardware?

0

Eu tenho um servidor Ubuntu ao vivo existente ... suportando muitos serviços, que está funcionando bem - mas está instalado em hardware obsoleto. Gostaria de manter uma configuração (quase) idêntica - em um novo hardware - mas adotar ZFS e RAID-Z no lugar da solução RAID e EXT-3 de software existente no servidor antigo.

Instalei o Ubuntu no novo servidor e o expus à minha LAN (em um IP estático distinto) e estabeleci uma configuração adequada do ZFS. A migração da configuração de vários serviços (por exemplo, mail; web-apps; VPNs; proxies; firewalls; bancos de dados - etc. etc.) está se revelando mais complicada do que eu previa inicialmente. Com uma estratégia 'manual' para migrar, vejo um tempo de inatividade muito maior do que seria aceitável.

Existe alguma ferramenta que torne isso mais fácil (e menos propenso a erros)? Existe uma estratégia mais fácil pela qual eu poderia alcançar o mesmo resultado final?

    
por aSteve 21.08.2016 / 12:54

1 resposta

2

Existem várias maneiras de clonar uma máquina. Faça uma imagem e restaure a imagem em outro hardware. No entanto, se você quiser mover seu servidor para um novo hardware, com muito pouco tempo de inatividade (dentro de alguns minutos), você pode usar a descrição em este artigo . O artigo pressupõe um sistema Debian Linux, mas isso também funcionará com o Ubuntu.

Instale um sistema básico

Você precisará de algumas coisas antes de começar a usar o sistema de cliques:

uma instalação mínima em execução (demora no máximo 10 minutos) uma placa de rede em execução discos e partições montados do jeito que você quer ssh e rsync instalados Nenhum outro serviço em execução (exceto o sshd, se você fizer esse controle remoto como no exemplo). pare inetd, atd, crond, klogd, syslogd

Sincronize os dados

Usando o rsync, podemos sincronizar old_machine para new_machine. O Rsync só transfere diferenças, portanto, você pode parar e reiniciar o rsync a qualquer momento e também pode ressincronizar vários dias depois sem iniciar tudo de novo, ou executar novamente o rsync para transferir todos os arquivos alterados.

Excluir padrões para o rsync

Alguns arquivos não devem ser transferidos porque são específicos do hardware ou estão disponíveis por padrão ou gerados automaticamente.

Estes são específicos para o seu hardware e sua configuração de partições:

/boot/
/lib/modules
/etc/modules
/etc/lilo.conf
/etc/fstab
/etc/mtab

Estes já estão disponíveis. /proc é um sistema de arquivos virtual fornecido pelo kernel em execução, /dev é a árvore de dispositivos da instalação base, lost+found são diretórios criados durante a formatação da partição:

/proc
/dev
lost+found/

Eles são excluídos porque você deseja manter os logs separados para cada máquina e deseja (por enquanto) ter uma configuração de rede diferente para cada máquina:

/var/log
/etc/network/interfaces

Um arquivo de exclusão contém todas essas entradas, todas as entradas de uma nova linha. Se isso não estiver claro, consulte man rsync

Aqui está um exemplo do arquivo hotclone_exclude que você irá armazenar no diretório / root e referência com o comando rsync:

/boot/
/lib/modules
/etc/modules
/etc/lilo.conf
/etc/fstab
/etc/mtab
/proc
/dev
lost+found/
/var/log
/etc/network/interfaces
/root

Atenção: se você tem montagens de rede, você precisa adicioná-las ao arquivo de exclusão também!

Sincronizar dados

rsync -e ssh -avz --exclude-from=/root/hotclone_exclude old_server:/ /

Alterne os servidores!

pare os serviços no old_server

rerun rsync (não deve demorar muito, já que a maioria das transferências já foi feita)

atualize / etc / network / interfaces em new_server para conter o endereço IP do old_server execute ifdown -a no old_server execute ifdown -a no novo_servidor execute ifup -a no novo_servidor

Coloque o antigo servidor de lado inalterado como sobressalente (melhor prevenir do que remediar).

Você deve estar pronto.

Nota adicional: Se você precisar excluir os arquivos de um pacote específico, poderá obtê-los com o apt-file, como em apt-file packagename , o que fornecerá uma lista de arquivos nesse pacote e seus locais de instalação.

Exemplo: $apt-file list trash-cli

trash-cli: /usr/bin/restore-trash
trash-cli: /usr/bin/trash
trash-cli: /usr/bin/trash-empty
trash-cli: /usr/bin/trash-list
trash-cli: /usr/bin/trash-put
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/__init__.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/assert_equals_with_unidiff.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/describe_trash_list.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/files.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/output_collector.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_file_descriptions.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_filesystem.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_persist.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_restore_trash.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_trash_empty.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_trash_put.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/trashinfo.py
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/PKG-INFO
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/SOURCES.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/dependency_links.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/entry_points.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/top_level.txt
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/__init__.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/cmds.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/list_mount_points.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/trash.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_available_trash_dirs.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_characterization.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_joining_paths.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_list_mount_points.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_parser.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_parsing_trashinfo_contents.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash_new_tests.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash_put.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trashdir.py
trash-cli: /usr/share/doc/trash-cli/changelog.Debian.gz
trash-cli: /usr/share/doc/trash-cli/copyright
trash-cli: /usr/share/man/man1/restore-trash.1.gz
trash-cli: /usr/share/man/man1/trash-empty.1.gz
trash-cli: /usr/share/man/man1/trash-list.1.gz
trash-cli: /usr/share/man/man1/trash-put.1.gz
trash-cli: /usr/share/man/man1/trash.1.gz
trash-cli: /usr/share/pyshared/integration_tests/__init__.py
trash-cli: /usr/share/pyshared/integration_tests/assert_equals_with_unidiff.py
trash-cli: /usr/share/pyshared/integration_tests/describe_trash_list.py
trash-cli: /usr/share/pyshared/integration_tests/files.py
trash-cli: /usr/share/pyshared/integration_tests/output_collector.py
trash-cli: /usr/share/pyshared/integration_tests/test_file_descriptions.py
trash-cli: /usr/share/pyshared/integration_tests/test_filesystem.py
trash-cli: /usr/share/pyshared/integration_tests/test_persist.py
trash-cli: /usr/share/pyshared/integration_tests/test_restore_trash.py
trash-cli: /usr/share/pyshared/integration_tests/test_trash_empty.py
trash-cli: /usr/share/pyshared/integration_tests/test_trash_put.py
trash-cli: /usr/share/pyshared/integration_tests/trashinfo.py
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/PKG-INFO
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/SOURCES.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/dependency_links.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/entry_points.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/top_level.txt
trash-cli: /usr/share/pyshared/trashcli/__init__.py
trash-cli: /usr/share/pyshared/trashcli/cmds.py
trash-cli: /usr/share/pyshared/trashcli/list_mount_points.py
trash-cli: /usr/share/pyshared/trashcli/trash.py
trash-cli: /usr/share/pyshared/unit_tests/test_available_trash_dirs.py
trash-cli: /usr/share/pyshared/unit_tests/test_characterization.py
trash-cli: /usr/share/pyshared/unit_tests/test_joining_paths.py
trash-cli: /usr/share/pyshared/unit_tests/test_list_mount_points.py
trash-cli: /usr/share/pyshared/unit_tests/test_parser.py
trash-cli: /usr/share/pyshared/unit_tests/test_parsing_trashinfo_contents.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash_new_tests.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash_put.py
trash-cli: /usr/share/pyshared/unit_tests/test_trashdir.py

Se você não tem, você pode instalá-lo com sudo apt install apt-file

Para algumas ferramentas mais úteis, veja @drysdam answer aqui e @Ressu answer aqui

Fontes:

link

link

man rsync

link

    
por Elder Geek 30.08.2016 / 15:04