Bitbucket のゼロ ダウンタイム バックアップを使用する

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

このページでは、ダウンタイムなしで Bitbucket Server または Data Center をバックアップして、それを適切に復元する方法について説明します。

ゼロ ダウンタイム バックアップについて

ゼロ ダウンタイム バックアップは Bitbucket 4.8 で導入された技術であり、メンテナンス用のロックを行うことなく Bitbucket をバックアップできます。次の条件を満たしている必要があります。

  1. 共有ホーム ディレクトリが、原子的な (ブロック レベルの) スナップショットを作成可能なファイル システム ボリューム上に配置されていること。
  2. データベースで原子的なスナップショットを作成できるか、ホーム ディレクトリのスナップショットが作成されたのと同じタイミングでスナップショットを復元できること。

これらの技術を使用すると、頻繁なダウンタイムでユーザーやビルド エージェントに影響を与えることなく、必要な頻度 (1 時間おきなど) でバックアップを作成できます。

このページの内容

前提条件

ブロック レベルのファイル システム スナップショット

共有ホーム ディレクトリは、原子的な (ブロック レベルの) スナップショットを処理できるファイル ボリュームに配置されている必要があります (例: Amazon EBSLVMNetAppXFSZFS)。このような技術は、最近のオペレーティング システムやストレージ ソリューションで一般的なものになりつつあります。ご利用の共有ホーム ディレクトリのボリュームがこのような技術よりも前のものを使用している場合、ゼロ ダウンタイム バックアップを使用するには、ブロック レベルのスナップショットをサポートするボリュームに共有ホーム ディレクトリを移動する必要があります。また、バックアップ プロセスでボリュームのスナップショットを作成するためのスクリプトを記述する必要があります。atlassian-bitbucket-diy-backup スクリプトには、すべてのベンダー技術に対応するような動作確認済みのサンプルは含まれません。このようなスナップショットを作成できない場合、別のバックアップ戦略をご検討ください。

詳細を読む...

ブロック レベルのスナップショットにより、高負荷時にメンテナンス ロックを行わずに取得したようなスナップショットであっても、復元時にリポジトリのデータの内部整合性を保証することができます。ブロック レベルのスナップショットに使用すべき技術は、共有ホーム ディレクトリのボリュームに使用しているインフラストラクチャに応じて異なります。

  • ブロック レベルのスナップショットを提供するファイル サーバー (例: NetApp Shapshots): スナップショットおよび復元プロセスのスクリプトを作成する方法についてはベンダーのドキュメントをご確認ください。アトラシアンではこれらのベンダー ツールの使用例やサポートは提供しません。
  • Linux ファイル システム: LVMXFS、および ZFS はすべて、ブロック レベルのスナップショットの作成機能を提供しています。スナップショットの作成および復元プロセスのスクリプトを作成する方法については、ご利用の Linux ディストリビューションのドキュメントをご確認ください。アトラシアンではこれらの使用例やサポートは提供しません。
  • Amazon Web Services (AWS) Elastic Block Store (EBS) volume: You can use Amazon EBS Snapshots to take block level snapshots. The EBS volume may be formatted with any file system type, but note that Linux typically requires the filesystem to be "frozen" with fsfreeze while the snapshot is taken, for its own internal consistency. The atlassian-bitbucket-diy-backup script has a worked example of using EBS Snapshots.

選択したファイル システム スナップショット技術にかかわらず、スナップショットの作成および復元プロセスのスクリプトを作成するにはベンダーのドキュメントを参照する必要があります。現在 atlassian-bitbucket-diy-backup スクリプトに含まれる完全な動作確認済みのサンプルは、Amazon EBS および ZFS 用のもののみです。

データベースのスナップショット技術

データベースでは、ホーム ディレクトリのスナップショットの作成時点に近いタイミングのスナップショットを復元できる必要があります。これを行うもっとも簡単な方法は、データベースのスナップショットをホーム ディレクトリのバックアップ時間に近いタイミングで作成することです。あるいは、一部のデータベースは、ベンダー固有の、復元時の "ポイントインタイム リカバリ" 機能をサポートしています。Bitbucket のサポート対象のすべてのデータベース ベンダーは、スナップショットを素早く作成したり、ポイントインタイム リカバリを行ったりするためのツールを提供しています。 

