udelarinterior.backuppc_client
BackupPC-Client Ansible 角色
这个角色( backuppc_client ) 安装和配置 BackupPC 服务器的客户端主机的双方。它与一个配置服务器的 backuppc_server 角色一起工作(不过,只要配置标准且 Ansible 有访问权限,它可以处理任何 BackupPC 服务器安装)。
它可在 Debian Buster(10)和 Stretch(9)上运行以进行高级配置(数据库备份),但对于基本的 BackupPC 转储配置,它可以处理 Ubuntu 或其他基于 Debian 的系统(接受 PR)。
这个角色和它的伙伴 backuppc_server 基于 hanxhx/backuppc 角色。
描述
此角色配置 BackupPC 服务器中主机的备份。它可以执行以下操作:
- 在客户端设置一个 Linux 用户,并在 BackupPC 服务器中配置备份,该服务器使用此用户访问客户端。
- 可选地向客户端上传 pre_dump 和 post_dump 脚本,并赋予必要的 sudo 权限,这些脚本分别在 BackupPC 转储文件之前和之后执行。这些脚本运行需要一致性备份的命令,例如数据库转储、快照等。
- 可选地在服务器上设置一个 mysql 用户,赋予对所有数据库的 SELECT 权限,以便在备份之前执行转储。
- 可选地设置一个脚本来转储已识别的 PostgreSQL 数据库。
要求
您需要在 Ansible 清单中有一个正在运行的 BackupPC 服务器,其名称将在 backuppc_server_name
变量中定义。
目前,此角色仅通过 rsync (+ ssh) 方法管理备份。
向后兼容性
为了确保在云环境中所有使用此版本角色的主机能够平滑和渐进地采用此版本,该角色向后兼容 v1.X.0 变量角色 API,包括其默认值。请参见 defaults/main.yml 和 tasks/compatibility.yml 文件,特别是注释以考虑遗留变量。
向后兼容的角色将在下一个主要版本中被废弃,因此请尽快调整您的主机变量 API!
角色变量
每个客户端配置都会覆盖服务器中的全局配置。请参见 defaults/main.yml 以获取默认变量值或定义。以下是可以定义的变量列表。
客户端访问
backuppc_client_user
: 服务器用于连接到客户端的 UNIX 用户(默认backuppc
)backuppc_client_group
: 上述行中定义的 UNIX 用户的 UNIX 组(默认backuppc
)backuppc_client_home
: 执行客户端备份的backuppc_client_user
用户的主目录
服务器配置
backuppc_server_name
: 进行备份的 BackupPC 服务器的域名,以及从中获取 SSH 密钥以在客户端上配置backuppc_server_user
: 在服务器上运行 BackupPC 的 UNIX 用户。默认为backuppc
。backuppc_server_group
: 在服务器上运行 BackupPC 的 UNIX 组。默认为www-data
。backuppc_server_home
: 服务器中 BackupPC UNIX 用户的主目录。默认为/var/lib/backuppc
。backuppc_server_config_dir
: BackupPC 包配置文件的目录。默认为/etc/backuppc
。
客户端在服务器中的备份配置
以下是定义客户端在服务器中 BackupPC 配置的角色变量的简要说明。有关完整文档请参见 BackupPC 文档。
以下标志定义客户端和服务器是否由角色配置:
backuppc_backup_state
: absent 或 present(默认:present)。如果存在,则配置客户端在服务器中的备份,否则删除配置。backuppc_client
: 如果设置为false
(默认值为true
),则客户端主机没有 ssh 访问或其他配置,仅配置服务器以备份该主机。
BackupPC 服务器中的客户端配置文件由以下变量构建:
backuppc_rsync_share_names
: 要备份的客户端文件夹树点列表。例如:
backuppc_rsync_share_names:
- /etc
- /root
- /var
- /usr/local
使用 rsync 方法,BackupPC 将对此列表的每个元素执行 rsync 命令。
backuppc_include_files:
: 要包含在客户端备份中的文件夹列表(rsync 的 --include 选项将基于此变量构建)backuppc_exclude_files:
: 要排除在客户端备份中的文件夹列表(rsync 的 --exclude 选项将基于此变量构建)backuppc_xfermethod
: 可选的传输方法(rsync 为默认)backuppc_more
: 可选的键/值哈希(用于自定义指令,例如备份调度和保存)。请在 defaults/main.yml 文件中查看示例。
以下变量允许定义 BackupPC 执行预先和后期文件转储脚本:
backuppc_pre_dump_script
: 在备份期间 BackupPC 将在转储文件之前执行的预转储脚本的文件路径。默认值为'{{ backuppc_client_home }}/scripts/pre_dump.sh'
backuppc_post_dump_script
: 在备份期间 BackupPC 将在转储文件之后执行的后转储脚本的文件路径。默认值为'{{ backuppc_client_home }}/scripts/post_dump.sh'
backuppc_scripts_local_dir
: 在本地 Ansible 控制器中的路径,playbook 将查找这两个之前的脚本以安装它们在客户端。其默认值为'{{ playbook_dir }}/host_vars/{{ inventory_hostname }}/files/backuppc/'
。因此,在您的 playbook 的目录结构中,您需要将预转储和后转储脚本放入名为files/backuppc
的文件夹中,其文件名与其各自的路径相同,位于配置主机的vars
文件夹旁:
host_vars
└── <your_host>
├── files
│ └── backuppc
│ ├── post_dump.sh
│ └── pre_dump.sh
└── vars
├── 10_kvm_virtual.yml
└── 20_backuppc.yml
backuppc_scripts
: 脚本的真/假标志。如果为真,将安装之前描述的预转储和后转储脚本。此标志已被弃用。由于向后兼容性,保留此标志,但在下一个主要版本中将会被废弃,并且在定义其路径时将安装这些脚本。backuppc_scripts_sudo
: true/false 标志,以给予预转储和后转储脚本 sudo 访问权限backuppc_DumpPreUserCmd
和backuppc_DumpPostUserCmd
: ssh 命令,用于 BackupPC 执行 pre_dump 和 post_dump 脚本。这些变量是根据之前的标志预定义的,但可以被覆盖。backuppc_sudoer
:backuppc_client_user
用户的 sudo 授权命令。这是一个可以被覆盖的字符串,只要它以Cmnd_Alias BACKUPS =
开头,后接用户执行备份所需的 Shell 命令列表。作为预定义,这个变量包括 rsync,并根据前面的标志,可能还包括预转储和后转储脚本。
以下变量提供了一些工具,通过上述描述的脚本定义数据库转储,以确保备份的一致性:
backuppc_db_server_type
: 三态变量,定义在备份之前是否进行 mysql 或 pgsql 转储。三种可能的值为:pgsql、mysql 或 null。mysql 和 pgsql 的脚本和数据库备份行为是不同的。特别是,对于 MySQL,您必须自己添加执行数据库转储的pre_dump.sh
和post_dump.sh
脚本,而对于 PostgreSQL,这些脚本是基于模板构建的(并且它们仅转储一个数据库)。对于 PostgreSQL,必须事先定义该数据库上的权限,而 MySQL 则是将数据库访问权限分配给某个用户。- 对于 PostgreSQL,变量如下:
backuppc_db_to_dump_name
定义要备份的 pgsql 数据库,backuppc_db_dump_user
定义访问数据库的 pgsql 用户,backuppc_db_dump_user_pass
是上述用户的密码。此用户在数据库中的密码设置和权限必须在 playbook 的其他地方进行设置。
- 对于 MySQL,变量如下:
backuppc_db_server_root_pass
应该设置为适当的值,如果 mysqlroot
用户定义了密码。默认情况下,变量未定义。需要注意的是,在最近的 mysql/mariadb 安装中,至少在 Debian 中,mysql 安装没有询问密码并不会随机生成 root 密码。Debian 的维护不再通过特定用户和密码完成,而是通过 unix sock 和非 tcp 验证 sock 通过用户 root 完成。如果变量仍未定义,则 mysql 任务将使用 Debian 维护配置执行。backuppc_db_dump_user
和backuppc_db_dump_user_pass
是 mysql 用户的名称和相应的密码,该用户将被赋予对所有数据库的 SELECT 权限,并将在backuppc_client_user
UNIX 用户的主目录中的.my.cnf
文件中配置。这样一来,执行备份脚本的 Linux 用户就能够通过调用简单的 mysql 命令进行任何数据库转储。
以下变量配置客户端主机的备份在 BackupPC Web 界面的 Web 访问:
backuppc_server_web_main_user
: 通过 BackupPC Web 界面访问客户端主机备份的主要用户。默认为backuppc
。backuppc_server_web_other_users
: 通过 BackupPC Web 界面访问客户端主机备份的其他用户,必须定义为以逗号分隔的字符串:“user1,user2”。用户的访问权限必须在 BackupPC 服务器上进行配置。
MySQL 脚本示例
对于 mysql 备份,在文件转储之前转储所有数据库您可以使用以下脚本,这将利用角色配置的 mysql BackupPC 用户:
pre_dump.sh
#!/bin/bash
for DataB in `mysql -e "show databases" | grep -v Database`; do mysqldump --single-transaction $DataB > "$DataB.sql"; done
tar -czvf dump.sql.tar.gz *.sql
rm *.sql
post_dump.sh
#!/bin/bash
rm dump.sql.tar.gz
示例 Playbook
我们假设在 bck-server.domain.org
上运行一个标准的 BackupPC 实例,并通过 Ansible 清单进行管理。以下 playbook 在此服务器中配置 client.domain.org
主机指定文件夹的备份,并提供必要的 ssh 访问权限。
- name: 备份 client.domain.org 主机
hosts: client.domain.org
become: true
vars:
- backuppc_server_name: bck-server.domain.org
- backuppc_rsync_share_names:
- /etc
- /var
- /opt
roles:
- role: udelarinterior.backuppc_client
许可证
GPLv3
作者信息
原始角色 Emilien M 由 Víctor Torterola 和 Daniel Viñar 增强。