#3台机器,每台部署1pd,1tikv,1tidb;共3pd,3tikv,3tidb

#外加nginx负载均衡单节点dockers-compose部署

#tidb的3台机器192.168.1.41;192.168.1.42;192.168.1.43

#nginx单节点192.168.1.24

#首先自行初始化服务器关闭防火墙、SElinux、设置时间同步等,云服务器可以直接开始部署

#部署docker和dockers-compose,本次选择docker-27.3.1和docker-compose-2.29.7

#下载地址:https://download.docker.com/linux/static/stable/x86_64/

#上传docker-27.3.1.tgz到/opt下

cd /opt && tar -xvf docker-27.3.1.tgz

#复制所有解压出来的文件进/usr/bin

cp /opt/docker/* /usr/bin/

vim /etc/systemd/system/docker.service

#复制写入下述配置

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

#完成写入配置后给予权限

chmod +x /etc/systemd/system/docker.service

systemctl daemon-reload

#启动并设置开机自启docker

systemctl enable docker --now

#清除安装文件

rm -rf /opt/docker

#下载docker-compose,下载地址:https://github.com/docker/compose/releases

#下滑选择所需版本,Assets点击下拉菜单,根据系统和cpu架构选择下载,直接下载二进制文件

#linux系统x86架构本次选择下载docker-compose-linux-x86_64

#上传docker-compose-linux-x86_64到/opt下

cd /opt/ && mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

#设置docker下拉镜像加速

vim /etc/docker/daemon.json

#写入多条加速配置

{
    "registry-mirrors": [
            "https://docker.211678.top",
            "https://docker.1panel.live",
            "https://hub.rat.dev",
            "https://docker.m.daocloud.io",
            "https://do.nark.eu.org",
            "https://dockerpull.com",
            "https://dockerproxy.cn",
            "https://docker.awsl9527.cn"
      ]
}

#保存生效配置

systemctl daemon-reload

systemctl restart docker

#docker部署完成

#tidb的dockers镜像下载,本次选择v8.1.2版本

#离线环境需要先在有互联网环境的docker机器上先下载镜像,再上传至离线环境
docker pull pingcap/tikv:v8.1.2
docker pull pingcap/tidb:v8.1.2
docker pull pingcap/pd:v8.1.2

#本地保存镜像
docker save pingcap/tikv:v8.1.2 > /opt/tikv.tar
docker save pingcap/tidb:v8.1.2 > /opt/tidb.tar
docker save pingcap/pd:v8.1.2 > /opt/pd.tar

#上传三个包到41,42,43节点的/opt下,在每个节点执行加载镜像
docker load < /opt/tikv.tar
docker load < /opt/tidb.tar
docker load < /opt/pd

#docker-compose部署tidb,192.168.1.41节点:

mkdir -p /opt/tidb

vim /opt/tidb/docker-compose-41.yml

#写入配置
version: '2.1'

services:
  pd1:
    image: pingcap/pd:v8.1.2
    ports:
      - "2379:2379"
      - "2380:2380"
    volumes:
      - /data/tidb:/data
      - /data/tidblogs:/logs
    command:
      - --name=pd1
      - --client-urls=http://0.0.0.0:2379
      - --peer-urls=http://0.0.0.0:2380
      - --advertise-client-urls=http://192.168.1.41:2379
      - --advertise-peer-urls=http://192.168.1.41:2380
      - --initial-cluster=pd1=http://192.168.1.41:2380,pd2=http://192.168.1.42:2380,pd3=http://192.168.1.43:2380
      - --data-dir=/data/pd1
      - --log-file=/logs/pd1.log
    restart: on-failure

  tikv1:
    image: pingcap/tikv:v8.1.2
    ports:
      - "20160:20160"
    volumes:
      - /data/tidb:/data
      - /data/tidblogs:/logs
    command:
      - --addr=0.0.0.0:20160
      - --advertise-addr=192.168.1.41:20160
      - --data-dir=/data/tikv1
      - --pd=192.168.1.41:2379,192.168.1.42:2379,192.168.1.43:2379
      - --log-file=/logs/tikv1.log
    depends_on:
      - "pd1"
    restart: on-failure

  tidb1:
    image: pingcap/tidb:v8.1.2
    ports:
      - "4000:4000"
      - "10080:10080"
    volumes:
      - /data/tidblogs:/logs
    command:
      - --store=tikv
      - --path=192.168.1.41:2379,192.168.1.42:2379,192.168.1.43:2379
      - --log-file=/logs/tidb.log
      - --advertise-address=tidb
    depends_on:
      - "tikv1"
    restart: on-failure

#docker-compose部署tidb,192.168.1.42节点:

mkdir -p /opt/tidb

vim /opt/tidb/docker-compose-42.yml

#写入配置
version: '2.1'

services:
  pd2:
    image: pingcap/pd:v8.1.2
    ports:
      - "2379:2379"
      - "2380:2380"
    volumes:
      - /data/tidb:/data
      - /data/tidblogs:/logs
    command:
      - --name=pd2
      - --client-urls=http://0.0.0.0:2379
      - --peer-urls=http://0.0.0.0:2380
      - --advertise-client-urls=http://192.168.1.42:2379
      - --advertise-peer-urls=http://192.168.1.42:2380
      - --initial-cluster=pd1=http://192.168.1.41:2380,pd2=http://192.168.1.42:2380,pd3=http://192.168.1.43:2380
      - --data-dir=/data/pd2
      - --log-file=/logs/pd2.log
    restart: on-failure

  tikv2:
    image: pingcap/tikv:v8.1.2
    ports:
      - "20160:20160"
    volumes:
      - /data/tidb:/data
      - /data/tidblogs:/logs
    command:
      - --addr=0.0.0.0:20160
      - --advertise-addr=192.168.1.42:20160
      - --data-dir=/data/tikv2
      - --pd=192.168.1.41:2379,192.168.1.42:2379,192.168.1.43:2379
      - --log-file=/logs/tikv2.log
    depends_on:
      - "pd2"
    restart: on-failure

  tidb2:
    image: pingcap/tidb:v8.1.2
    ports:
      - "4000:4000"
      - "10080:10080"
    volumes:
      - /data/tidblogs:/logs
    command:
      - --store=tikv
      - --path=192.168.1.41:2379,192.168.1.42:2379,192.168.1.43:2379
      - --log-file=/logs/tidb.log
      - --advertise-address=tidb
    depends_on:
      - "tikv2"
    restart: on-failure

#docker-compose部署tidb,192.168.1.43节点:

mkdir -p /opt/tidb

vim /opt/tidb/docker-compose-43.yml

#写入配置
version: '2.1'

services:
  pd3:
    image: pingcap/pd:v8.1.2
    ports:
      - "2379:2379"
      - "2380:2380"
    volumes:
      - /data/tidb:/data
      - /data/tidblogs:/logs
    command:
      - --name=pd3
      - --client-urls=http://0.0.0.0:2379
      - --peer-urls=http://0.0.0.0:2380
      - --advertise-client-urls=http://192.168.1.43:2379
      - --advertise-peer-urls=http://192.168.1.43:2380
      - --initial-cluster=pd1=http://192.168.1.41:2380,pd2=http://192.168.1.42:2380,pd3=http://192.168.1.43:2380
      - --data-dir=/data/pd3
      - --log-file=/logs/pd3.log
    restart: on-failure

  tikv3:
    image: pingcap/tikv:v8.1.2
    ports:
      - "20160:20160"
    volumes:
      - /data/tidb:/data
      - /data/tidblogs:/logs
    command:
      - --addr=0.0.0.0:20160
      - --advertise-addr=192.168.1.43:20160
      - --data-dir=/data/tikv3
      - --pd=192.168.1.41:2379,192.168.1.42:2379,192.168.1.43:2379
      - --log-file=/logs/tikv3.log
    depends_on:
      - "pd3"
    restart: on-failure

  tidb3:
    image: pingcap/tidb:v8.1.2
    ports:
      - "4000:4000"
      - "10080:10080"
    volumes:
      - /data/tidblogs:/logs
    command:
      - --store=tikv
      - --path=192.168.1.41:2379,192.168.1.42:2379,192.168.1.43:2379
      - --log-file=/logs/tidb.log
      - --advertise-address=tidb
    depends_on:
      - "tikv3"
    restart: on-failure

#所有节点保存后,完成所有节点编排配置

#41节点启动
docker-compose -f /opt/tidb/docker-compose-41.yml up -d
#42节点启动
docker-compose -f /opt/tidb/docker-compose-42.yml up -d
#43节点启动
docker-compose -f /opt/tidb/docker-compose-43.yml up -d

#使用MySQL客户端登录任意部署了pd的节点都可以,只要用户有权限

mysql -u root -P 4000 -h 192.168.1.41
#改密码设远程权限
SET PASSWORD FOR 'root'@'%' = 'Diablo@2025';
FLUSH PRIVILEGES;

#使用docker-compose部署nginx设置tidb负载均衡

#在192.168.1.24节点上同样部署docker和docker-compose

#先互联网docker环境下载nginx镜像
docker pull nginx:stable-alpine3.21-perl
#保存nginx镜像保存
docker save nginx:stable-alpine3.21-perl > /opt/nginx.tar
#离线环境192.168.1.24节点上传nginx镜像包到/opt下
docker load < /opt/nginx.tar

#创建一个nginx配置文件和docker-compose文件的放置目录
mkdir /opt/tidb-proxy

#配置nginx做tidb的负载均衡

vim /opt/tidb-proxy/tidb-proxy.conf

upstream tidb-proxy {
        server 192.168.1.41:4000        weight=1;
        server 192.168.1.42:4000        weight=1;
        server 192.168.1.43:4000        weight=1;
}

server {
        listen 4000;
        server_name _;
    location / {
        proxy_pass http://tidb-proxy;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;

        # 支持 HTTP 1.1(TiDB 推荐)
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

#配置编排docker-compose文件

vim /opt/tidb-proxy/docker-compose-tidb-proxy.yml

version: '5'
services:
  tidb-proxy-service:
    image: nginx:stable-alpine3.21-perl
    container_name: tidb-proxy
    ports:
      - "4000:4000"
    volumes:
      - "/opt/tidb-proxy/tidb-proxy.conf:/etc/nginx/conf.d/tidb-proxy.conf"

#启动负载均衡
docker-compose -f /opt/tidb-proxy/tidb-proxy.conf up -d

#mysql客户端通过负载均衡器登陆测试
mysql -u root -P 4000 -h 192.168.1.24 -p'Diablo@2025’

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