最重要的食谱:冷备份服务器

这是我们“最重要的食谱”系列的下一部分。

这些文章的目的是为您提供针对特定问题的解决方案,并讨论该解决方案的详细信息,以及有关如何自定义其以完全满足您的需求的一些技巧。

如果有食谱,您希望我们将来做饭,请在我们的论坛上留言。

问题

您希望在其他位置拥有一个备用服务器,以便在实时服务器或群集出现故障时可以快速部署该备用服务器。

1.设置热服务器以与冷服务器对话

在热服务器上创建SSH配置文件: ~/.ssh/config

 admin@hotserver:~$ mkdir ~/.ssh 
admin@hotserver:~$ chmod -R 700 ~/.ssh
admin@hotserver:~$ touch ~/.ssh/config
admin@hotserver:~$ chmod -R 600 ~/.ssh/config
admin@hotserver:~$ vi ~/.ssh/config

将此信息放入~/.ssh/config ,用适当的信息替换User行和HostName行。

 Host coldserver 
User admin
HostName 192.168.2.3
IdentityFile ~/.ssh/id_rsa

使用以下命令为该用户生成SSH密钥:

 admin@hotserver:~$ ssh-keygen 

Enter接受默认值并创建没有任何密码短语的密钥。 然后使用以下命令复制ID:

 admin@hotserver:~$ ssh-copy-id coldserver 

输入admin用户的密码以复制ID,然后运行以下命令进行测试:

 admin@hotserver:~$ ssh coldserver 

您应该在不输入密码的情况下登录到冷服务器。 键入exit以返回到热服务器

最后,将admin用户添加到Mattermost组。 将admin替换为适当的用户名:

 root@both_servers # usermod -a -G mattermost admin 

2.创建SQL备份

在两台服务器上,运行以下命令以创建sql目录来存储备份。

 root@both_servers # mkdir -p /opt/mattermost/sql 
root@both_servers # chown mattermost:mattermost /opt/mattermost/sql
root@both_servers # chmod -R a+rw /opt/mattermost/sql

然后运行此命令来备份数据库,并确保用正确的密码替换really_secure_password

PostgreSQL的

 admin@hotserver:~ export PGPASSWORD="really_secure_password" 
admin@hotserver:~ pg_dump -U mmuser -h localhost --format=c --compress=5 --file=/opt/mattermost/sql/db.sqlc mattermost

的MySQL

 admin@hotserver:~ mysqldump -u mmuser -p mattermost > /opt/mattermost/sql/mattermost.sql 

3.备份文件

我们唯一要从Mattermost备份的文件是config,data,plugins和logs目录。 我们可以使用以下命令将它们备份到远程服务器:

 admin@hotserver:~$ rsync -rltvzO --progress --stats /opt/mattermost/{data,config,plugins,logs,sql} coldserver:/opt/mattermost/ 

注意 :此食谱假设您将Mattermost托管在与数据库相同的服务器上。 如果不是,请确保从上述命令中删除config目录,以免最终删除冷服务器的配置文件。

4.通过在冷服务器上还原数据库来测试备份

在冷服务器上使用此命令来还原数据库:

PostgreSQL的

 admin@coldserver:~ export PGPASSWORD="really_secure_password" 
admin@coldserver:~ pg_restore -U mmuser -h localhost -C -d mattermost /opt/mattermost/sql/db.sqlc

的MySQL

 admin@coldserver:~ mysql -u mmuser -p < /opt/mattermost/sql/mattermost.sql 

然后,在冷服务器上运行:

 admin@coldserver:~ $ sudo service mattermost start 

并通过访问其URL登录到冷服务器。 除了会话表不正确会破坏图像外,所有内容都在那里。 现在记住关闭它:

 admin@coldserver:~ $ sudo service mattermost stop 

5.自动化

每天使用clone_to_cold_server.sh脚本在活动服务器上运行它。

首先将文件复制到admin用户的主目录中。

注意:导出数据库将占用大量资源,因此最好在低使用率期间运行。

 admin@hotserver:~ $ crontab -e 

然后添加以下行:

 42 3 * * * /home/admin/clone_to_cold_server.sh > ~/mattermost_cold_backup_log 2>&1 

讨论区

该食谱包括一个Vagrant系统,可让您在本地环境中演示和测试该系统。 为此,请安装Vagrant和Virtualbox。 然后, cd进入该目录并运行vagrant up

这将创建一个具有31个用户的“热服务器”和一个没有任何用户的“冷服务器”,并为vagrant用户提供步骤1和2中的相应文件权限。 要访问单独的服务器,请使用以下命令:

 $ vagrant ssh hotserver 
 $ vagrant ssh coldserver 

由于Vagrant的工作方式,该目录中的所有文件在两台测试服务器上的/vagrant中均可用。 因此,要复制clone_to_cold_server.sh ,请运行以下命令:

 vagrant@hotserver:~/ $ cp /vagrant/clone_to_cold_server.sh ~/ 

另外,这是一种非常基本的备份策略,旨在提供故障转移服务器,而仅提供其他功能。

您可以使用rsnapshot和WAL-E或automysqlbackup来创建文件系统和数据库的增量备份,从而对其进行改进。 这些将仅通过复制更改来减少备份的大小,并使您能够从特定的时间点还原。

编者注:该食谱由Mattermost客户社区经理Paul Rothrock撰写。最初出现在Mattermost博客上。)