开源项目 OpenIM 单机部署生产环境异常处理及数据恢复
在生产环境中,通常会采用集群部署来保证组件和服务的高可用性。然而,在资源有限的情况下,一些开发者可能会选择在生产环境中进行单机部署(使用源码部署或docker
容器)。本文将介绍在单机部署环境下如何进行数据备份、异常恢复,以及潜在的风险。
一、mongo 定时数据备份
OpenIM 核心数据存储在 MongoDB 中,因此备份 MongoDB 数据就能恢复大部分数据。在容器启动之前,设置 mongo 数据备份目录和定时任务。
数据备份
OpenIM 服务的核心数据存储在 MongoDB 中,因此备份 MongoDB 数据就能恢复大部分数据。以下是备份的步骤:
修改备份目录
.env
文件中修改MONGO_BACKUP_DIR
的路径,默认值为components/backup/mongo/
。建议将备份目录设置为与components
目录不同的磁盘路径,以避免同一磁盘故障导致原始数据和备份数据同时丢失。
定时备份配置
配置 Linux 系统的定时备份任务,执行以下命令编辑crontab:
crontab -e
添加如下定时任务,表示每天凌晨 2 点执行备份,并保存最新的 2 个备份文件。如果需要其他定时规则,请调整
cron
表达式:0 2 * * * docker exec mongo mongodump --uri="mongodb://openIM:openIM123@localhost:27017/openim_v3" --out="/data/backup/$(expr $(date +\%s) / 86400 \% 2)"使用
crontab -l
命令可以查看当前定时任务是否设置成功。
二、组件异常停止处理
如果
mongo
、redis
、kafka
、etcd
等组件异常停止,首先尝试重启所有组件和 OpenIM 服务。如果由于数据问题(如磁盘故障、磁盘满等)导致服务启动失败,则先停止所有组件和 OpenIM 服务。
如果
redis
启动失败,删除components/redis/
目录。如果
kafka
启动失败,删除components/kafka/
目录。如果
mongo
启动失败删除components/redis/
components/mongodb/
components/kafka/
目录恢复备份数据 docker exec -it mongo mongorestore --uri="mongodb://openIM:openIM123@localhost:27017/openim_v3" /data/backup/your_backup_name/openim_v3your_backup_name 为 0 或者 1, 选择时间较新的那个目录如果
etcd
启动失败,删除components/etcd/
目录。
3.在进行上述操作后,重启所有组件和 OpenIM 服务。
三、潜在风险
单机部署风险
如果机器故障导致原始数据磁盘和备份磁盘都无法访问,则无法直接恢复数据。此时,可能需要通过运营商的快照服务来恢复数据。
备份目录建议
为防止由于单一磁盘故障导致的数据丢失,建议将
mongo
的备份目录MONGO_BACKUP_DIR
设置为与components
目录分开的磁盘。数据恢复风险
恢复 MongoDB 数据时,备份时间之后的数据将会丢失。因此,备份频率过快可能会对 MongoDB 的性能造成较大的影响。
Redis 数据删除的影响
如果删除 Redis 中的数据,可能会导致 消息未读数不正确。

github: 仓库地址
developer: 开发文档
评论