- 我们需要备份哪些K8S对象?
- 我如何备份我的持久卷(PVs)?
- 我的备份文件存储在哪里?
- 我的备份需要保持多久的可用性?
- 我能否恢复我的备份到另外一个K8S集群?
- 谁有访问这些备份的权限?
- 谁有权限实施备份?
- 我们能否按照预定的时间计划自动进行备份?
- 备份需要多长时间?
- 我的备份是安全的吗?
下面的介绍会逐一回答上面的问题,以及介绍如何在K8S生产环境备份和恢复MySQL。
3. 确保清晰的知道备份到哪个位置
4. 备份的时间计划以及备份的留存时间计划
5. 确保与应用关联的数据也被正确备份了,从而确保应用的一致性
我们来详细过一遍备份MySQL的关键步骤,包括一些代码样例和截图。
KBVER=$(kubectl version --short | awk -Fv '/Server Version: /{print $3}') curl -fsL -o stork-spec.yaml "https://install.portworx.com/2.5?kbver=${KBVER}&comp=stork" kubectl apply -f stork-spec.yaml
(没有运行 Portworx)
curl -fsL -o stork-spec.yaml "https://install.portworx.com/2.5?comp=stork&storkNonPx=true" kubectl apply -f stork-spec.yaml
当你创建了一个备份位置,你可以选择之前创建的云账户,输入相关的信息。
创建一个备份的时间计划
这步是可选的。
我们需要创建一个备份时间计划,来明确备份的频率(以达到RPO的目标),以及保存多少个备份。(注意:如果需要RPO为零,则需要使用PX-DR)。点击设定菜单的Schedule Policies,会出现一个界面来帮助你配置备份的时间计划。
点击浏览栏的Add按钮,
在这个界面,创建你需要的备份时间计划。你可以选择定期、每天、每周、或者每月,然后选择需要保存多少个备份。在后续对MySQL进行备份的过程中,就可以选择这个备份时间计划。
这个data directory位于MySQL服务器的文件系统的/var/lib/mysql 目录里。在这个目录里存储的文件和数据对于MySQL维持数据一致性非常重要。因此,我们mount K8S持久卷声明(PVCs),到MySQL镜像的data directory也非常重要。在K8S里,volumeMount的配置文件差不多是下面的样子:
volumeMounts: - name: mysql-data mountPath: /var/lib/mysql volumes: - name: mysql-data persistentVolumeClaim: claimName: mysql-data
在data directory内,MySQL存储与系统、性能和客户数据有关的:数据结构,表,日志文件、配置、以及数据库数据。Mount持久卷,使得PX-Backup可以在需要的时候对MySQL的数据进行快照和备份。
MySQL有一个叫做mysqldump的工具,可以专门用来对MySQL做备份。由于PX-Backup可以为多种数据类型提供数据备份和恢复的抽象,我们可以复制mysqldump的最佳工作方式(https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_add-locks)。例如flush和锁定日志和数据库表,并保存到PX-Backup的前置和后置规则里。PX-Backup的规则和备份可以跨多个MySQL实例和跨云来使用,这对于DevOps团队管理云环境和多云环境很有帮助。
MySQL的前置规则
在备份MySQL的时候,推荐方式是把一些特定数据flush到磁盘里,这样可以确保备份的一致性。如数据库表和日志,就应该被flush。对MySQL而言,另外很重要的一点是锁定数据库表,这样在备份期间,没有新的I/O请求来增加数据库记录,否则MySQL就无法保持一致性。
为了达到这样的目标,我们可以在前置规则中部署FLUSH TABLES WITH READ LOCK命令,它会进行下面的操作:
(FLUSH TABLES WITHREAD LOCK)- 关闭所有打开的数据库表,通过全局化的读锁定,来锁定所有数据库的所有表。对于文件系统是可以及时进行快照的Veritas或者ZFS来说,这是一个非常便捷的备份方式。
可以使用UNLOCK TABLES来解除锁定。
由于PX-Backup对K8S里的持久卷做快照,这会帮助我们完成我们的目标。
在PX-Backup的界面里,创建规则。
> 注意:我们设定规则在后台运行,这需要一个WAIT_CMD(https://docs.portworx.com/portworx-install-with-kubernetes/storage-operations/create-snapshots/snaps-3d/#step-1-create-rules),来使得规则可以正确的执行和退出。
MySQL的后置规则
由于我们在备份之前,Flush并锁定了MySQL的数据。那么在备份完成后,我们必须从全局化的读锁定中,解除对数据库的锁定。根据MySQL的技术文档,这是因为在FLUSH TABLES WITHREAD LOCK操作后,全局化的锁定并不会自动解锁。FLUSH LOGS(https://dev.mysql.com/doc/refman/8.0/en/flush.html#flush-logs)也是一个好的操作,它关闭并重新打开服务器正在执行写入操作的所有日志文件,并且更新日志的序列数字。如果用户需要在备份前后保持一个清晰的日志的区别,这个操作就很重要。Flushing Logs在我们现在的步骤中并不是必须的,但我们把它加入到后置规则中,以保持操作的完整。
在PX-Backup界面中创建规则。
> 注意: 备份的后置规则不允许在后台运行,所以我们需要WAIT_CMD(https://docs.portworx.com/portworx-install-with-kubernetes/storage-operations/create-snapshots/snaps-3d/#step-1-create-rules)
如果你需要备份特定的对象,在跳出的菜单栏中,输入下面的信息,
- 名称
- 备份位置
- 选择现在备份,还是有一个备份的时间计划
- 提供前置和后置规则
- 可选的备份标签
如果需要了解备份过程的进展,可以选择菜单栏里面的Show Details按钮,这会允许你查看当前的状态,以及与备份有关的元数据。所有的进展和错误信息都会在这个界面显示出来。
我们之前创建的前置和后置规则的一些状态信息也会显示出来。当这些规则在执行的时候,会显示为进行中。如果有任何的错误,也会在这个界面显示出来。
当规则执行完成,它会继续备份卷,信息细节也会变化,下面是一些信息的例子:
一旦备份成功完成,图标就会显示成下面的样子。
如果中间有任何错误,图标就会变成下面的红色的样子,在Show Details栏位,会显示错误的信息。
从备份中恢复MySQL
在下面的界面中,你可以提供恢复的名称,恢复到的目标集群,以及其它一些选项,包括:
-
-
默认恢复
-
会恢复备份到这个备份原本来自的命名空间。注意是否需要覆盖现有资源这个选项。
-
- 定制化恢复
会允许我们提供一个新的命名空间,来恢复备份。注意这个新的命名空间不需要在此之前就已经创建好。
-
- 覆盖现有资源
恢复的过程会覆盖现有的对象。实际操作中这些对象会被删除并重新创建。
-
- 恢复Jobs
Jobs通常运行一次就会完成。通常不需要反复运行这些Jobs – 特别是当我们把备份恢复到该备份原本来自的同一集群的情况下。但当我们恢复到一个新的集群或者新的命名空间的时候,就需要再次运行Jobs了。
你会在界面中看到状态从Pending变成了Success,你可以选择菜单里的Show Details,来获得备份相关的信息。
登录后评论
立即登录 注册