詳細を読む...

選択する技術は、バックアップおよび復元時に必要な作業量のトレードオフになります。 

  • Vendor dump and restore utilities: This option needs you to dump your database to a file at backup time, in parallel with the home directory snapshot. This can generally achieve a database snapshot that is within a few seconds of your home directory snapshot. The atlassian-bitbucket-diy-backup script includes a worked example of using PostgreSQL's pg_dump and pg_restore with zero downtime backup.
  • ポイントインタイム リカバリ: データベース ベンダーのポイントインタイム リカバリを有効化する場合、バックアップ時にデータベースを明示的にダンプする必要はありません。代わりにホーム ディレクトリのスナップショットの復元時に、データベース状態のスナップショットを同時に復元できます。これによってバックアップ時にデータベースをダンプする必要はなくなりますが、復元時間はわずかに長くなります。atlassian-bitbucket-diy-backup スクリプトには、ポイントインタイム リカバリを使用する動作確認済みのサンプルは含まれません。このプロセスのスクリプトを作成する方法については、ベンダーのドキュメントをご確認ください。
  • Amazon Web Services (AWS) の Relational Database Service (RDS) インスタンス: RDS のバックアップおよび復元機能を使用して、バックアップ時にスナップショットを作成できます。atlassian-bitbucket-diy-backup スクリプトには、ゼロ ダウンタイム バックアップで RDS スナップショットを使用する、動作確認済みのサンプルが含まれます。
  • データベースのデータ ボリュームのブロック レベルのスナップショット: データベースのデータ ディレクトリが、ブロック レベルのスナップショット機能を利用可能なファイル システム ボリューム上にある場合、ほとんどのデータベースはファイル システム レベルのバックアップと復元をサポートしています。atlassian-bitbucket-diy-backup スクリプトには、データベースが共有ホーム ディレクトリと同じボリュームにある場合にブロック レベルのスナップショットを使用する、動作確認済みのサンプルが含まれます。

選択したデータベース バックアップ技術にかかわらず、スナップショットの作成および復元プロセスのスクリプトを作成するにはベンダーのドキュメントを参照する必要があります。

Bitbucket Server 4.8 以降

ゼロ ダウンタイム バックアップを使用するには、Bitbucket 4.8 以降を実行している必要があります。「Bitbucket Server アップグレード ガイド」をご参照ください。


Configure the example DIY Backup script for zero downtime backup

上述の前提条件を踏まえ、ホーム ディレクトリとデータベースのスナップショット作成を同時に作成可能な任意の方法でバックアップを作成できます。アトラシアンではこのプロセスを自動化できるサンプルの atlassian-bitbucket-diy-backup スクリプトを提供しています。これを開始点として、独自のバックアップ手順を構成およびカスタマイズできます。

ステップ 1: スクリプトを取得

サンプルの atlassian-bitbucket-diy-backup スクリプトの最新バージョンをクローンまたはプルします。例:

git clone git@bitbucket.org:atlassianlabs/atlassian-bitbucket-diy-backup.git
cd atlassian-bitbucket-diy-backup


ステップ 2: スクリプトを構成

Create the file bitbucket.diy-backup.vars.sh by copying the appropriate bitbucket.diy-backup.vars.sh.example, and edit it to match your environment. For example, to use Amazon EBS snapshots of the volume containing your shared home directory and Amazon RDS snapshots of your database, you might configure it as follows:

BACKUP_DATABASE_TYPE=amazon-rds
BACKUP_HOME_TYPE=amazon-ebs
BACKUP_ZERO_DOWNTIME=true
BITBUCKET_URL=https://your-bitbucket-url

If your shared home directory is not on Amazon EBS, then you must define a new BACKUP_HOME_TYPE for your chosen file system technology. Give it a name (e.g., myhome) that will identify the snapshot script to run in the next step.

BACKUP_HOME_TYPE=myhome

