在Yandex.Cloud中使用1C-Bitrix上的站点进行增量VDS备份

我必须将站点备份到1C-Bitrix:站点管理,每天2次(文件和mysql数据库),并存储90天的更改历史记录。



该站点位于运行CentOS 7且安装了1C-Bitrix的VDS:Web环境。此外,制作操作系统设置的备份副本。



要求:



  • 频率-每天2次;
  • 保留最近90天的副本;
  • 必要时能够获取特定日期的单个文件的能力;
  • 备份必须存储在不同于VDS的数据中心中;
  • 从任何地方(另一台服务器,本地计算机等)访问备份的能力。


重要的一点是能够以最少的额外空间和系统资源消耗来快速创建备份。



我们不是在谈论用于快速恢复整个系统的快照,而是在谈论文件和数据库以及更改的历史记录。



初始数据:



  • XEN虚拟化上的VDS;
  • CentOS 7操作系统;
  • 1C-Bitrix:Web环境;
  • 基于“ 1C-Bitrix:站点管理”的站点,标准版本;
  • 文件大小为50 GB,并且会增加;
  • 数据库大小为3 GB,并且将会增长。




1C-Bitrix内置的标准备份-立即排除。它仅适用于小型站点,因为:



  • , , , 50 .
  • PHP, — , .
  • 90 .


托管人提供的解决方案是一个备份磁盘,该磁盘与VDS位于同一数据中心,但位于不同的服务器上。您可以通过FTP使用磁盘并使用自己的脚本,或者如果VDS上安装了ISPManager,则可以通过其备份模块使用磁盘。由于使用同一数据中心,因此该选项不合适。



综上所述,对我来说,最好的选择是根据自己的场景在Yandex.Cloud(对象存储)或Amazon S3(Amazon Simple Storage Service)中进行增量备份。



这要求:



  • 根访问VDS;
  • 安装了公用程序的双重性;
  • Yandex.Cloud中的帐户。


增量备份是一种仅存档自上次备份以来已更改的数据的方法。



duplicity是使用rsync算法的备份实用程序,可以与Amazon S3一起使用。




Yandex.Cloud与Amazon S3



在这种情况下,Yandex.Cloud和Amazon S3之间没有区别。Yandex支持Amazon S3 API的主要部分,因此您可以使用可用于S3的解决方案来使用它。就我而言,这是重复性实用程序。



Yandex的主要优点是可以用卢布付款,如果有大量数据,则与汇率没有联系。在速度方面,亚马逊的欧洲数据中心在Yandex上与俄罗斯的数据中心相当,例如,您可以使用法兰克福。我以前使用Amazon S3来完成类似的任务,现在我决定尝试使用Yandex。



配置Yandex.Cloud



1.您需要在Yandex.Cloud中创建一个计费帐户。为此,您需要通过您的Yandex帐户登录到Yandex.Cloud或创建一个新帐户。



2.创建“云”。





3.在“云”中创建一个“目录”。





4.对于“目录”,创建一个“服务帐户”。





5.为“服务帐户”创建密钥。





6.保留密钥,将来将需要它们。





7.为“目录”创建一个“桶”,它将包含文件。





8.我建议设置一个限制并选择“冷存储”。





在服务器上配置计划的备份



本指南假定您具有基本的管理技能。



1.在VDS上安装duplicity实用程序



yum install duplicity




2.创建一个用于mysql转储的文件夹,在我的情况下,它是VDS根目录中的/ backup_db。3



.创建一个用于bash脚本/ backup_scripts的文件夹,并制作第一个脚本来备份/backup_scripts/backup.sh



该脚本的内容:



#!`which bash`


# /backup_scripts/backup.sh

#            ,  ,   email     (    )
if [ -f /home/backup_check.mark ];
then

DATE_TIME=`date +"%d.%m.%Y %T"`;

/usr/sbin/sendmail -t <<EOF
From:backup@$HOSTNAME
To:< EMAIL>
Subject:Error backup to YANDEX.CLOUD
Content-Type:text/plain; charset=utf-8
Error backup to YANDEX.CLOUD

$DATE_TIME
EOF

else

#      
#        backup

echo '' > /home/backup_check.mark;


#         backup

