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,节假日休息