1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG135-TiDB容器化部署与管理

fgedu.net.cn

目录

一、基础概念

1.1 容器化定义

容器化是指将应用程序及其依赖打包成容器镜像,在容器环境中运行的技术。容器化可以提供一致的运行环境,简化部署和管理流程。

1.2 Kubernetes

Kubernetes是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。TiDB可以在Kubernetes上部署,利用其强大的编排能力。

1.3 TiDB Operator

TiDB Operator是一个Kubernetes operator,用于在Kubernetes集群上管理TiDB集群的生命周期,包括部署、扩缩容、升级等操作。

1.4 容器化优势

  • 一致性:容器镜像提供一致的运行环境
  • 便携性:容器可以在不同环境中运行
  • 隔离性:容器之间相互隔离
  • 可扩展性:通过Kubernetes实现自动扩缩容
  • 管理简化:通过Kubernetes统一管理容器

二、规划建议

2.1 环境规划

  • Kubernetes集群:准备一个运行中的Kubernetes集群
  • 存储:配置持久化存储,如PVC
  • 网络:确保Kubernetes集群网络正常
  • 资源:根据TiDB集群规模规划CPU和内存资源

2.2 部署模式

  • 单集群部署:在单个Kubernetes集群中部署TiDB
  • 多集群部署:在多个Kubernetes集群中部署TiDB,实现跨区域容灾
  • 混合部署:结合物理机和容器部署

2.3 存储规划

  • TiKV存储:使用高性能存储,如SSD
  • PD存储:使用可靠的存储
  • 监控存储:存储监控数据

三、实施方案

3.1 部署Kubernetes集群

使用k3s部署轻量级Kubernetes

# 安装k3s
curl -sfL https://get.k3s.io | sh -

# 查看节点状态
kubectl get nodes

# 查看集群状态
kubectl cluster-info
NAME         STATUS   ROLES                  AGE   VERSION
k3s-server   Ready    control-plane,master   1h    v1.26.0+k3s1

Kubernetes control plane is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy

使用kind部署本地Kubernetes集群

# 安装kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/local/bin/

# 创建集群
kind create cluster --name tidb-cluster

# 查看集群状态
kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy

风哥提示:

3.2 部署TiDB Operator

使用Helm部署TiDB Operator

# 添加TiDB Operator Helm仓库
helm repo add pingcap https://charts.pingcap.org/

# 更新Helm仓库
helm repo update

# 安装TiDB Operator
helm install tidb-operator pingcap/tidb-operator --namespace tidb-admin --create-namespace

# 查看TiDB Operator状态
kubectl get pods -n tidb-admin
NAME                                  READY   STATUS    RESTARTS   AGE
tidb-operator-7f7c5d8b9c-5f6k9        1/1     Running   0          10m
tidb-scheduler-5c687f9f74-7b8h6       1/1     Running   0          10m
tidb-backup-manager-5d5d9f5c7-9k8z8   1/1     Running   0          10m

3.3 部署TiDB集群

使用Helm部署TiDB集群

# 创建命名空间
kubectl create namespace tidb-cluster

# 部署TiDB集群
helm install tidb-cluster pingcap/tidb-cluster --namespace tidb-cluster --set pd.replicas=3 --set tikv.replicas=3 --set tidb.replicas=2

# 查看集群状态
kubectl get pods -n tidb-cluster
NAME                              READY   STATUS    RESTARTS   AGE
 tidb-cluster-pd-0                 1/1     Running   0          10m
 tidb-cluster-pd-1                 1/1     Running   0          10m
 tidb-cluster-pd-2                 1/1     Running   0          10m
 tidb-cluster-tikv-0               1/1     Running   0          10m
 tidb-cluster-tikv-1               1/1     Running   0          10m
 tidb-cluster-tikv-2               1/1     Running   0          10m
 tidb-cluster-tidb-0               1/1     Running   0          10m
 tidb-cluster-tidb-1               1/1     Running   0          10m
 tidb-cluster-monitor-0            3/3     Running   0          10m
 tidb-cluster-grafana-6d8f9f9c4f-8k8k8   1/1     Running   0          10m

查看集群服务

# 查看服务
kubectl get services -n tidb-cluster

# 查看TiDB服务
kubectl get svc tidb-cluster-tidb -n tidb-cluster
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
tidb-cluster-pd       ClusterIP   10.43.128.131           2379/TCP,2380/TCP                     10m
tidb-cluster-tikv     ClusterIP   None                    20160/TCP,20180/TCP                   10m
tidb-cluster-tidb     ClusterIP   10.43.145.187           4000/TCP,10080/TCP                    10m
tidb-cluster-monitor  ClusterIP   10.43.181.228           9090/TCP,3000/TCP,9093/TCP,9094/TCP   10m

NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
tidb-cluster-tidb   ClusterIP   10.43.145.187           4000/TCP,10080/TCP   10m

3.4 访问TiDB集群

端口转发访问TiDB

# 端口转发
kubectl port-forward svc/tidb-cluster-tidb 4000:4000 -n tidb-cluster &

# 连接TiDB
mysql -h 127.0.0.1 -P 4000 -u root -p

# 查看集群状态
SHOW STATUS LIKE 'TiDB%';

# 创建数据库和表
CREATE DATABASE fgedudb;
USE fgedudb;
CREATE TABLE fgedu_users (
    id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    age INT NOT NULL,
    created_at DATETIME NOT NULL
);

# 插入数据
INSERT INTO fgedu_users VALUES (1, 'admin', 'admin@example.com', 30, NOW());
INSERT INTO fgedu_users VALUES (2, 'user1', 'user1@example.com', 25, NOW());

# 查询数据
SELECT * FROM fgedu_users;
+------+----------+------------------+-----+---------------------+
| id   | username | email            | age | created_at          |
+------+----------+------------------+-----+---------------------+
|    1 | admin    | admin@example.com |  30 | 2024-04-09 10:00:00 |
|    2 | user1    | user1@example.com |  25 | 2024-04-09 10:00:00 |
+------+----------+------------------+-----+---------------------+

学习交流加群风哥QQ113257174

访问Grafana监控

# 端口转发
kubectl port-forward svc/tidb-cluster-monitor 3000:3000 -n tidb-cluster &

# 访问Grafana
# 地址:http://127.0.0.1:3000
# 默认用户名:admin,密码:admin

3.5 集群管理

扩缩容TiDB集群

# 扩缩容TiKV节点
helm upgrade tidb-cluster pingcap/tidb-cluster --namespace tidb-cluster --set tikv.replicas=4

# 扩缩容TiDB节点
helm upgrade tidb-cluster pingcap/tidb-cluster --namespace tidb-cluster --set tidb.replicas=3

# 查看集群状态
kubectl get pods -n tidb-cluster

升级TiDB集群

# 升级TiDB集群
helm upgrade tidb-cluster pingcap/tidb-cluster --namespace tidb-cluster --set imageTag=v7.5.0

# 查看升级状态
kubectl get pods -n tidb-cluster

备份与恢复

# 创建备份
kubectl apply -f backup.yaml

# backup.yaml示例
apiVersion: pingcap.com/v1alpha1
kind: Backup
metadata:
  name: backup-example
  namespace: tidb-cluster
spec:
  backupType: full
  br:
    cluster: tidb-cluster
    clusterNamespace: tidb-cluster
  from:
    host: tidb-cluster-tidb
    port: 4000
    user: root
  storage:
    provider: s3
    s3:
      provider: aws
      region: us-east-1
      bucket: tidb-backup
      prefix: backup-$(date +%Y%m%d-%H%M%S)
      accessKey: AKIA...
      secretKey: ...

# 查看备份状态
kubectl get backup -n tidb-cluster

# 执行恢复
kubectl apply -f restore.yaml

# restore.yaml示例
apiVersion: pingcap.com/v1alpha1
kind: Restore
metadata:
  name: restore-example
  namespace: tidb-cluster
spec:
  backupType: full
  br:
    cluster: tidb-cluster
    clusterNamespace: tidb-cluster
  to:
    host: tidb-cluster-tidb
    port: 4000
    user: root
  storage:
    provider: s3
    s3:
      provider: aws
      region: us-east-1
      bucket: tidb-backup
      prefix: backup-20240409-100000
      accessKey: AKIA...
      secretKey: ...

# 查看恢复状态
kubectl get restore -n tidb-cluster

四、实战案例

4.1 生产环境容器化部署

场景:企业需要在生产环境中容器化部署TiDB集群,确保高可用和可管理性。

步骤1:准备Kubernetes集群

# 部署生产级Kubernetes集群
# 使用kubeadm部署Kubernetes

# 安装必要的组件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/cloud/deploy.yaml

# 配置存储类
kubectl apply -f storageclass.yaml

# storageclass.yaml示例
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
  - debug

步骤2:部署TiDB Operator

# 添加TiDB Operator Helm仓库
helm repo add pingcap https://charts.pingcap.org/
helm repo update

# 安装TiDB Operator
helm install tidb-operator pingcap/tidb-operator --namespace tidb-admin --create-namespace --set operator.image.tag=v1.5.0