/bin/rm -f /backup_db/*


#    mysql ,       /root/.my.cnf

DATETIME=`date +%Y-%m-%d_%H-%M-%S`;

`which mysqldump` --quote-names --all-databases | `which gzip` > /backup_db/DB_$DATETIME.sql.gz


#      .

export PASSPHRASE=<    >
export AWS_ACCESS_KEY_ID=<    >
export AWS_SECRET_ACCESS_KEY=<    >


#  duplicity      .
#      backup           
# -- exclude  ,   ,       
# --include        :
# - /backup_db
# - /home
# - /etc
# s3://storage.yandexcloud.net/backup , backup     

#      :
#   "--exclude='**'"  "/" ,      --include  --exclude   .          "/",    "--exclude='**'"
# --full-if-older-than='1M' -     
# --volsize='512' -         
# --log-file='/var/log/duplicity.log' -    

`which duplicity` \
    --s3-use-ia --s3-european-buckets \
    --s3-use-new-style \
    --s3-use-multiprocessing \
    --s3-multipart-chunk-size='128' \
    --volsize='512' \
    --no-print-statistics \
    --verbosity=0 \
    --full-if-older-than='1M' \
    --log-file='/var/log/duplicity.log' \
    --exclude='**/www/bitrix/backup/**' \
    --exclude='**/www/bitrix/cache/**' \
    --exclude='**/www/bitrix/cache_image/**' \
    --exclude='**/www/bitrix/managed_cache/**' \
    --exclude='**/www/bitrix/managed_flags/**' \
    --exclude='**/www/bitrix/stack_cache/**' \
    --exclude='**/www/bitrix/html_pages/*/**' \
    --exclude='**/www/bitrix/tmp/**' \
    --exclude='**/www/upload/tmp/**' \
    --exclude='**/www/upload/resize_cache/**' \
    --include='/backup_db' \
    --include='/home' \
    --include='/etc' \
    --exclude='**' \
    / \
    s3://storage.yandexcloud.net/backup



#     .
#   3   backup      backup.
# ..    backup  3 , ..        backup

`which duplicity` remove-all-but-n-full 3 --s3-use-ia --s3-european-buckets --s3-use-new-style --verbosity=0 --force s3://storage.yandexcloud.net/backup



unset PASSPHRASE
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY

#     backup

/bin/rm -f /home/backup_check.mark;

fi


4.首次运行脚本并检查结果;文件应出现在“ Bucket”中。



`which bash` /backup_scripts/backup.sh








5.将脚本添加到cron中,以使根用户每天执行两次,或以所需的频率执行。



10 4,16 * * * `which bash` /backup_scripts/backup.sh




从Yandex.Cloud进行数据恢复



1.制作一个用于恢复的文件夹/ backup_restore



2.制作一个用于恢复的bash脚本/backup_scripts/restore.sh



我给出了恢复特定文件的最流行示例:



#!`which bash`

export PASSPHRASE=<      >
export AWS_ACCESS_KEY_ID=<    >
export AWS_SECRET_ACCESS_KEY=<    >

# 3 ,  

#   backup
#`which duplicity` collection-status s3://storage.yandexcloud.net/backup

#  index.php   
#`which duplicity` --file-to-restore='home/bitrix/www/index.php' s3://storage.yandexcloud.net/backup /backup_restore/index.php

#  index.php    3  
#`which duplicity` --time='3D' --file-to-restore='home/bitrix/www/index.php' s3://storage.yandexcloud.net/backup /backup_restore/index.php

unset PASSPHRASE
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY




3.运行脚本,然后等待结果。



`which bash` /backup_scripts/backup.sh




在/ backup_restore /文件夹中,您将找到以前备份的index.php文件。



您可以进行更详细的设置以满足您的需求。



重复性的缺点重复性



有一个缺点-无法设置频道使用限制。对于常规频道,这不会造成问题,并且当使用每天速率额定值的受DDoS保护的频道时,我希望能够将限制设置为1-2兆位。



作为结论



在Yandex.Cloud或Amazon S3中进行预订可提供站点和操作系统设置的独立副本,可从任何其他服务器或本地计算机访问该副本。同时,该副本在主机控制面板或Bitrix管理面板中都不可见,从而提供了更高的安全性。



结果最悲惨的是,您可以构建新服务器并在任何日期部署站点。尽管最需要的功能是在特定日期引用文件的功能。



您可以将此技术与任何引擎上的任何VDS或专用服务器和站点一起使用,而不仅限于1C-Bitrix。该操作系统也可以不是CentOS,例如Ubuntu或Debian。



All Articles