迁移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 脚本,运行前需要做如下准备:
-
配置本地 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 -
安装 Mongo SDK
python -m pip install pymongo -
获取数据库凭据
kubectl get cm csghub-dataflow -o yaml -n csghub | grep MONG -
修改脚本内的数据库链接
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】
-
拷贝脚本到数据库容器中
kubectl cp mongo_logs_export.sql csghub/csghub-postgresql-0:/tmp -
创建日志数据库
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;"' -
执行导入操作
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。