首页 > 其他分享 >将TiDB各服务组件混布到物理机集群和K8S环境

将TiDB各服务组件混布到物理机集群和K8S环境

时间:2023-04-15 10:36:04浏览次数:56  
标签:混布 集群 TiDB http 迁移 K8S 节点

前提条件

  • 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如下

将TiDB各服务组件混布到物理机集群和K8S环境_Pod

第一步:在待迁移的物理机集群的所有节点中配置K8S集群内的DNS解析服务

获取K8S集群CoreDNS 或 kube-dns 服务的 endpoints 的 Pod ip 地址列表:

kubectl describe svc/kube-dns -n kube-system

修改所有待迁移物理机集群的节点/etc/resolv.conf配置,添加如下配置

search default.svc.cluster.local svc.cluster.local cluster.local
nameserver <CoreDNS Pod_IP_1>
nameserver <CoreDNS Pod_IP_2>
nameserver <CoreDNS Pod_IP_n>

vi /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local svc.cluster.local
nameserver 10.244.0.32
nameserver 10.244.0.33

通过ping在物理机节点测试K8S集群内域名是否正常访问

将TiDB各服务组件混布到物理机集群和K8S环境_Pod_02

第二步:在K8S中创建TiDB集群

查看pd节点的地址和端口号

pd-ctl -u http://<address>:<port> member | jq '.members | .[] | .client_urls'
 
 ##执行结果如下: 
  [root@tiup-172-16-5-144 ctl]# ./pd-ctl -u http://172.16.5.144:2379 member | jq '.members | .[] | .client_urls'
[
  "http://172.16.5.144:2379"
]
[
  "http://172.16.5.198:2379"
]
[
  "http://172.16.6.132:2379"
]

