zorun.garage

Garage的Ansible角色

这个Ansible角色安装并配置Garage, 这是一个为自托管量身定制的开源分布式对象存储服务。

它会下载Garage的二进制版本,创建一个系统用户,设置数据和元数据目录,生成配置文件,最后安装一个systemd服务来运行Garage。

目前,这个角色不会自动连接节点,但这是一个计划中的特性。

安装

该角色可在Ansible Galaxy上找到。

基本配置

最低需要的配置是:

  • Garage配置文件的模板
  • 四个变量: garage_versiongarage_local_templategarage_metadata_dirgarage_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 }}

此外,此示例使用了两个自定义变量: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

Garage的日志配置,通过RUST_LOG提供。请参见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文档
  • 运行ansible-playbook并使用--step
  • 每个主机升级完成后,检查一切是否正常,并告诉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
拥有者