2023-12-21 16:53:33 +08:00

122 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 分布式数据管理
分布式数据管理基于分布式软总线,实现了应用程序数据和用户数据的分布式管理。用户数据不再与单一物理设备绑定,业务逻辑与数据存储分离,应用跨设备运行时数据无缝衔接。
分布式数据管理由上游 `OpenHarmony 3.2 Release` 版本移植而来,目前包含四个组件:
| 组件 | 对应openEuler软件包 | 功能介绍 |
| --- | --- | --- |
| 分布式数据服务Distributed Data Service | distributeddatamgr_datamgr_service | 提供不同设备间数据库数据分布式的能力 |
| 键值对数据库KV store | distributeddatamgr_kv_store | 为设备应用提供键值对数据管理能力 |
| 关系型数据库Relational store | distributeddatamgr_relational_store | 基于关系模型来管理数据的数据库 |
| 分布式数据对象部件Data object | distributeddatamgr_data_object | 具备多设备数据同步的面向对象的内存数据管理框架 |
更多分布式数据管理介绍,可参考[上游 OpenHarmony 文档 “数据管理” 相关章节](https://docs.openharmony.cn/pages/v3.2/zh-cn/application-dev/database/data-mgmt-overview.md/)。
## 安装
分布式数据管理相关组件目前在 openEuler-22.03-LTS-SP2 update 版本 和openEuler-22.03-LTS-SP3 版本发布,两个版本下的安装略有不同。
### openEuler-22.03-LTS-SP2 版本
分布式数据管理首次发布于 openEuler-22.03-LTS-SP2 update版本如果是使用 openEuler-22.03-LTS-SP2 版本,需要配置 update 版本的 repo步骤如下
1.`/etc/yum.repos.d` 目录下新增 update repo 配置文件 sp2_update.repo其内容填写如下
```config
[sp2_update]
name=sp2_update
baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP2/EPOL/update/main/$basearch/
enabled=1
```
1. 更新 repo 源。(需要保证当前网络可以访问 https://repo.openeuler.org
```shell
dnf makecache
```
1. 下载安装分布式管理的四个软件包及其依赖软件包
```shell
dnf install distributeddatamgr_kv_store distributeddatamgr_relational_store distributeddatamgr_datamgr_service distributeddatamgr_data_object
```
1. 如果是 openEuler-22.03-LTS-SP2 版本,需要配置 SA 服务拉起需要的 profile 文件,可以从 [](https://gitee.com/heppen/distributed-files-for-test/tree/master/profile) 下载。
```shell
mkdir -p /system/profile
wget https://gitee.com/heppen/distributed-files-for-test/raw/master/profile/device_manager.xml -P /system/profile/
wget https://gitee.com/heppen/distributed-files-for-test/raw/master/profile/distributeddata.xml -P /system/profile/
wget https://gitee.com/heppen/distributed-files-for-test/raw/master/profile/distributedfiledaemon.xml -P /system/profile/
wget https://gitee.com/heppen/distributed-files-for-test/raw/master/profile/huks_service.xml -P /system/profile/
wget https://gitee.com/heppen/distributed-files-for-test/raw/master/profile/softbus_server.xml -P /system/profile/
```
1. 下载 [服务启停脚本](https://gitee.com/heppen/distributed-data-files/blob/master/scripts/)
```shell
wget https://gitee.com/heppen/distributed-data-files/raw/master/scripts/start_services.sh -P /system/bin/
wget https://gitee.com/heppen/distributed-data-files/raw/master/scripts/stop_services.sh -P /system/bin/
chmod +x /system/bin/*.sh
```
### openEuler-22.03-LTS-SP3 版本
分布式数据管理在 openEuler-22.03-LTS-SP3 版本已经默认集成,直接安装即可:
```shell
dnf install distributeddatamgr_kv_store distributeddatamgr_relational_store distributeddatamgr_datamgr_service distributeddatamgr_data_object
```
## 启动服务
1. 分布式数据服务可以通过 start_services.sh 脚本来启动
```shell
/system/bin/start_services.sh datamgr
```
1. 可以通过 ps 命令查看分布式数据管理服务是否拉起
```shell
ps -ef | grep distributeddata
```
## 使用分布式数据功能
1. 新建demo运行需要的/data目录。因为OpenHarmony下app运行有指定的目录需要在openEuler下先新增
```shell
mkdir -p /data/app/el0/0/database/com.example.distributed.rdb/rdb
mkdir -p /data/app/el1/0/database/distributeddata/kvdb
mkdir -p /data/service/el1/public/database/distributeddata/meta
mkdir -p /data/service/el1/public/database/distributeddata/kvdb
mkdir -p /data/service/el1/public/database/distributeddata/meta/backup
```
1. 编写三个数据库kv_store/data_object/relational_store的客户端程序使用分布式数据功能。
客户端程序编写可参考[仓库](https://gitee.com/heppen/distributed-data-files)每个数据库的 demo 源代码demo 在这个仓库每个数据库同名目录下的 demo目录下如`kv_store/demo`,可使用对应目录下的 build.sh 脚本进行编译。
**注意demo 指定的数据 db 路径等,请最好保持和所给示例 demo 的路径一致,否则可能会存在路径不存在或者权限不足问题。**
1. 暂停分布式管理服务 datamgr_service
```shell
./stop_services.sh all # 停止所有服务
./stop_services.sh datamgr # 停止datamgr一个服务
```
## 常见问题
* 启动各个服务日志一直在报错 `Binder Driver died`。
原因:说明系统未开启 binder可以查看 `/dev/binder` 文件是否存在,如果不存在则说明未开启 binder。
解决方法启动binder功能参考[communication_ipc仓库说明](https://gitee.com/src-openeuler/communication_ipc/blob/46d83ed1462e521ce356aec48ef980dbf84cff80/README.md)开启binder功能。
* `softbus_server` 服务未成功起来,报错 `GetNetworkIfIp ifName:eth0 fail`。
原因:使用命令 `ip a` 查看当前系统的网卡名称,查看是否有 `eth0` 有线网卡名。 因为 `softbus_server` 是通过 `eth0` 这个有线网卡名来获取 ip 等信息,如果没有 `eth0` 网卡则无法启动 `softbus_server`。
解决方法一:修改网卡名称为 `eth0`。
解决方法二:修改 `softbus_server` 源码,将依赖的有线网卡名称改成当前系统的网卡名。
## 参考
1. [分布式文件系统概述](https://docs.openeuler.org/zh/docs/22.03_LTS_SP2/docs/Distributed/%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84.html)