在K8S中创建目标TiDB集群(TiKV 节点个数不少于 3 个),并在 spec.pdAddresses 字段中指定待迁移 TiDB 集群的 PD 节点地址(以 http:// 开头)

spec
  ...
  pdAddresses:
  - http://pd1_addr:port
  - http://pd2_addr:port
  - http://pd3_addr:port
  
 
 
 
 ### 具体配置如下,仅供参:
 apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
  name: tidb-test
  namespace: lqbyz

spec:
  version: "v6.5.0"
  timezone: Asia/Shanghai
  hostNetwork: true
  imagePullPolicy: IfNotPresent

  enableDynamicConfiguration: true
  configUpdateStrategy: RollingUpdate

  pdAddresses:
  - http://172.16.5.xxx:2379
  - http://172.16.5.xxx:2379
  - http://172.16.6.xxx:2379

  pd:
    baseImage: pingcap/pd
    requests:
      cpu: "100m"
      memory: "400Mi"
      storage: 12Gi
    limits:
      cpu: "2000m"
      memory: "4Gi"

    config: |
      [dashboard]
        internal-proxy = true
      lease = 3
      enable-prevote = true
    replicas: 3
    mountClusterClientSecret: false
    storageClassName: "local-hostpath"
  tidb:
    baseImage: pingcap/tidb
    maxFailoverCount: 6
    replicas: 2
    config: {}
    service:
      externalTrafficPolicy: Cluster
      type: NodePort
      mysqlNodePort: 30082
      statusNodePort: 30092
  tikv:
    baseImage: pingcap/tikv
    replicas: 3
    requests:
      cpu: "100m"
      memory: "400Mi"
      storage: 50Gi
    limits:
      cpu: "2000m"
      memory: "4Gi"
    maxFailoverCount: 6
    mountClusterClientSecret: false
    storageClassName: "local-hostpath"
    config: {}
  enablePVReclaim: false
  pvReclaimPolicy: Delete
  tlsCluster: {}

通过apply应用改配置,确认部署在 Kubernetes 内的 TiDB 集群与待迁移物理机 TiDB 集群组成的新集群是否正常运行。

将TiDB各服务组件混布到物理机集群和K8S环境_Pod_03

在dashboar上可以查看所有组件信息

将TiDB各服务组件混布到物理机集群和K8S环境_服务器_04

第三步:逐步缩容待迁移物理机集群各服务组件

缩容待迁移的集群物理机的 TiDB节点,将TiDB节点缩容至0

若通过负载均衡或数据库访问层中间件的方式接入待迁移 TiDB集群,则先修改配置,将业务流量迁移至目标 TiDB 集群,避免影响业务。

缩容待迁移集群物理机的 TiKV 节点,将TiKV节点缩容至0

  • 如果待迁移集群使用 TiUP 部署,参考缩容 TiDB/PD/TiKV 节点一节。
  • 如果待迁移集群使用 TiDB Ansible 部署,参考缩容 TiKV 节点一节。
  • 依次缩容待迁移集群的 TiKV 节点,等待上一个 TiKV 节点对应的 store 状态变为 "tombstone" 后,再执行下一个 TiKV 节点的缩容操作。
  • 可通过 PD Control 工具查看 store 状态

缩容待迁移集群 PD 节点,将TiKV节点缩容至0

第四部:删除容器环境下spec.pdAddresses字段

为避免后续对集群进行操作时产生困惑,迁移成功后,建议将新集群的 manifest 中的 spec.pdAddresses 字段删除。


总结

本文介绍通过Tiup部署管理的TiDB集群在不借助备份恢复工具通过和K8S网络打通将TiDB数据库迁移到通过tidb Operator管理的K8S环境中,从而实现由物理机迁移到K8S环境的目的,也可实现物理机和容器共同管理TiDB集群,最后通过缩容物理机实现tidb集群不需要中间工具就可以迁移到容器环境中。

标签:混布,集群,TiDB,http,迁移,K8S,节点
From: https://blog.51cto.com/liqingbiao/6192227

相关文章

  • K8s中的external-traffic-policy
    K8s中的external-traffic-policy是什么?  【摘要】external-traffic-policy,顾名思义“外部流量策略”,那这个配置有什么作用呢?以及external是指什么东西的外部呢,集群、节点、Pod?今天我们就来学习一下这个概念吧。1      什么是external-traffic-policy在k8s的Serv......
  • 学习K8S 使用Operator部署管理Nginx
    创建一个KubernetesOperator部署nginx的大致过程如下:确定您要使用的OperatorSDK版本并安装它。使用OperatorSDK命令行创建新的Operator项目。定义CustomResourceDefinition(CRD),即将在Kubernetes中定义的自定义资源规范,以及该资源的状态和操作。例如,定义一个名为......
  • 使用kubeadm安装k8s
    相关链接kubeadm安装官网kubeadm安装k8s完整教程安装配置以下操作是每个节点都要执行的步骤配置hosts将主节点与子节点分别配置hostname如下:hostnamectlset-hostnamemaster#主节点hostnamectlset-hostnamenode1#子节点hostnamectlset-hostnamenode2#子节点在/e......
  • 66、K8S-部署管理-Helm-自定义helm项目
    1、自定义helm项目管理-实践1.1、自定义helm项目1.1.1、创建存放的目录mkdir-p/opt/custom_helm&&cd/opt/custom_helm1.1.2、创建helm项目helmcreatenginx1.2.3、目录的解析custom_helm]#treenginx/nginx/-自动生成的空ch......
  • k8s各组件作用和pod通信原理
    https://www.cnblogs.com/cyh00001/p/16488539.htmlkube-apiserverkube-apiserver负责和etcd交互,提供了k8s各类资源对象的增删改查及watch等HTTPRest接口,这些对象包括pods、services、replicationcontrollers等,APIServer为REST操作提供服务,并为集群的共享状态提供前端......
  • 65、K8S-部署管理-Helm基础知识、安装、入门示例
    Kubernetes学习目录1、基础知识1.1、需求在kubernetes平台上,我们在部署各种各样的应用服务的时候,可以基于手工或者自动的方式对各种资源对象实现伸缩操作,尤其是对于有状态的应用,我们可以结合持久性存储机制实现更大场景的伸缩动作。但是,无论我们怎么操作各种资源对象,问......
  • 深入了解Kubernetes(K8s):现代化容器编排和管理平台
    Kubernetes(简称K8s)是一种开源的容器编排和管理平台,用于自动化应用程序在容器化环境中的部署、扩展、管理和运维。Kubernetes最初由Google开发,并于2014年发布为开源项目,现在由CloudNativeComputingFoundation(CNCF)维护和管理。Kubernetes的设计目标是简化容器应用的部署、管理和......
  • TiDB单机部署
    1、安装包下载及环境说明TIDB软件包下载地址:https://cn.pingcap.com/product-community/操作系统:CentOS7.9TIDB版本:6.5.1TIDB所需安装包:tidb-community-toolkit-v6.5.1-linux-amd64.tar.gztidb-community-server-v6.5.1-linux-amd64.tar.gz2、创建系统用户#创建用......
  • k8s 查看 deployment 管理的所有 pod 日志
    背景k8s可以使用Deployment生成并管理多个pod,如果需要查看某个多pod实例的应用日志,一个一个pod依次排查过去未免太麻烦,需要有一种更高效的方式。实现使用如下命令即可查看一个Deployment的所有pod日志:kubectllogsdeployment/deployment的名字一些可选的命令参......
  • k8s1.27.x 最新版本使用kubeadm 的containerd的方式安装
    标签(空格分隔):kubernetes系列一:k8s1.27.x的概述1.1:k8s1.27.x更新Kubernetesv1.27正式发布,这是2023年的第一个版本!此版本包含60个增强功能。其中18个增强功能进入Alpha阶段,29个进入Beta阶段,13个进入Stable阶段。版本主题和标志Kubernetesv1.27:ChillVibes......