当前位置: 首页 > news >正文

tidb数据库3主机分布式集群docker-compose离线部署

#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’
http://www.jsqmd.com/news/1399173/

相关文章:

  • 让浏览器秒变 Markdown 专业阅读器:Markdown Viewer 完整安装与使用指南
  • PDF处理很麻烦?这款免费免安装的全能工具箱帮你一次搞定
  • OpenGlass 智能眼镜改装全攻略:25美元让普通镜架“长出“AI眼睛
  • 网盘直链下载怎么用?开源助手帮你免费获取8大网盘真实下载地址
  • 招聘时间展示插件Boss Show Time实测:30秒看穿岗位“新鲜度“,告别无效投递
  • Taste-Skill v2 新版本发布:一篇看懂 AI 界面告别“AI 味“的终极方案
  • 图表数据提取工具 WebPlotDigitizer 实战指南:三步从图片里挖出可用数据
  • AI写作论文工具横评:2026年哪款真正适合学术写作
  • notepad-- 代码折叠完整上手:5 分钟把千行代码压缩成一张“地图“
  • 磁盘总是悄悄变满?Krokiet 3分钟完成重复文件清理,找回被浪费的空间
  • ntlmv1-multi核心功能解析:轻松实现NTLMv1到DES密钥的转换
  • 100套HTML模板:前端开发效率提升与实战应用全指南
  • 技术文章如何自检:标题、代码和验证结论必须说同一件事
  • 被苹果抛弃的旧款Mac如何免费升级最新macOS?OpenCore Legacy Patcher零基础避坑指南
  • 端侧 NPU 推理触发内核崩溃:从 dmesg、ftrace 到驱动边界检查
  • 网络调试助手 NetAssistant:3 个深夜抓狂场景,一套 Qt 工具让你告别用猜的调试
  • 想在Godot里做银河恶魔城?这个插件把最难的地图与存档全包了
  • 如何用 OpenCore Legacy Patcher 让旧款 Mac 免费升级最新 macOS:完整实战指南
  • 极速上手XHS-Downloader:3分钟保姆级教程,免费下载小红书无水印图文与视频
  • MEAnalyzer参数终极指南:16条命令组合,轻松玩转Intel固件分析
  • IntelliJ IDEA依赖漏洞警告解析:Maven传递依赖安全风险与修复实战
  • 免费音乐解密工具实测:3 种用法把 QMC、NCM 加密文件转回通用格式
  • 3分钟上手免费M3U8视频下载工具:把网页视频变成本地MP4的完整指南
  • PDF补丁丁:免费开源的PDF工具箱,3个场景讲透它的真本事
  • MediaCrawler 快速上手指南:一套配置搞定五大平台社交媒体数据采集
  • 告别手动复制粘贴:MediaCrawler一站式社交媒体数据采集工具实测
  • B站视频下载工具BiliDownload保姆级上手指南:无水印、多线程、5分钟跑通你的第一个下载任务
  • 一台2008年的旧款Mac,如何免费追到最新的macOS Sequoia?
  • OpenCore Legacy Patcher 使用指南:一次搞定旧款Mac运行新版macOS的免费方案
  • 别再让笔记变成孤岛:这套 Obsidian 模板 30 分钟搭好会生长的 Zettelkasten 卡片盒