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’
更多推荐
所有评论(0)