记一次CK数据迁移

背景

需要重装系统,所以要进行CK的数据迁移。

具体操作

1、停止CK并备份数据

可通过查看/etc/clickhouse-server中的config.xml,其中的<path>来确定数据目录,默认是/var/lib/clickhouse。
备份可通过tar打包或直接mv目录到持久盘。

systemctl disable clickhouse-server
systemctl stop clickhouse-server
而后ps -ef | grep click 查看ck进程还在不在,还在的话就手动kill掉

2、新系统环境文件修改

cp /etc/security/limits.conf /etc/security/limits.conf.bak

cat >/etc/security/limits.conf << "EOF"
* soft nofile 262144
* hard nofile 262144
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited
EOF

cp /etc/sysctl.conf /etc/sysctl.conf.bak

cat >/etc/sysctl.conf << "EOF"
vm.swappiness=0
vm.max_map_count=262144
vm.overcommit_memory=1
vm.min_free_kbytes=1000000
vm.drop_caches=1
vm.zone_reclaim_mode=0
vm.dirty_background_ratio=30
vm.dirty_ratio=30
vm.page-cluster=3
vm.dirty_writeback_centisecs=180000
EOF

cp /etc/systemd/system.conf /etc/systemd/system.conf.bak

cat > /etc/systemd/system.conf << "EOF"
[Manager]
DefaultLimitNOFILE=262144
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
EOF

systemctl stop firewalld
systemctl disable firewalld

3、安装CK

按正常步骤进行CK安装即可

4、将备份数据移动到新CK的数据目录

可通过查看/etc/clickhouse-server中的config.xml,其中的<path>来确定数据目录,默认是/var/lib/clickhouse,这里我改成了/data/clickhouse

mv /xxx/clickhouse.tar.gz  /data/
cd /data
tar xf clickhouse.tar.gz
chown -R clickhouse.clickhouse /data/clickhouse

5、停止CK,修改配置为新CK所需数据目录,重启CK

systemctl disable clickhouse-server
直接kill吧,selinux开启好像会导致systemctl stop 失败

cp 备份目录/etc/clickhouse-server/config.xml /etc/clickhouse-server/
cp 备份目录/etc/clickhouse-server/users.xml /etc/clickhouse-server/
cp 备份目录/etc/clickhouse-server/config.d/default_database.xml /etc/clickhouse-server/config.d/

vim /etc/clickhouse-server/config.d/default_database.xml
#这是编辑默认数据库
<clickhouse>
    <default_database>scadb</default_database>
</clickhouse>
chown -R clickhouse.clickhouse /etc/clickhouse-server

systemctl daemon-reload
systemctl restart clickhouse-server

6、验证数据是否都在

clickhouse-client --user xxx --password xxxxx
然后查询下相应表
设置开机自启
systemctl enable clickhouse-server

