zorun.garage

ガレージのためのAnsibleロール

このAnsibleロールは、自己ホスティング向けに設計されたオープンソースの分散オブジェクトストレージサービスであるGarageをインストールおよび設定します。

Garageのバイナリリリースをダウンロードし、システムユーザーを作成し、データおよびメタデータのディレクトリをセットアップし、設定ファイルを生成し、最後にGarageを実行するsystemdサービスをインストールします。

現在このロールはノードを自動で接続しませんが、今後の機能として計画されています。

インストール

このロールはAnsible Galaxyで入手可能です。

基本設定

必須の最低限の設定は次のとおりです:

  • ガレージの設定ファイルのテンプレート
  • 4つの変数: garage_version, garage_local_template, garage_metadata_dir, garage_data_dir

以下はプレイブックの例です:

- hosts: mycluster
  roles:
    - garage
  vars:
    garage_version: "0.8.0"
    garage_local_template: "garage.toml.j2"
    garage_metadata_dir: "/var/lib/garage"
    garage_data_dir: "/mnt/data"
    my_rpc_secret: "130458bfce56b518db49e5f72029070b5e0fcbe514052c108036d361a087643f"
    my_admin_token: "7b3e91b552089363ab94eb95f62324fb4138c9a6d71a69daefae0c5047b33bb7"

また、あなたのAnsibleディレクトリのルートにtemplates/garage.toml.j2ファイルを作成し、以下の内容を追加する必要があります:

# Ansibleによって管理されています

metadata_dir = "{{ garage_metadata_dir }}"
data_dir = "{{ garage_data_dir }}"
db_engine = "lmdb"

replication_mode = "3"
block_size = 1048576
compression_level = 1

rpc_bind_addr = "{{ ansible_default_ipv4.address }}:3901"
rpc_public_addr = "{{ ansible_default_ipv4.address }}:3901"
rpc_secret = "{{ my_rpc_secret }}"

bootstrap_peers = []

