TiDB 在 WPS丨分享业务双机房建设实践
WPS Office 是一站式办公服务平台,全球范围内,每天有超过 5 亿个文件在 WPS Office 平台上被创建、编辑、和分享。本文分享了 WPS 在 TiDB 版本升级和双机房改造中的实践经验。
作者:曹鹏,WPS 云平台运维 Leader;肖尚武,WPS 云平台 DBA;庾俊,WPS 云文档研发。
背景
WPS 算是国内 TiDB 较早的一批用户,WPS 分享业务就是在 TiDB-v2.x 稳定运行了几年。直到 2020 远程办公爆发式增长,数据量巨大,为提高稳定性和性能,同时考虑到数据安全等方面因素,规避单机房故障导致的业务不可用风险,多机房建设及稳定性提升已然成为 WPS IT 建设中的重要指标。经过 TiDB 在近几年内的快速迭代,v2.x 已是很古老的版本,新版本的特性升级在建设双机房的过程中显得更加容易落地。
业务使用场景
在工作和生活中我们常需要传输各种各样的文件。普通的传输方式传输时间久低效,无权限控制不安全,而分享协作它会将文件以分享方式发送给他人,减少了因文件过大带来的传输时间。还可以设置好友编辑权限、有效期、自定义关闭文件的分享权限,大大提高了文件传输的安全性。WPS 分享业务在数据库结构上有个特殊的服务,它需要在单表上使用多个维度的索引,一个表需要分别通过多字段组合来查询,而且数据量巨大,目前单表最大规模约几十亿条数据。如果用传统的分库分表来设计,虽然也可以解决问题,但是会面临很多麻烦,比如代码逻辑复杂,数据冗余,数据不一致等问题,而使用 TiDB 分布式数据库就能轻松应对这些问题。
数据库对比选型的思考
TiDB 高度兼容 MySQL 协议,基本可以当成 MySQL 使用;天然的分布式存储与计算分离的架构的设计,让多副本保存数据无需考虑单点问题;同时能够动态在线扩容缩容,对应用透明不影响业务,操作也相对简单。除此之外,TiDB 官方社区活跃,文档很齐全,遇到问题时官方的响应也很及时。
环境现状
现有架构
TiDB 版本:TiDB-v2.x
双 IDC 架构
TiDB 版本:TiDB-v4.x
环境说明
因为现有架构的 TiDB 版本是 2.x 版本 ,不支持 TiDB CDC 同步数据到另一个 IDC 集群,所以需要先升级版本;利用 TiDB 滚动开启 binlog,配置 Drainer 再增量同步到 TiDB-v4.x。
架构演变
同步架构
双机房高可用架构
实施步骤
流程简述
实施步骤
TiDB-v2.x 滚动开启 binlog
## binlog trigger
enable_binlog = True
## Binlog Part
[pump_servers]
pump1 ansible_host=ip1 deploy_dir=/disk/ssd/tidb/pump
pump2 ansible_host=ip2 deploy_dir=/disk/ssd/tidb/pump
pump3 ansible_host=ip3 deploy_dir=/disk/ssd/tidb/pump
ansible-playbook deploy.yml --tags=pump -l ${pump1_ip},${pump2_ip},${pump3_ip}
ansible-playbook start.yml --tags=pump
ansible-playbook rolling_update.yml --tags=tidb
ansible-playbook rolling_update_monitor.yml --tags=prometheus
show pump status;
备份导入
./dumpling -h xxx.xxx.xxx.xxx -P 4000 -u root -pxxxxxx -r 200000 --tidb-mem-quota-query 536870912 -t 1 -F 128MB -B shared_link -o $bakdir
nohup /opt/tidb-toolkit-v4.x-linux-amd64/bin/tidb-lightning -config tidb-lightning.toml > nohup.out &
TiDB-v2.x 配置 Drainer 增量同步到 TiDB-v4.x
[drainer_servers]
drainer_tidb ansible_host=ip1 initial_commit_ts="xxxx"
cd /srv/tidb-ansible/conf
cp drainer.toml drainer_tidb_drainer.toml
detect-interval = 10
[syncer]
ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql,test"
txn-batch = 20
worker-count = 16
disable-dispatch = false
safe-mode = false
db-type = "TiDB"
replicate-do-db = ["xxxx"] #只同步需要迁移的db
[syncer.to]
host = "xxx.xxx.xxx.xxx"
user = "root"
password = "xxxxxx"
port = 4000
ansible-playbook deploy_drainer.yml
ansible-playbook start_drainer.yml
ansible-playbook rolling_update_monitor.yml --tags=prometheus
数据校验
TiDB-CDC 双机房实践
配置 CDC 同步
tiup ctl cdc changefeed create --pd=http://ip1:2379 --sink-uri="TiDB://root:xxxxx@xxx.xxx.xxx.xxx:4000/?worker-count=16&max-txn-row=20000" --changefeed-id="simple-replication-task" #创建同步
tiup ctl cdc changefeed list --pd=http://ip1:2379 #查看同步ID
tiup ctl cdc changefeed query -s --pd=http://ip1:2379 --changefeed-id=simple-replication-task #查看同步状态
tiup ctl cdc changefeed query --pd=http://ip1:2379 --changefeed-id=simple-replication-task #查看详细配置
TiDB-CDC 测试场景
cdc 重启 反复 kill cdc 进程 脚本持续写入更新 停 cdc 进程一小时, 重启 tidb follower tidb follower 停机一小时 重启 tidb master iptable 断网
HAProxy 代理
部署配置参考官方文档:https://pingcap.com/zh/blog/best-practice-haproxy。下面简述下 HAProxy 冷切、热切的方式:
冷切:冷切换代理至 IDC2 机房 TiDB 集群,修改配置直接重启 HAProxy
unlink haproxy.cfg
ln -s hw-haproxy.cfg haproxy.cfg重启 HAProxy
systemctl stop haproxy.service
systemctl start haproxy.service
haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
总结
遇到的问题
update mysql.tidb set VARIABLE_VALUE = '720h' where VARIABLE_NAME = 'tikv_gc_life_time';
-r xxx -f xxx
参数否则 TiDB OOM 的概率很高;参考:https://docs.pingcap.com/zh/tidb/stable/dumpling-overview/-r xxx -f xxx
参数 导出 MySQL 联合主键 [int,varchar]
类型大表很慢,长时间无法完成导出;反馈官方 PingCAP 老师,目前已经解决参考 PR:https://github.com/pingcap/tidb/issues/29386COLLATE=utf8_general_ci
,因 MySQL 默认 Collation: utf8mb4_general_ci
,TiDB 默认的 utf8mb4_bin
,DM 也没有找到可设置下游的排序规则参数;这边业务也需保持排序规则一致。目前是这样处理的:在初始化 TiDB 集群先配置 new_collations_enabled_on_first_bootstrap
改为 true,然后在 TiDB 显示指定 COLLATE=utf8_general_ci
建表进行迁移;其它小问题
TiDB 升级及双机房落地收益
感谢
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号
随时掌握互联网精彩
随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 坚持依法治国、依宪执政 7980520
- 2 春节申遗成功 7973462
- 3 儿子谈琼瑶去世细节 7820226
- 4 全国铁路客运首次突破40亿人次 7726418
- 5 琼瑶遗体初步检验结果公布 7621523
- 6 两度发现遇难者遗体博主或将受罚 7554663
- 7 泰国冬阴功申遗成功 7496572
- 8 辞职后 姚明发声 7325851
- 9 外交部回应韩国戒严风波 7293268
- 10 郭晶晶刘诗诗高圆圆坐一起 7119739