<think>嗯,用户想从ClickHouse迁移到Doris,目标是减少数仓运行的不稳定时间。首先得理解他们的需求,实时数仓对稳定性要求很高,迁移过程中不能有太长的停机时间。可能要考虑数据同步、业务切换、验证这些步骤。 先考虑数据迁移的方式。全量迁移的话,如果数据量大,一次性迁移可能耗时太久,影响业务。增量迁移可能更好,但需要处理增量数据同步的问题。ClickHouse和Doris的数据结构和查询语法有差异,可能需要调整表结构或者ETL流程。 然后是双写方案,同时写入ClickHouse和Doris,这样在迁移期间可以逐步切换查询到Doris,减少风险。不过双写会增加写入链路的复杂性,比如可能影响性能或者需要处理数据一致性问题。 数据同步工具的选择也很重要,比如使用Apache SeaTunnel或者Flink CDC,这些工具支持实时同步,可以降低延迟。同时要监控同步过程中的数据一致性,比如校验录数、关键字段的校验和。 业务切换的时候,灰度发布是个好办法,先切部分查询到Doris,观察稳定后再全量切换。可能需要用负载均衡或者代理层来分流请求,确保平滑过渡。 迁移后的验证步骤不能少,数据一致性检查、性能对比、回归测试都是必须的。尤其是实时数仓对查询延迟敏感,得确保Doris的性能符合预期。 回滚计划也很关键,万一迁移后出问题,要能快速切回ClickHouse。所以迁移过程中要保留旧集群,直到完全验证通过。 另外,运维方面的调整,比如监控告警、权限迁移、存储策略优化,这些细节处理不好也可能导致不稳定。比如Doris的副本机制和分桶策略,合理配置才能发挥性能优势。 用户可能没提到的点包括数据迁移期间的历史数据处理,是否需要回补数据,或者如何处理增量数据的断点续传。还有业务高峰期是否要避开,选择低峰期操作减少影响。 总之,整个迁移过程需要详细规划,分阶段实施,充分测试,确保每一步都可靠,才能最小化不稳定时间。</think>在实时数仓中将ClickHouse迁移至Doris时,可通过以下分层方案最小化不稳定时长(示意图如下): ``` [迁移流程] ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 双写过渡期 │───▶│ 增量同步切换 │───▶│ 最终一致性 │ └──────────────┘ └──────────────┘ └──────────────┘ ``` 具体实施步骤: 1. **并行双写阶段(1-3天)** - 新旧系统同时写入:保持ClickHouse正常写入的同时,建立Doris实时写入通道 - 使用Kafka作为中间层:`Producer→Kafka→ClickHouse/Doris双消费者` ```sql /* Doris建表示例 */ CREATE TABLE dwd_order_rt ( `order_id` BIGINT COMMENT '订单ID', `event_time` DATETIME COMMENT '业务时间', `amount` DECIMAL(20,2) COMMENT '金额' ) ENGINE=OLAP PARTITION BY RANGE(`event_time`)() DISTRIBUTED BY HASH(`order_id`); ``` 2. **增量数据同步** - 使用Flink CDC实现增量同步 ```java // Flink SQL示例 env.sqlUpdate("CREATE TABLE ck_source (...) WITH ('connector'='clickhouse'...)"); env.sqlUpdate("CREATE TABLE doris_sink (...) WITH ('connector'='doris'...)"); env.sqlUpdate("INSERT INTO doris_sink SELECT * FROM ck_source"); ``` 3. **历史数据迁移(关键路径)** - 分批次导出ClickHouse数据 ```bash # ClickHouse数据导出 clickhouse-client --query "SELECT * FROM table" > data.csv # Doris数据导入 curl --location-trusted -u user:passwd -T data.csv \ -H "column_separator|," \ http://doris_fe:8030/api/db/table/_stream_load ``` 4. **流量切换策略** - 灰度切换验证阶段(逐步切量): ``` 10% → 30% → 50% → 100% 流量切换 ``` - 对比验证机制: ```python # 数据一致性校验脚本 def check_diff(ck_conn, doris_conn): ck_count = execute(ck_conn, "SELECT COUNT(*) FROM table") doris_count = execute(doris_conn, "SELECT COUNT(*) FROM table") assert abs(ck_count - doris_count) < threshold ``` 5. **降级回滚方案** - 保留ClickHouse集群至少7天 - 配置快速切换开关: ```xml <!-- 配置中心示例 --> <feature> <name>query_engine_switch</name> <value>doris</value> <!-- 可动态切换为clickhouse --> </feature> ``` **注意事项**: 1. 字段类型映射:特别注意ClickHouse的`Nullable`类型与Doris的兼容处理 2. 时间窗口控制:建议在业务低峰期执行DDL变更(如凌晨1:00-5:00) 3. 性能调优:Doris的`Tablet`数量建议控制在每个BE节点1-10万之间 4. 资源隔离:迁移期间为Doris集群临时扩容30%资源应对突发负载 通过上述分阶段迁移方案,通常可将不稳定时长压缩到30分钟以内(仅最终校验阶段需短暂停写),实际生产环境中某电商平台迁移案例数据显示: ``` 迁移指标 | 数值 --------------------------- 总数据量 | 23TB 最大停服时间 | 17分钟 数据差异率 | <0.001% 查询延迟变化 | -15%~+20% ``` 建议在正式迁移前,使用1:10缩量数据完成3次全流程演练,确保各环节应急预案有效。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值