跳到主要内容

迁移Dataflow任务日志

1. 迁移背景

自 Dataflow 版本 v1.17.1 开始,为了尽量减少数据库种类,优化部署复杂度,将不再使用 MongoDB 作为默认的任务日志存储数据库,改为使用 PostgreSQL 数据库。如果对历史任务的日志有保留的需求,需要根据下面的操作迁移到 PostgreSQL 数据库中,如果没有价值可以直接舍弃。

2. 开始迁移

2.1 本地暴露 MongoDB 服务

本地暴露服务以便使用脚本导出数据库中的数据为 SQL 脚本。

创建临时 Service:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: csghub
meta.helm.sh/release-namespace: csghub
labels:
app.kubernetes.io/instance: csghub
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: dataflow
app.kubernetes.io/service: mongo
name: csghub-mongo-export
namespace: csghub
spec:
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: mongo
port: 27017
protocol: TCP
targetPort: 27017
selector:
app.kubernetes.io/instance: csghub
app.kubernetes.io/name: dataflow
app.kubernetes.io/service: mongo
sessionAffinity: None
type: NodePort
EOF

2.2 配置迁移环境

导出脚本为 Python 脚本,运行前需要做如下准备:

  1. 配置本地 PIP Sources

    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
  2. 安装 Mongo SDK

    python -m pip install pymongo
  3. 获取数据库凭据

    kubectl get cm csghub-dataflow -o yaml -n csghub | grep MONG
  4. 修改脚本内的数据库链接

    MONGO_URI = "mongodb://root:<from configmap csghub-mongo>@127.0.0.1:<tmp service nodeport>"

2.3 执行导出操作【MongoDB】

curl -sL https://charts.opencsg.com/repository/scripts/python/migrate_mongo_to_sql.py | python

执行完成后会生成脚本mongo_logs_export.sql

2.4 执行导入操作【PostgreSQL】

  1. 拷贝脚本到数据库容器中

    kubectl cp mongo_logs_export.sql csghub/csghub-postgresql-0:/tmp
  2. 创建日志数据库

    kubectl exec -it csghub-postgresql-0 -n csghub -- su - postgres -l 'psql -U csghub -d csghub_server -c "create database csghub_dataflow_logs owner csghub_dataflow;"'
  3. 执行导入操作

    kubectl exec -it csghub-postgresql-0 -n csghub -- su - postgres -l 'psql -U csghub -d csghub_server -f /tmp/mongo_logs_export.sql'

2.5 删除临时服务

kubectl delete svc csghub-mongo-export -n csghub

3. 继续升级操作

继续升级到 CSGHub v2.0.0 或者 Dataflow v1.17.1。