ウェブサイト検索

新しいハードウェアにLinuxサーバーを移行する方法


パワフルなサーバーへのアップグレード、新しい地域への移動、新しいインスタンスの追加にかかわらず、Linuxサーバーの移行を適切な戦略を実施し、正しいコマンドを知ることで容易にすることができます。私たちは、最小限の手間でサーバーを新しいマシンに移動する方法について説明します。

移住戦略

最もシンプルで効果的な戦略は、ブルーグリーンデプロイメントです。新しいサーバーを立ち上げて稼働させ、運用準備が整ったらトラフィックを切り替え、問題がないことを確認した後に古いサーバーを撤去します。ロードバランシングを利用すれば、このプロセスは段階的に行うことができ、可用性の問題が発生する可能性をさらに減らします。

ブルーグリーンデプロイメントは、古いサーバーのすべてのファイル、パッケージ、およびコードを新しいサーバーにコピーすることです。これは、NGINXウェブサーバーなどの必要なパッケージを手動でインストールし、既存のサーバーから設定をコピーするだけで済むこともあります。また、完全なディスクバックアップを行い、そのバックアップから新しいサーバーを作成することも可能です。

もちろん、今はコンテナやオートスケーリングを使用できるかを考える絶好の時期です。Dockerコンテナは、基盤となるデータボリュームをコピーすることで、簡単に停止、開始、移行できます(またはEFSのような共有データストレージを使用することもできます)。オートスケーリングはプロバイダーによって異なりますが、需要の増加に応じてサーバーの新しいコピーを追加する場合には、ビジネスに適しているかもしれません。また、AWS ECSのような多くのプラットフォームでDockerコンテナとともにオートスケーリングを使用することもできます。

両方のコンテナとオートスケーリングのセットアップは、サーバーを手動で転送するために必要な作業の多くを同様に行う必要があります。たとえば、パッケージや自分のコードのインストールの自動化などです。したがって、将来的に再度移行を計画している場合は、今の段階でコンテナに切り替えた方が良いのか、オートスケーリングを設定した方が良いのかを考慮するべきです。

コンテナに興味がある場合は、Dockerのスタートガイドを読んで詳しく学ぶことができます。また、AWSまたはGoogle Cloud Platformでのオートスケーリングの使用に関するガイドもお読みいただけます。

パッケージのインストール

古いサーバーに何がインストールされているかわからない場合、確認する最良の方法は、すべてのインストール済みサービスのリストを取得することです。これによって、インストールが必要な主要なもののほとんどが表示されます。

service --status-all

リスティングサービスを好む理由は、インストールされているパッケージのリストが非常に長くなる可能性があるためであり、すべてのマイナー依存関係もインストールされるからです。私のUbuntuテストサーバーには72,000以上のパッケージがインストールされていたので、新しいサーバーに必要な主要なサービスをインストールする際には、そのリストはあまり役に立ちません。すべてがどうせインストールされるからです。

もしよろしければ、次のコマンドでそれらすべてを一覧表示できます。

sudo apt list --installed

特定のパッケージを検索するために、パッケージリストを検索するには、次のようにします:

sudo apt -qq list program_name --installed

どちらにしても、インストールする必要があるパッケージのリストを作成し、新しいサーバーにそれらをインストールすることをお勧めします。

rsyncを使用してサーバーのディスクを転送する

ディスクをtarでアーカイブすることはできますが、tarは一般的に単一のファイルやディレクトリをアーカイブするためのものであり、全体のディスクをアーカイブするためのものではありません。大量のデータを移動している場合、ローカルにバックアップを作成するのに十分なスペースがないかもしれません(もしかしたらそれがアップグレードの理由かもしれません!)

この場合、データをターゲットサーバーに直接アップロードするために、rsync コマンドを使用する必要があります。 rsync は SSH 経由で接続し、2つのディレクトリを同期させます。この場合、ローカルディレクトリをリモートサーバーにプッシュしたいので、次のようになります:

rsync -azAP /etc/nginx username@remote_host:/etc/nginx

それが全コマンドです---転送中に進行状況バーが表示されるはずです(-zフラグを使用して圧縮します)。完了すると、新しいサーバーのターゲットディレクトリにファイルが表示されます。各ディレクトリをコピーするためにこのコマンドを複数回実行する必要があるかもしれません。各実行のためにコマンドを生成するには、このオンラインのrsyncコマンドジェネレーターを使用できます。

必要であれば、一部のシステムファイルを除外して、ルートファイルシステム全体を新しいサーバーにコピーすることができます:

sudo rsync -azAP / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} username@remote_host:/

いくつかのディレクトリのバックアップを作成したいだけなら、単純なtarコマンドを使用して、単一のファイルアーカイブを生成できます。

tar -czvf nginxconfig.tar.gz /etc/nginx

これにより、scpやFTPを使用してターゲットサーバーに転送できる1つのファイルが出力されます。次に、そのファイルをターゲットディレクトリに抽出します:

tar -xzvf nginxconfig.tar.gz -C /etc/nginx

データベースの移行

データベースを移行する必要がある場合は、ソースデータベースのバックアップとダンプを取得する必要があります。MySQLの場合、次のようになります:

mysqldump -uUser -pPass -hHost --single-transaction database > backup.bak

MongoDBの場合、次のようになります。

mongodump --host=mongodb.example.net --port=27017

その後、ターゲットサーバーにデータベースを復元する必要があります。MySQLの場合は、次のようになります:

mysql -u [user] -p [database_name] < [filename].sql

MongoDBの場合、それは次のようになります:

mongorestore <options> <connection-string> <directory or file to restore>

他のデータベースについては、関連するコマンドをオンラインで見つけることができるはずです。

新しいシステムへのIPの切り替え

もちろん、進める前にすべてが意図した通りに機能することを確認する必要がありますが、一旦それが確認できれば、トラフィックを新しいサーバーに切り替えたいでしょう。

これを行う最も簡単な方法は、DNSレコードを変更することです。更新されると、クライアントとサービスは新しいサーバーに送信されます。ただし、これは一度に行われるため、負荷分散装置を使用している場合は、トラフィックを新しいインスタンスに徐々に移行させる方が良いでしょう。

AWSやElastic IPアドレスを持つ同様のプロバイダーを利用している場合、新しいサーバーにポイントするようにアドレスを切り替えることができ、DNSの更新は必要ありません。EC2コンソールのElastic IPsタブから、アクション > Elastic IPアドレスの関連付けを選択してください。

これにより、関連付けを変更でき、新しいインスタンスにトラフィックが即座に切り替わります。

関連記事: