9.5. 恢复系统数据库
通过缩减 pod(如 system-app 或禁用路由)来阻止记录创建。
使用以下步骤恢复 OpenShift secret 和系统数据库:
9.5.1. 恢复基于模板的部署 复制链接链接已复制到粘贴板!
使用以下步骤恢复基于模板的部署。
流程
- 在创建部署模板前恢复 secret:
oc apply -f system-smtp.json
oc apply -f system-smtp.json
模板参数将从复制的 secret 和 configmap 中读取:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.2. 恢复 system-mysql 复制链接链接已复制到粘贴板!
流程
将 MySQL 转储复制到 system-mysql pod:
oc cp ./system-mysql-backup.gz $(oc get pods -l 'deploymentConfig=system-mysql' -o json | jq '.items[0].metadata.name' -r):/var/lib/mysql
oc cp ./system-mysql-backup.gz $(oc get pods -l 'deploymentConfig=system-mysql' -o json | jq '.items[0].metadata.name' -r):/var/lib/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 解压缩备份文件:
oc rsh $(oc get pods -l 'deploymentConfig=system-mysql' -o json | jq -r '.items[0].metadata.name') bash -c 'gzip -d ${HOME}/system-mysql-backup.gz'oc rsh $(oc get pods -l 'deploymentConfig=system-mysql' -o json | jq -r '.items[0].metadata.name') bash -c 'gzip -d ${HOME}/system-mysql-backup.gz'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 MySQL DB 备份文件:
oc rsh $(oc get pods -l 'deploymentConfig=system-mysql' -o json | jq -r '.items[0].metadata.name') bash -c 'export MYSQL_PWD=${MYSQL_ROOT_PASSWORD}; mysql -hsystem-mysql -uroot system < ${HOME}/system-mysql-backup'oc rsh $(oc get pods -l 'deploymentConfig=system-mysql' -o json | jq -r '.items[0].metadata.name') bash -c 'export MYSQL_PWD=${MYSQL_ROOT_PASSWORD}; mysql -hsystem-mysql -uroot system < ${HOME}/system-mysql-backup'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.3. 恢复 system-storage 复制链接链接已复制到粘贴板!
将备份文件恢复到 system-storage:
oc rsync ./local/dir/system/ $(oc get pods -l 'deploymentConfig=system-app' -o json | jq '.items[0].metadata.name' -r):/opt/system/public/system
oc rsync ./local/dir/system/ $(oc get pods -l 'deploymentConfig=system-app' -o json | jq '.items[0].metadata.name' -r):/opt/system/public/system
9.5.4. 恢复 zync-database 复制链接链接已复制到粘贴板!
恢复 zync-database 的具体方法取决于为 3scale 应用的部署类型。
9.5.4.1. 基于模板的部署 复制链接链接已复制到粘贴板!
流程
将 zync DeploymentConfig 缩减为 0 个 pod:
oc scale dc zync --replicas=0 oc scale dc zync-que --replicas=0
oc scale dc zync --replicas=0 oc scale dc zync-que --replicas=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Zync 数据库转储复制到
zync-databasepod:oc cp ./zync-database-backup.gz $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq '.items[0].metadata.name' -r):/var/lib/pgsql/
oc cp ./zync-database-backup.gz $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq '.items[0].metadata.name' -r):/var/lib/pgsql/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 解压缩备份文件:
oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'gzip -d ${HOME}/zync-database-backup.gz'oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'gzip -d ${HOME}/zync-database-backup.gz'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 PostgreSQL DB 备份文件:
oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'psql -f ${HOME}/zync-database-backup'oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'psql -f ${HOME}/zync-database-backup'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下命令中,通过将
${ZYNC_REPLICAS}替换为副本数来恢复到原始副本数:oc scale dc zync --replicas=${ZYNC_REPLICAS} oc scale dc zync-que --replicas=${ZYNC_REPLICAS}oc scale dc zync --replicas=${ZYNC_REPLICAS} oc scale dc zync-que --replicas=${ZYNC_REPLICAS}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.4.2. 基于 Operator 的部署 复制链接链接已复制到粘贴板!
按照 使用 Operator 部署 3scale 下的说明,特别是 部署 APIManager 自定义资源 以重新部署 3scale 实例。
流程
通过将
${DEPLOYMENT_NAME}替换为您在创建 3scale 部署时定义的名称来存储副本数量:ZYNC_SPEC=`oc get APIManager/${DEPLOYMENT_NAME} -o json | jq -r '.spec.zync'`ZYNC_SPEC=`oc get APIManager/${DEPLOYMENT_NAME} -o json | jq -r '.spec.zync'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 zync DeploymentConfig 缩减为 0 个 pod:
oc patch APIManager/${DEPLOYMENT_NAME} --type merge -p '{"spec": {"zync": {"appSpec": {"replicas": 0}, "queSpec": {"replicas": 0}}}}'oc patch APIManager/${DEPLOYMENT_NAME} --type merge -p '{"spec": {"zync": {"appSpec": {"replicas": 0}, "queSpec": {"replicas": 0}}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Zync 数据库转储复制到
zync-databasepod:oc cp ./zync-database-backup.gz $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq '.items[0].metadata.name' -r):/var/lib/pgsql/
oc cp ./zync-database-backup.gz $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq '.items[0].metadata.name' -r):/var/lib/pgsql/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 解压缩备份文件:
oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'gzip -d ${HOME}/zync-database-backup.gz'oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'gzip -d ${HOME}/zync-database-backup.gz'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 PostgreSQL DB 备份文件:
oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'psql -f ${HOME}/zync-database-backup'oc rsh $(oc get pods -l 'deploymentConfig=zync-database' -o json | jq -r '.items[0].metadata.name') bash -c 'psql -f ${HOME}/zync-database-backup'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复到原始副本数:
oc patch APIManager ${DEPLOYMENT_NAME} --type merge -p '{"spec": {"zync":'"${ZYNC_SPEC}"'}}'oc patch APIManager ${DEPLOYMENT_NAME} --type merge -p '{"spec": {"zync":'"${ZYNC_SPEC}"'}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.4.3. 使用 backend-redis 和 system-redis 恢复 3scale 选项 复制链接链接已复制到粘贴板!
通过恢复 3scale,您将恢复 backend-redis 和 system-redis。这些组件具有以下功能:
*backend-redis:在 3scale 中支持应用身份验证和速率限制的数据库。它还可用于统计存储和临时作业存储。*system-redis:为 3scale 的后台作业提供临时存储,也用作 system-app pod Ruby 流程的消息总线。
backend-redis 组件
backend-redis 组件有两个数据库,即 data 和 queues。在默认的 3scale 部署中,数据和队列部署在 Redis 数据库中,但在不同的逻辑数据库索引 /0 和 /1 中。恢复 数据 数据库不会有任何问题,但恢复 队列 数据库可能会导致重复的作业。
关于作业重复,在 3scale 中,后端 worker 以毫秒为单位处理后台作业。如果 backend-redis 在最后一次数据库快照后 30 秒失败,并且您尝试恢复它,则在 30 秒内发生的后台作业会执行两次,因为后端没有系统来避免重复。
在这种情况下,您必须恢复备份,因为 /0 数据库索引包含没有在其它任何位置保存的数据。恢复 /0 数据库索引意味着您必须还原 /1 数据库索引,因为一个在没有数据库索引的情况下将无法存储。当您选择在不同的服务器中分隔数据库,而不是在不同的索引中分隔一个数据库时,队列的大小大约为零,因此最好不要恢复备份并丢失几个后台作业。在 3scale 托管设置中会出现这种情况,因此您需要为两者应用不同的备份和恢复策略。
'system-redis'component
大多数 3scale 系统后台作业是幂等的,也就是说,无论您运行它们多少次,相同的请求都会返回相同的结果。
以下是系统中由后台作业处理的事件示例:
- 通知作业,例如计划试用到期、即将到期的信用卡、激活提醒、计划更改、发票状态更改、PDF 报告.
- 例如开票和收费。
- 删除复杂对象。
- 后端同步作业。
- 索引作业,例如使用 sphinx。
- 清理工作,例如发票 ID。
- Janitorial 任务,如清除审计、用户会话、到期令牌、日志条目、暂停不活动帐户等。
- 流量更新。
- 代理配置更改监控和代理部署。
- 后台注册作业,
- Zync 作业,如单点登录(SSO)同步、路由创建。
如果您要恢复上述后台作业列表,3scale 的系统会维护每个恢复的作业的状态。在恢复完成后检查系统的完整性非常重要。
9.5.5. 确保 Backend 和 System 之间的信息的一致性。 复制链接链接已复制到粘贴板!
恢复 backend-redis 后,应强制同步系统的配置信息,以确保 后端 中的信息与 系统中的信息一致,这是事实来源。
9.5.5.1. 管理 backend-redis 的部署配置 复制链接链接已复制到粘贴板!
这些步骤旨在运行 backend-redis 的实例。
流程
编辑
redis-configconfigmap:oc edit configmap redis-config
oc edit configmap redis-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注释
redis-configconfigmap 中的SAVE命令:#save 900 1 #save 300 10 #save 60 10000
#save 900 1 #save 300 10 #save 60 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
redis-configconfigmap 中将appendonly设置为 no :appendonly no
appendonly noCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署
backend-redis以加载新配置:oc rollout latest dc/backend-redis
oc rollout latest dc/backend-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/backend-redis
oc rollout status dc/backend-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名
dump.rdb文件:oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/dump.rdb ${HOME}/data/dump.rdb-old'oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/dump.rdb ${HOME}/data/dump.rdb-old'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名
appendonly.aof文件:oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/appendonly.aof ${HOME}/data/appendonly.aof-old'oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/appendonly.aof ${HOME}/data/appendonly.aof-old'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将备份文件移到 POD 中:
oc cp ./backend-redis-dump.rdb $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r):/var/lib/redis/data/dump.rdb
oc cp ./backend-redis-dump.rdb $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r):/var/lib/redis/data/dump.rdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署
backend-redis以加载备份:oc rollout latest dc/backend-redis
oc rollout latest dc/backend-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/backend-redis
oc rollout status dc/backend-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
附加文件:oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli BGREWRITEAOF'
oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli BGREWRITEAOF'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 片刻后,请确保完成 AOF 重写:
oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli info' | grep aof_rewrite_in_progress
oc rsh $(oc get pods -l 'deploymentConfig=backend-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli info' | grep aof_rewrite_in_progressCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
aof_rewrite_in_progress = 1时,执行正在进行中。 -
定期检查,直到
aof_rewrite_in_progress = 0。零表示执行已经完成。
-
编辑
redis-configconfigmap:oc edit configmap redis-config
oc edit configmap redis-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
redis-configconfigmap 中取消注释SAVE命令:save 900 1 save 300 10 save 60 10000
save 900 1 save 300 10 save 60 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
redis-configconfigmap 中将appendonly设置为 yes :appendonly yes
appendonly yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署
backend-redis以重新载入默认配置:oc rollout latest dc/backend-redis
oc rollout latest dc/backend-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/backend-redis
oc rollout status dc/backend-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.5.2. 管理 system-redis的部署配置 复制链接链接已复制到粘贴板!
这些步骤旨在运行 system-redis 实例。
流程
编辑
redis-configconfigmap:oc edit configmap redis-config
oc edit configmap redis-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注释
redis-configconfigmap 中的SAVE命令:#save 900 1 #save 300 10 #save 60 10000
#save 900 1 #save 300 10 #save 60 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
redis-configconfigmap 中将appendonly设置为 no :appendonly no
appendonly noCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署
system-redis以加载新配置:oc rollout latest dc/system-redis
oc rollout latest dc/system-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/system-redis
oc rollout status dc/system-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名
dump.rdb文件:oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/dump.rdb ${HOME}/data/dump.rdb-old'oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/dump.rdb ${HOME}/data/dump.rdb-old'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名
appendonly.aof文件:oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/appendonly.aof ${HOME}/data/appendonly.aof-old'oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'mv ${HOME}/data/appendonly.aof ${HOME}/data/appendonly.aof-old'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
备份文件移到 POD 中:oc cp ./system-redis-dump.rdb $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r):/var/lib/redis/data/dump.rdb
oc cp ./system-redis-dump.rdb $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r):/var/lib/redis/data/dump.rdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署
system-redis以载入备份:oc rollout latest dc/system-redis
oc rollout latest dc/system-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/system-redis
oc rollout status dc/system-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
附加文件:oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli BGREWRITEAOF'
oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli BGREWRITEAOF'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 片刻后,请确保完成 AOF 重写:
oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli info' | grep aof_rewrite_in_progress
oc rsh $(oc get pods -l 'deploymentConfig=system-redis' -o json | jq '.items[0].metadata.name' -r) bash -c 'redis-cli info' | grep aof_rewrite_in_progressCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
aof_rewrite_in_progress = 1时,执行正在进行中。 -
定期检查,直到
aof_rewrite_in_progress = 0。零表示执行已经完成。
-
编辑
redis-configconfigmap:oc edit configmap redis-config
oc edit configmap redis-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
redis-configconfigmap 中取消注释SAVE命令:save 900 1 save 300 10 save 60 10000
save 900 1 save 300 10 save 60 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
redis-configconfigmap 中将appendonly设置为 yes :appendonly yes
appendonly yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署
system-redis以重新载入默认配置:oc rollout latest dc/system-redis
oc rollout latest dc/system-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/system-redis
oc rollout status dc/system-redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.6. 恢复 backend-worker 复制链接链接已复制到粘贴板!
恢复到 backend-worker 的最新版本:
oc rollout latest dc/backend-worker
oc rollout latest dc/backend-worker
检查推出部署的状态,以确保它已完成:
oc rollout status dc/backend-worker
oc rollout status dc/backend-workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.7. 恢复 system-app 复制链接链接已复制到粘贴板!
恢复到最新版本的 system-app :
oc rollout latest dc/system-app
oc rollout latest dc/system-app
检查推出部署的状态,以确保它已完成:
oc rollout status dc/system-app
oc rollout status dc/system-appCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.8. 恢复 system-sidekiq 复制链接链接已复制到粘贴板!
恢复到
system-sidekiq的最新版本:oc rollout latest dc/system-sidekiq
oc rollout latest dc/system-sidekiqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/system-sidekiq
oc rollout status dc/system-sidekiqCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.8.1. 恢复 system-sphinx 复制链接链接已复制到粘贴板!
恢复到最新版本的
system-sphinx:oc rollout latest dc/system-sphinx
oc rollout latest dc/system-sphinxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查推出部署的状态,以确保它已完成:
oc rollout status dc/system-sphinx
oc rollout status dc/system-sphinxCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.8.2. 恢复由 Zync 管理的 OpenShift 路由 复制链接链接已复制到粘贴板!
强制 Zync 重新创建缺少的 OpenShift 路由:
oc rsh $(oc get pods -l 'deploymentConfig=system-sidekiq' -o json | jq '.items[0].metadata.name' -r) bash -c 'bundle exec rake zync:resync:domains'
oc rsh $(oc get pods -l 'deploymentConfig=system-sidekiq' -o json | jq '.items[0].metadata.name' -r) bash -c 'bundle exec rake zync:resync:domains'Copy to Clipboard Copied! Toggle word wrap Toggle overflow