[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage.localhost"

[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.localhost"
index = "index.html"

[admin]
api_bind_addr = "[::1]:3903"
admin_token = "{{ my_admin_token }}"

この例では、各ノードのメインIPv4アドレスをRPCアドレスとして使用しています。ノードがNATの背後にある場合は、rpc_public_addrを各ノードのパブリックIPアドレスに設定する必要があります。IPv6クラスターを構築している場合は、{{ ansible_default_ipv6.address }}を使用できます。

さらに、この例では2つのカスタム変数:my_rpc_secretmy_admin_tokenを使用しています。管理したい設定エントリに対して自由にカスタム変数を使用してください。

テンプレートを提供する必要があるのは面倒ですが、大きな柔軟性をもたらします。自分の要件に応じてGarageを設定するには、公式ドキュメントを参照してください。

変数の参照

すべてのロール変数は以下にリストされています。短い説明が続きます。いくつかの変数は必須です。他のすべての変数については、デフォルト値が表示されています。

  • garage_version (必須)

ダウンロードして使用するGarageのバージョン。最初のvなし。例: 0.8.0

  • garage_local_template (必須)

Garageの設定ファイルのテンプレートのローカルパス。相対パスを使用する場合は、Ansibleの検索パスのドキュメントを参照してください。

  • garage_metadata_dir (必須)

Garageによってメタデータが保存される場所。このロールは適切な権限でこのディレクトリを作成します。

  • garage_data_dir (必須)

Garageによって実際のデータが保存される場所。このロールは適切な権限でこのディレクトリを作成します。

  • garage_config_file: /etc/garage.toml

ターゲットホスト上で生成される設定ファイルの場所。

  • garage_systemd_service: garage

systemdサービスの名前。同じホストで複数のGarageデーモンを実行する予定がある場合に便利です。

  • garage_binaries_dir: /usr/local/bin

ダウンロードしたGarageバイナリを保存するディレクトリ。このディレクトリ内の各ファイルは、バージョンをサフィックスとして持ちます。例:/usr/local/bin/garage-0.8.0

  • garage_main_binary: /usr/local/bin/garage

systemdサービスで使用されるメインバイナリへのパス。これは要求されたGarageのバージョンへのシンボリックリンクになります。

  • garage_system_user: garage

作成するシステムユーザーの名前。Garageはこのユーザーとして実行され、すべてのファイル(データとメタデータの両方)はこのユーザーに所属します。

  • garage_system_group: garage

作成するシステムグループの名前。

  • garage_logging: netapp=info,garage=info

RUST_LOGを通じて提供されるGarageのログ設定。構文の詳細はenv_loggerのドキュメントを参照してください。

  • garage_architecture: {{ansible_architecture}}

ダウンロードされたバイナリのCPUアーキテクチャ。ターゲットホストのアーキテクチャに自動的に設定されますが、間違っている場合(例:i686バイナリを実行したい場合)には上書きできます。

高度な設定:複数のGarageデーモン

同じマシンで複数のGarageデーモンを実行したいとします。たとえば、いくつかのノードが重複している複数のクラスターがある場合です。

次のようなAnsibleインベントリの例を示します:

[cluster1]
host1
host2
host3

[cluster2]
host1
host2
host3
host4
host5

次のプレイブックを使用してこの状況を管理できます:

- hosts: cluster1
  roles:
    - garage
  vars:
    garage_version: "0.8.0"
    garage_local_template: "garage.toml.j2"
    garage_config_file: /etc/garage-cluster1.toml
    garage_metadata_dir: "/var/lib/garage/cluster1"
    garage_data_dir: "/mnt/data/cluster1"
    garage_systemd_service: garage-cluster1
    garage_main_binary: /usr/local/bin/garage-cluster1
    garage_system_user: garage-cluster1
    garage_system_group: garage-cluster1

- hosts: cluster2
  roles:
    - garage
  vars:
    garage_version: "0.8.1"
    garage_local_template: "garage.toml.j2"
    garage_metadata_dir: "/var/lib/garage/cluster2"
    garage_data_dir: "/mnt/data/cluster2"
    garage_config_file: /etc/garage-cluster2.toml
    garage_systemd_service: garage-cluster2
    garage_main_binary: /usr/local/bin/garage-cluster2
    garage_system_user: garage-cluster1
    garage_system_group: garage-cluster1

同じgarage_versiongarage_local_templateを共有することは安全です。また、脅威モデルに応じて、同じユーザーとグループを共有することもできます。

Garage CLIを使用する場合は、何かを実行する必要があります (例: garage-cluster1 -c /etc/garage-cluster1.toml status)。サービスを再起動するには、次のようにします(例: systemctl restart garage-cluster1)。

クラスターのアップグレード

まず、公式アップグレードドキュメントを注意深く読んでください。

シンプルなアップグレード

安全な「シンプルなアップグレード」を行うには:

  • リリースノートを読む
  • garage_versionを増加させる
  • プレイブックにserial: 1を追加する(Ansibleドキュメントを参照)
  • --stepオプションを付けてansible-playbookを実行する
  • 各ホストのアップグレードが終了したら、すべてが期待通り動作していることを確認し、Ansibleに(c)ontinueを指示する。

高度なアップグレード

互換性のないバージョン間のアップグレードは、具体的な戦略がバージョンに依存します。公式ドキュメントと特定の移行ガイドを参照してください。

既存のセットアップに触れずに新しいバージョンのGarageをダウンロードする必要がある場合は、「ダウンロード」タスクのみを実行し、バージョンを強制できます:

ansible-playbook garage.yaml -e garage_version=0.9.0 --tags download

これで、ホスト上に新しいバイナリ(例: /usr/local/bin/garage-0.9.0)があり、フルパスでアクセス可能になります。これにより、オフラインでの移行が可能になります。

プロジェクトについて

Setup Garage, a S3-compatible distributed software written in Rust

インストール
ansible-galaxy install zorun.garage
ライセンス
Unknown
ダウンロード
2.8k
所有者