BACKUP_HOME_TYPE=rsync is not a valid option to use with zero downtime backup.

DIY Backup のサンプル スクリプトで構成可能なオプションの詳細情報については、「Bitbucket Server DIY Backup を使用する」および「AWS で Bitbucket Server DIY Backup を使用する」をご確認ください。

ステップ 3: (必要な場合) スナップショット プロセスのスクリプトを記述

If you have chosen BACKUP_HOME_TYPE and BACKUP_DATABASE_TYPE values that both already have worked examples included in the atlassian-bitbucket-diy-backup repository (e.g., ebs-home and rds), then you can just configure the appropriate variables in bitbucket.diy-backup.vars.sh to match your environment, and skip this step.

ご利用の共有ホーム ディレクトリが atlassian-bitbucket-diy-backup の動作確認済みのサンプルに含まれない場合、ホーム ディレクトリ ボリュームのスナップショットの作成および復元プロセスをスクリプトに記述する必要があります。 

詳細を読む...

Create a script called bitbucket.diy-backup.myhome.sh (where myhome is the value of BACKUP_HOME_TYPE that you set in the previous step), defining the following BASH functions:

#!/bin/bash

function bitbucket_prepare_home {

# you can optionally do any backup-time validation you need to do here
}

function bitbucket_backup_home {
# this is where you freeze, snapshot, and unfreeze your home directory volume
}

function bitbucket_restore_home {
# this is where you restore a snapshot of your home directory volume
}


同様に、データベースのポイントインタイム リカバリ機能をゼロ ダウンタイム バックアップと組み合わせて使用したい場合 (あるいは完全な動作確認済みのサンプルが atlassian-bitbucket-diy-backup で提供されていない他の機能を使用したい場合)、プロセスのスクリプトを記述する必要があります。

詳細を読む...

Create or modify a script bitbucket.diy-backup.mydb.sh (where mydb is the value of BACKUP_DATABASE_TYPE that you set in the previous step), defining the following BASH functions:

#!/bin/bash

function bitbucket_prepare_db {

# you can optionally do any backup-time validation you need to do here
}

function bitbucket_backup_db {
# this is where you can snapshot your database, if necessary
}

function bitbucket_prepare_db_restore {
# this is where you can do any restore-time validation, if necessary
}

function bitbucket_restore_db {
# this is where you restore a snapshot of your database
}


インスタンスのバックアップ

Once your bitbucket.diy-backup.vars.sh is correctly configured, SSH to the instance (or the appropriate node in a Data Center instance, typically the file server) and run the backup script from the atlassian-bitbucket-diy-backup directory.

./bitbucket.diy-backup.sh

This script can also be run on a regular schedule (e.g., hourly), from cron.


バックアップからの復元

ステップ 1: Bitbucket の停止

復元プロセスは、Bitbucket が停止されている場合にのみ動作します。Bitbucket サービスを停止します (インスタンスがクラスタ化された Data Center インスタンスの場合はすべてのノードで停止)。

sudo service atlbitbucket stop
sudo service atlbitbucket_search stop 

詳細については「Bitbucket Server の開始および終了」をご参照ください。

ステップ 2: 復元スクリプトを実行

To restore, SSH to the instance (or the appropriate node in a Data Center instance, typically the file server) and run the restore script from the atlassian-bitbucket-diy-backup directory.

./bitbucket.diy-restore.sh

ステップ 3: Bitbucket の開始

Data Center のお客様はこの時点で、データベースとホーム ディレクトリの間の潜在的な不一致をスキャンして必要に応じて解決する、整合性チェックを有効化できます。これにより、プル リクエストとリポジトリで互いに完全な一貫性を保つことができます。詳細については「Bitbucket Data Center での整合性チェックの実行」をご確認ください。

Bitbucket サービスを開始します (インスタンスがクラスタ化された Data Center インスタンスの場合はすべてのノードで開始)。

sudo service atlbitbucket start
sudo service atlbitbucket_search start

詳細については「Bitbucket Server の開始および終了」をご参照ください。

最終更新日: 2019 年 2 月 11 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.