将 TiDB 各服务组件混布到物理机集群和 K8S 环境
作者: lqbyz 原文来源:https://tidb.net/blog/95f35f0c
前提条件
K8S 集群外的服务器节点和 K8S 集群内的 Pod 网络必须保持互通 (本文采用将物理机节点加入 K8S 集群然后打污点并驱逐该服务器里边的 pod 的方式来实现)
K8S 机器外的服务器节点必须可以通过添加解析的方式来解析 K8S 集群内部 Pod 域名(具体见第一步)
待迁移集群没有开启组件间 TLS 加密通信
环境
目前环境主要配置如下:
| 序号 | 环境 | 集群名称 | 组件 | 数量 | 备注 || – | —– | ——— | —- | – | ———- || 1 | IDC | tidb-idc | tidb | 1 | || 2 | | | pd | 3 | || 3 | | | tikv | 3 | || 4 | K8S 环境 | tidb-test | tidb | 2 | 命名空间为 lqbyz || 5 | | | pd | 3 | || 6 | | | tikv | 3 | |
物理机 dashboard 如下
第一步:在待迁移的物理机集群的所有节点中配置 K8S 集群内的 DNS 解析服务
获取 K8S 集群 CoreDNS 或 kube-dns 服务的 endpoints 的 Pod ip 地址列表:
修改所有待迁移物理机集群的节点 /etc/resolv.conf 配置,添加如下配置
通过 ping 在物理机节点测试 K8S 集群内域名是否正常访问
第二步:在 K8S 中创建 TiDB 集群
查看 pd 节点的地址和端口号
在 K8S 中创建目标 TiDB 集群(TiKV 节点个数不少于 3 个),并在 spec.pdAddresses
字段中指定待迁移 TiDB 集群的 PD 节点地址(以 http://
开头)
通过 apply 应用改配置,确认部署在 Kubernetes 内的 TiDB 集群与待迁移物理机 TiDB 集群组成的新集群是否正常运行。
在 dashboar 上可以查看所有组件信息
第三步:逐步缩容待迁移物理机集群各服务组件
缩容待迁移的集群物理机的 TiDB 节点,将 TiDB 节点缩容至 0
如果待迁移集群使用 TiUP 部署,参考缩容 TiDB/PD/TiKV 节点一节。
如果待迁移集群使用 TiDB Ansible 部署,参考缩容 TiDB 节点一节。
若通过负载均衡或数据库访问层中间件的方式接入待迁移 TiDB 集群,则先修改配置,将业务流量迁移至目标 TiDB 集群,避免影响业务。
缩容待迁移集群物理机的 TiKV 节点,将 TiKV 节点缩容至 0
如果待迁移集群使用 TiUP 部署,参考缩容 TiDB/PD/TiKV 节点一节。
如果待迁移集群使用 TiDB Ansible 部署,参考缩容 TiKV 节点一节。
依次缩容待迁移集群的 TiKV 节点,等待上一个 TiKV 节点对应的 store 状态变为 “tombstone” 后,再执行下一个 TiKV 节点的缩容操作。
可通过 PD Control 工具查看 store 状态
缩容待迁移集群 PD 节点,将 TiKV 节点缩容至 0
如果待迁移集群使用 TiUP 部署,参考缩容 TiDB/PD/TiKV 节点一节。
如果待迁移集群使用 TiDB Ansible 部署,参考缩容 PD 节点一节。
第四部:删除容器环境下 spec.pdAddresses 字段
为避免后续对集群进行操作时产生困惑,迁移成功后,建议将新集群的 manifest 中的 spec.pdAddresses
字段删除。
总结
本文介绍通过 Tiup 部署管理的 TiDB 集群在不借助备份恢复工具通过和 K8S 网络打通将 TiDB 数据库迁移到通过 tidb Operator 管理的 K8S 环境中,从而实现由物理机迁移到 K8S 环境的目的, 也可实现物理机和容器共同管理 TiDB 集群,最后通过缩容物理机实现 tidb 集群不需要中间工具就可以迁移到容器环境中。
##
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/d8f5f318da7cde9a8c832f51f】。文章转载请联系作者。
评论