Skip to content

Commit 5a86887

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 91bfb99 + 0c2876d commit 5a86887

File tree

18 files changed

+458
-36
lines changed

18 files changed

+458
-36
lines changed
126 KB
Loading
39.7 KB
Loading
40.4 KB
Loading
33.6 KB
Loading
68.1 KB
Loading

docs/guides/gettingStarted/faq.mdx

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,38 @@ docker compose down # 关闭组件
140140
KAFKA_HEAP_OPTS: "-Xms256m -Xmx256m" # 添加该限制
141141
```
142142

143+
---
143144

145+
## 六、 如何单步调试
144146

145-
---
147+
这一部分介绍在源码部署场景下,以单步调试`open-im-server`的`openim-api`服务为例,如何进行单步调试。
148+
149+
1. 运行`docker compose up -d`和`mage start`启动服务。
150+
151+
2. 查看控制台输出,如下所示:
152+
![debug0](faq.assets/debug0.png)
153+
154+
找到需要单步调试的服务,查看其`PID`,并使用命令停止服务。
155+
从图中可看到`openim-api`服务的`PID`为`854942`,可以使用如下命令停止:
156+
157+
```sh
158+
kill -9 854942 # 类Unix系统
159+
taskkill /PID 854942 /F # windows系统
160+
```
161+
162+
3. 找到相应的服务启动入口,统一在`open-im-server/cmd`目录下,在编辑器中使用`Debug`模式启动服务,`openim-api`服务的启动入口文件为`open-im-server/cmd/openim-api/main.go`。
163+
164+
4. 设置启动参数。以`Goland`编辑器为例,点击启动箭头,点击`Modify Run Configuration`,如下所示:
165+
![debug1](faq.assets/debug1.png)
166+
167+
5. 在控制台的输出找到`openim-api`服务的启动参数。从输出中提取到`openim-api`的启动命令为:`/data/open-im-server/_output/bin/platforms/linux/amd64/openim-msggateway -i 0 -c /data/open-im-server/config/`,其中`-i 0 -c /data/icey/open-im-server/config/`就是启动参数,将其复制并粘贴到`Program arguments`,并点击`OK`,如下:
168+
169+
![debug2](faq.assets/debug2.png)
170+
171+
6. 在需要测试的代码段中打上断点。
172+
173+
7. 使用`debug`模式启动,如下:
174+
![debug3](faq.assets/debug3.png)
146175

176+
8. 此时代码运行到断点处会停止,即可进行单步调试,如下:
177+
![debug4](faq.assets/debug4.png)
126 KB
Loading
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
title: '单机生产环境异常处理及数据恢复'
3+
sidebar_position: 12
4+
---
5+
6+
7+
8+
9+
在生产环境中,通常会采用集群部署来保证组件和服务的高可用性。然而,在资源有限的情况下,一些开发者可能会选择在生产环境中进行单机部署(使用源码部署或`docker`容器)。本文将介绍在单机部署环境下如何进行数据备份、异常恢复,以及潜在的风险。
10+
11+
## 一、mongo定时数据备份
12+
OpenIM核心数据存储在MongoDB中,因此备份MongoDB数据就能恢复大部分数据。在容器启动之前,设置mongo数据备份目录和定时任务。
13+
### 数据备份
14+
15+
OpenIM服务的核心数据存储在MongoDB中,因此备份MongoDB数据就能恢复大部分数据。以下是备份的步骤:
16+
17+
1. **修改备份目录**
18+
19+
- `.env`文件中修改`MONGO_BACKUP_DIR`的路径,默认值为`components/backup/mongo/`。建议将备份目录设置为与`components`目录不同的磁盘路径,以避免同一磁盘故障导致原始数据和备份数据同时丢失。
20+
3. **定时备份配置**
21+
- 配置Linux系统的定时备份任务,执行以下命令编辑crontab:
22+
```sh
23+
crontab -e
24+
```
25+
- 添加如下定时任务,表示每天凌晨2点执行备份,并保存最新的2个备份文件。如果需要其他定时规则,请调整`cron`表达式:
26+
```sh
27+
0 2 * * * docker exec mongo mongodump --uri="mongodb://openIM:openIM123@localhost:27017/openim_v3" --out="/data/backup/$(expr $(date +\%s) / 86400 \% 2)"
28+
```
29+
- 使用`crontab -l`命令可以查看当前定时任务是否设置成功。
30+
31+
32+
33+
## 二、组件异常停止处理
34+
35+
1. 如果 `mongo``redis``kafka``etcd` 等组件异常停止,首先尝试重启所有组件和 OpenIM 服务。
36+
37+
2. 如果由于数据问题(如磁盘故障、磁盘满等)导致服务启动失败,则先停止所有组件和 OpenIM 服务。
38+
- 如果 `redis` 启动失败,删除 `components/redis/` 目录。
39+
- 如果 `kafka` 启动失败,删除 `components/kafka/` 目录。
40+
- 如果 `mongo` 启动失败
41+
- 1. 删除 `components/redis/` `components/mongodb/` `components/kafka/`目录
42+
- 2. 恢复备份数据 docker exec -it mongo mongorestore --uri="mongodb://openIM:openIM123@localhost:27017/openim_v3" /data/backup/your_backup_name/openim_v3
43+
- **your_backup_name 为0 或者1, 选择时间较新的那个目录**
44+
- 如果 `etcd` 启动失败,删除 `components/etcd/` 目录。
45+
46+
3. 在进行上述操作后,重启所有组件和 OpenIM 服务。
47+
48+
## 三、潜在风险
49+
50+
1. **单机部署风险**
51+
如果机器故障导致原始数据磁盘和备份磁盘都无法访问,则无法直接恢复数据。此时,可能需要通过运营商的快照服务来恢复数据。
52+
53+
2. **备份目录建议**
54+
为防止由于单一磁盘故障导致的数据丢失,建议将 `mongo` 的备份目录 `MONGO_BACKUP_DIR` 设置为与 `components` 目录分开的磁盘。
55+
56+
3. **数据恢复风险**
57+
恢复 MongoDB 数据时,备份时间之后的数据将会丢失。因此,备份频率过快可能会对 MongoDB 的性能造成较大的影响。
58+
59+
4. **Redis 数据删除的影响**
60+
如果删除 Redis 中的数据,可能会导致 **消息未读数不正确**
61+

docs/guides/introduction/version.mdx

Lines changed: 112 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,123 @@ sidebar_position: 4
88

99
**OpenIMSDK** 长期维护的版本包括:
1010

11-
- **SDK** v3.8
12-
- **Server** v3.8
13-
- **Chat** v1.8
11+
- **SDK** v3.8 系列
12+
- **Server** v3.8 系列
13+
- **Chat** v1.8 系列
1414

1515
在同一大版本内,不同小版本之间数据兼容。我们建议您升级到最新的子版本,升级时请使用 **tag** 以确保版本的准确性和稳定性。
1616

1717
由于维护资源有限,其他版本将不再得到支持。请各位用户尽快完成升级,以享受最新的功能和优化。
1818

1919
## 当前最新稳定版本
2020

21-
- **SDK** v3.8.2
22-
- **Server** v3.8.2
23-
- **Chat** v1.8.3
21+
- **Server**: v3.8.3-patch.3
22+
- **SDK**: v3.8.3-patch.3
23+
- **Chat**: v1.8.4-patch.2
2424

25-
---
25+
---
26+
27+
# 版本更新日志
28+
29+
# v3.8.3-patch (2025-3-7)
30+
31+
## Server v3.8.3-patch.3 更新内容
32+
33+
| **类别** | **内容** |
34+
| ------------ | ------------------------------------------------------------------------------ |
35+
| **bug 修复** | 修复了 seq 转换工具在失败时没有正确退出的问题。 |
36+
| | 修复了设置 KickedToken 错误的问题。 |
37+
| | 修复了定时销毁信息错误的问题。 |
38+
| | 修复了异常消息缺少时间,导致 SDK 异常的问题。 |
39+
| | 修复了撤回已经退出群聊成员的信息,会导致崩溃的问题。 |
40+
| | 修复了用户设置定时销毁信息的时间单位不正确的问题。 |
41+
| | 修复了 seq 转换工具没有在 docker 环境下被正确读取的问题。 |
42+
| | 修复了离线推送推送错误和没有角标的问题。 |
43+
| | 修复了设置群信息没有正确通知到 SDK 的问题。 |
44+
| | 修复了管理员变更后排序错误的问题。 |
45+
| | 修复了加入群聊的通知类型不正确的问题。 |
46+
| **功能优化** | 优化了 sendNotification 的传递方式,可以通过参数来选择是否携带发送信息的标识。 |
47+
| | 优化了 docker 中映射 mongo 备份文件夹,并优化了日志打印 |
48+
| | 优化了批量获取增量群成员的方法。 |
49+
50+
## SDK v3.8.3-patch.3 更新内容
51+
52+
| **类别** | **内容** |
53+
| ------------ | ------------------------------------------------------ |
54+
| **bug 修复** | 修复了在较差网络环境时,异常消息可能重复的问题。 |
55+
| | 修复了会话 id 获取序列化的处理错误的问题。 |
56+
| | 修复了服务器崩溃或 req 缓存过期而导致消息间隙的问题。 |
57+
| | 修复了改变自己头像时,会话中的头像不会同步更新的问题。 |
58+
| | 修复了 seq 为 0 时,会导致同步失败的问题。 |
59+
| | 修复了获取群成员信息可能会失效的问题。 |
60+
| | 修复了在服务器直接拉取的消息会重复的问题。 |
61+
| **功能优化** | 优化了好友申请和群组申请过多时,会导致卡顿的问题。 |
62+
63+
## Chat v1.8.4-patch.2 更新内容
64+
65+
| **类别** | **内容** |
66+
| ------------ | ---------------------------------------------------- |
67+
| **bug 修复** | 修复了用户属性迁移工具,转换时无限循环的问题。 |
68+
| | 修复了获取缓存中的 AdminToken 可能会导致死锁的问题。 |
69+
| **功能优化** | 优化了 proto gen,并使用了新版本的 grpc 生成工具。 |
70+
71+
---
72+
73+
# v3.8.3 (2025-1-10)
74+
75+
## Server v3.8.3 更新内容
76+
77+
| **类别** | **内容** |
78+
| ------------ | --------------------------------------------------------------------------- |
79+
| **新特性** | 实现了 GetLastMessage 接口。 |
80+
| | 实现了同步 seq_user 的最大最小 seq 到 conversation 集合中用于 isEnd 判定 |
81+
| **功能优化** | 优化了 Crontask 定时删除消息的实现。 |
82+
| | 将 upload log 接口的 `systemType` 字段改成 `AppFramework` |
83+
| | 优化的 RPC 调用的通用方法 |
84+
| | 优化了消息缓存的逻辑 |
85+
| | 优化了日志输出函数 |
86+
| | 在 NotificationAccountInfo 结构体添加`AppMangerLevel`字段 |
87+
| **bug 修复** | 修复群成员头像设置无效。 |
88+
| | 修复了打印 log.ZPanic 的问题。 |
89+
| | 修复了当 SDK 拉取信息时,Server 返回 isEnd 来控制拉取信息。 |
90+
| | 修复了 rpc 发生 panic 时的恢复。 |
91+
| | 修复了设置 IsPrivateChat 时,修改其他字段不会生效。 |
92+
| | 修复了当引用消息时,偶现的原消息被删除的问题。 |
93+
| | 修复了关闭 `EnableHistoryForNewMembers`时,新成员仍能读到最后一条历史信息。 |
94+
| | 修复了 KickTokens 保存错误的问题。 |
95+
| | 修复了转发@消息到其他群中,造成异常会话生成的问题。 |
96+
| | 修复了在线状态错误的问题。 |
97+
| | 修复了服务发现和自动设置端口的错误 |
98+
| | 修复了 GetUsersOnline 时获取了错误的在线列表。 |
99+
| **其他** | 更新了前端镜像的版本 |
100+
101+
## SDK v3.8.3 更新内容
102+
103+
| **类别** | **内容** |
104+
| ------------ | --------------------------------------------------------------------------- |
105+
| **功能优化** | 添加参数来定位消息与方向拉取消息,避免 UI 数据干扰。 |
106+
| | 优化了消息获取逻辑 |
107+
| **bug 修复** | 修复了当 chatlog 表名包含`-`时创建索引错误。 |
108+
| | 修复了重装 APP 后,当前用户信息可能为空的问题。 |
109+
| | 修复了当关键字为空时,搜索消息不会过滤语音消息。 |
110+
| | 修复了当 APP 从后台打开或状态更新时,引用消息不会正确切换为撤销信息的错误。 |
111+
112+
## Chat v1.8.4 更新内容
113+
114+
| **类别** | **内容** |
115+
| ------------ | ---------------------------------------------- |
116+
| **新特性** | 实现了管理后台的配置中心对应功能。 |
117+
| **功能优化** | 优化了与 kubernetes 适配与对应服务的镜像生成。 |
118+
| | 优化了消息获取逻辑 |
119+
| **bug 修复** | 修复了 grpc 在 windows 时的连接内存泄漏。 |
120+
| | 修复了错误栈的打印问题。 |
121+
122+
---
123+
124+
# 版本兼容性
125+
126+
| 模块 | 版本号 | 兼容版本 |
127+
| ---------- | ------ | ---------------------------- |
128+
| **SDK** | v3.8.3 | Server v3.8.3 |
129+
| **Server** | v3.8.3 | SDK v3.8.2, SDK v3.8.3 |
130+
| **Chat** | v1.8.4 | Server v3.8.2, Server v3.8.3 |

docs/guides/solution/offlinePush.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,5 @@ enable: #选择 getui 或者 fcm
4444
- [OpenIM Flutter Demo 配置说明](https://github.com/openimsdk/openim-flutter-demo/blob/main/CONFIGKEY.zh-CN.md)
4545
- [OpenIM iOS Demo 配置说明](https://github.com/openimsdk/openim-ios-demo/blob/main/CONFIGKEY.zh-CN.md)
4646
- [OpenIM Uniapp Demo 配置说明](https://github.com/openimsdk/open-im-uniapp-demo/blob/main/CONFIGKEY.md)
47+
- [OpenIM Android Demo 配置说明](https://github.com/openimsdk/open-im-android-demo/blob/main/CONFIGKEY.zh-CN.md)
4748

0 commit comments

Comments
 (0)