# 查看TiDB Operator状态
kubectl get pods -n tidb-admin
NAME                                  READY   STATUS    RESTARTS   AGE
tidb-operator-7f7c5d8b9c-5f6k9        1/1     Running   0          10m
tidb-scheduler-5c687f9f74-7b8h6       1/1     Running   0          10m
tidb-backup-manager-5d5d9f5c7-9k8z8   1/1     Running   0          10m

步骤3:部署TiDB集群

# 创建命名空间
kubectl create namespace tidb-prod

# 部署TiDB集群
helm install tidb-prod pingcap/tidb-cluster --namespace tidb-prod --values tidb-values.yaml

# tidb-values.yaml示例
pd:
  replicas: 3
  requests:
    cpu: 2
    memory: 4Gi
  limits:
    cpu: 4
    memory: 8Gi

tikv:
  replicas: 5
  requests:
    cpu: 4
    memory: 8Gi
  limits:
    cpu: 8
    memory: 16Gi
  storage:
    storageClassName: standard
    size: 100Gi

tidb:
  replicas: 3
  requests:
    cpu: 4
    memory: 8Gi
  limits:
    cpu: 8
    memory: 16Gi
  service:
    type: LoadBalancer

monitor:
  enabled: true
  requests:
    cpu: 2
    memory: 4Gi
  limits:
    cpu: 4
    memory: 8Gi

# 查看集群状态
kubectl get pods -n tidb-prod
NAME                              READY   STATUS    RESTARTS   AGE
 tidb-prod-pd-0                 1/1     Running   0          10m
 tidb-prod-pd-1                 1/1     Running   0          10m
 tidb-prod-pd-2                 1/1     Running   0          10m
 tidb-prod-tikv-0               1/1     Running   0          10m
 tidb-prod-tikv-1               1/1     Running   0          10m
 tidb-prod-tikv-2               1/1     Running   0          10m
 tidb-prod-tikv-3               1/1     Running   0          10m
 tidb-prod-tikv-4               1/1     Running   0          10m
 tidb-prod-tidb-0               1/1     Running   0          10m
 tidb-prod-tidb-1               1/1     Running   0          10m
 tidb-prod-tidb-2               1/1     Running   0          10m
 tidb-prod-monitor-0            3/3     Running   0          10m
 tidb-prod-grafana-6d8f9f9c4f-8k8k8   1/1     Running   0          10m

步骤4:配置访问

# 查看TiDB服务
kubectl get svc tidb-prod-tidb -n tidb-prod

# 配置Ingress
kubectl apply -f ingress.yaml

# ingress.yaml示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tidb-ingress
  namespace: tidb-prod
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: tidb.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tidb-prod-tidb
            port:
              number: 4000

# 配置监控访问
kubectl apply -f monitor-ingress.yaml

# monitor-ingress.yaml示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: monitor-ingress
  namespace: tidb-prod
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: monitor.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tidb-prod-monitor
            port:
              number: 3000

五、经验总结

5.1 容器化部署最佳实践

  • 使用TiDB Operator:TiDB Operator简化了TiDB集群在Kubernetes上的管理
  • 合理配置资源:根据集群规模和业务需求配置CPU和内存资源
  • 使用持久化存储:为TiKV和PD配置持久化存储
  • 配置监控:启用监控组件,及时发现和处理问题
  • 定期备份:制定完善的备份策略
  • 测试升级:在测试环境中测试升级过程

5.2 容器化管理最佳实践

  • 使用Helm管理:使用Helm进行应用管理和版本控制
  • 自动化部署:使用CI/CD工具实现自动化部署
  • 监控容器状态:监控容器的运行状态和资源使用情况
  • 日志管理:收集和分析容器日志
  • 安全管理:配置容器安全策略

5.3 常见问题与解决方案

问题 原因 解决方案
Pod启动失败 资源不足、配置错误 检查资源配置,查看Pod日志
存储问题 PVC创建失败、存储类配置错误 检查存储类配置,确保存储可用
网络问题 网络策略限制、DNS配置错误 检查网络策略,配置DNS
性能问题 资源配置不足、存储性能差 增加资源配置,使用高性能存储
升级失败 版本不兼容、资源不足 检查版本兼容性,确保资源充足

5.4 容器化部署检查清单

检查项 配置要求 状态
Kubernetes集群 Kubernetes集群运行正常
TiDB Operator TiDB Operator部署成功
存储配置 持久化存储配置正确
资源配置 CPU和内存资源配置合理
监控配置 监控组件部署成功
备份策略 备份策略配置正确
访问配置 访问方式配置正确
安全配置 安全策略配置正确

更多视频教程www.fgedu.net.cn

© 2024 TiDB数据库培训文档

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息