官方手册:https://manual-cn.seafile.com/deploy_pro/real_time_backup.html

配置实时备份服务器

我们假设您已经有一整套的 Seafile 主服务器在运行,而现在您想要配置一套备份服务器。

配置备份服务器有以下几个步骤:

  1. 在备份服务器上安装 Seafile 程序。
  2. 在主服务器和备份服务器之间配置 Seafile 同步。
  3. 通过 mysqldump 周期性的备份数据库中的数据。

在备份服务器上安装 Seafile

您可以按照官方文档在备份服务器上安装 Seafile。由于实时同步功能只有在 5.1.0 及其以上版本中可用,所以您必须将主服务器上的 Seafile 版本更新到 5.1.0 以上。安装完成后,不要启动seahub.sh服务。

当在备份服务器上安装 Seafile 时需要注意:

  • 数据库名称(ccnet,seafile 和 seahub 数据库)应该和主服务器上的相同。
  • 您无需在备份服务器上开启专业版功能,例如 Office 文档预览,全文检索和文件编辑等功能。
  • 您不能在主服务器上启动 Seahub 进程,这意味着通常情况下备份服务器不能对外提供服务。

配置 Seafile 实时同步

主服务器上,添加以下配置到 seafile.conf (默认路径:/opt/seafile/conf/)中:

[backup]
backup_url = http://backup-server
sync_token = c7a78c0210c2470e14a20a8244562ab8ad509734

备份服务器上,添加以下配置到 seafile.conf (默认路径:/opt/seafile/conf/)中:

[backup]
primary_url = http://primary-server
sync_token = c7a78c0210c2470e14a20a8244562ab8ad509734
sync_poll_interval = 3
  • backup_url:备份服务器的访问地址,您可以使用http或https协议;
  • primary_url:主服务器的访问地址。
  • sync_token:主服务器和备份服务器之间共享的一个密钥,它是由系统管理员生成的40个字符的 SHA1。您可以使用 uuidgen | openssl sha1 命令生成一个随机密钥。
  • sync_poll_interval:备份服务器定期轮询主服务器的所有资料库。您可以以小时为单位设置轮询间隔。默认的间隔是1小时,这意味着备份服务器将每小时轮询一次主服务器。如果您有大量的资料库,您应该选择较大的轮询间隔。

如果您使用https在主服务器和备份服务器之间同步,您必须为您的系统使用正确的 Seafile server 包。如果您使用的是 CentOS,您应该使用没有 “Ubuntu” 后缀的 Seafile 包;如果您使用的是 Debian 或 Ubuntu,您应该使用带有 “Ubuntu” 后缀的 Seafile 包。否则,您可能会在https请求中遇到CA错误。

保存配置后,在主服务器和备份服务器上重新启动 Seafile 服务。备份服务器将在重新启动时自动启动备份进程。

注意:不要在备份服务器上启动 Seahub 进程

备份数据库

使用 mysqldump 备份服务器的 MySQL 数据:

mysqldump -u <user> -p<password> --databases \
--ignore-table=<seafile_db>.Repo \
--ignore-table=<seafile_db>.Branch \
--ignore-table=<seafile_db>.RepoHead \
<seafile_db> <ccnet_db> <seahub_db> > dbdump.sql

您应该将 <user>, <password> 替换为您的 MySQL 用户和密码,将 <seafile_db>, <seahub_db> 和 <ccnet_db> 替换为您的 MySQL 中的数据库名。

这三个被忽略的表是与资料库核心数据相关的表,并由 Seafile 备份服务器实时同步。它们保存在备份服务器的seafile数据库中,并与mysqldump进程分开。

您应该设置 crontab 周期性自动运行 mysqldump 进程。

如果希望以更实时的方式备份数据库表(除了使用Seafile同步的3个表),可以将MySQL/MariaDB数据库主从复制的从主节点部署到另一个数据库服务器上。在 Seafile 备份服务器上运行的数据库不能用作此复制的目标。否则将导致复制冲突,因为备份服务器上的db也将通过 Seafile 备份进程进行更新。

检查备份状态

在上面的设置之后,您现在应该拥有以下备份数据的布局:

  • 资料库数据由 Seafile 备份服务器备份和管理。根据备份服务器的设置,数据可以存储在外部存储、对象存储或本地磁盘上。
  • 数据库表分为两部分:
    • 3个核心数据库表实时备份到备份节点的MySQL数据库。
    • 其他表通常被转储到带有 mysqldump 的文件中。备份文件存储在主服务器之外的其他地方。

seaf-backup-cmd.sh 提供 status 命令来查看备份状态。输出如下:

# ./seaf-backup-cmd.sh status
Total number of libraries: xxx
Number of synchronized libraries: xxx
Number of libraries waiting for sync: xxx
Number of libraries syncing: xxx
Number of libraries failed to sync: xxx

List of syncing libraries:
xxx
xxx

List of libraries failed to sync:
xxx
xxx

还可以通过iftop监视网络流量,利用du -sh查看目录文件空间大小。

有几个原因可能导致库备份失败:

  • 主服务器中的一些数据被损坏。这些数据可能处于最新状态或历史中。由于备份过程同步整个历史,历史中的损坏将导致备份失败。
  • 主服务器运行了 seaf-fsck,它可以将库恢复到旧状态

在备份服务器上恢复数据

在主服务器上发生严重数据损坏的不幸情况下,您可以直接在备份服务器上恢复服务。恢复的服务可以直接在备份服务器上运行。

在备份服务器上恢复数据有两个步骤:

  • 将最新的 mysql dump 出的文件导入 Seafile 备份服务器的mysql数据库中。
  • 在 Seafile 备份服务器上启用其他专业版功能特性,并启动seahub进程 ./seahub.sh start

第一步:导入mysqldump数据到备份服务中

将最新的mysqldump文件导入备份服务器的数据库:

mysql -u <user> -p<pass> < dbdump.sql

将 <user> 和 <pass> 替换为您的 MySQL 的用户名密码。

第二步:在备份服务器上启动 seahub 进程

将主服务器上的 Seafile 的配置复制到备份服务器,然后在备份服务器上启动seahub进程。

./seahub.sh start

Crontab周期性自动运行Mysqldump进程备份MYSQL数据库

可以通过Mysqldump命令,导出所有的表数据信息。该命令模板不能用于自动同步的备份端恢复。

/usr/bin/mysqldump -h 127.0.0.1 -u<user> -p<password> --opt ccnet_db > /backup/databases/`date +"%Y-%m-%d"`.ccnet_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`&
/usr/bin/mysqldump -h 127.0.0.1 -u<user> -p<password> --opt <user>_db > /backup/databases/`date +"%Y-%m-%d"`.<user>_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`&
/usr/bin/mysqldump -h 127.0.0.1 -u<user> -p<password> --opt seahub_db > /backup/databases/`date +"%Y-%m-%d"`.seahub_db.sql.`date +'%Y-%m-%d-%H-%M-%S'`&

标签: seafile, sync, backup

添加新评论