前言:最近频繁出现的云服务环境的不稳定,对业务造成了一定的困扰,为了预防公有云和私有云带来的不稳定,我们选择了线下同城双机房+线上云服务的架构大家tidb集群,本次架构改造分为两步进行:
第一步:搭建同城双机房;
第二步:扩容公有云节点
通过两步走的方式实现混合云的部署,本文通过介绍在同城双机房公网环境下搭建TIDB集群,总结经验,查漏补缺,为第二步的扩容做知识储备。
由于专线费用较为昂贵,本文使用公网ip进行网络传输,此线路为公网,费用较低,为了安全,会设置3个公网ip之间的端口只允许ip之间互相访问。
一、集群架构
本集群使用位于无锡的两个机房,其中tidb01和tidb02位于江阴机房
tidb01,机房位于无锡市江阴市,使用的公网IP如下
tidb02机房位于无锡市江阴市,使用的公网IP如下
tidb03,机房位于无锡市惠山区,位于惠山区机房,使用的公网IP如下
集群架构如下,其中公网IP最后一位做了ABC替换处理
服务器 | 公网ip | ssh端口-外 | pd端口外 | pd端口外 | tikv端口外 | tikv端口外 | tidb端口外 | tidb端口外 | 告警 | 告警 | 监控 | grafana | |
部署PD、TIDB、TIKV | server1 | 58.214.27.A | 20122 | 12379 | 12380 | 10160 | 10180 | 14000 | 10080 | ||||
部署PD、TIDB、TIKV | server2 | 218.90.180.B | 20222 | 22379 | 22380 | 20160 | 20180 | 24000 | 20080 | ||||
部署PD、TIDB、TIKV、ALERT、MONITOR | server3 | 121.235.65.C | 20322 | 32379 | 32380 | 30160 | 30180 | 34000 | 30080 | 9093 | 9094 | 9090 | 3000 |
服务器 | 内网ip | ssh端口-内 | pd端口内 | pd端口内 | tikv端口内 | tikv端口内 | tidb端口内 | tidb端口内 | 告警 | 告警 | 监控 | grafana | |
部署PD、TIDB、TIKV | server1 | 192.168.30.201 | 22 | 12379 | 12380 | 10160 | 10180 | 14000 | 10080 | ||||
部署PD、TIDB、TIKV | server2 | 192.168.30.202 | 22 | 22379 | 22380 | 20160 | 20180 | 24000 | 20080 | ||||
部署PD、TIDB、TIKV、ALERT、MONITOR | server3 | 192.168.0.203 | 22 | 32379 | 32380 | 30160 | 30180 | 34000 | 30080 | 9093 | 9094 | 9090 | 3000 |
二、集群部署配置文件topology.yaml内容如下
global:
user: "tidb"
deploy_dir: "/data/tidb-deploy"
data_dir: "/data/tidb-data"
arch: "amd64"
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
deploy_dir: "/data/tidb-deploy/monitored-9100"
data_dir: "/data/tidb-data/monitored-9100"
log_dir: "/data/tidb-deploy/monitored-9100/log"
server_configs:
tidb:
log.slow-threshold: 300
binlog.enable: false
binlog.ignore-error: false
tikv:
readpool.storage.use-unified-pool: false
readpool.coprocessor.use-unified-pool: true
pd:
schedule.leader-schedule-limit: 4
schedule.region-schedule-limit: 2048
schedule.replica-schedule-limit: 64
pd_servers:
- host: 58.214.27.A
ssh_port: 20122
name: "pd-1"
client_port: 12379
peer_port: 12380
deploy_dir: "/data/tidb-deploy/pd-12379"
data_dir: "/data/tidb-data/pd-12379"
log_dir: "/data/tidb-deploy/pd-12379/log"
- host: 218.90.180.B
ssh_port: 20222
name: "pd-2"
client_port: 22379
peer_port: 22380
deploy_dir: "/data/tidb-deploy/pd-22379"
data_dir: "/data/tidb-data/pd-22379"
log_dir: "/data/tidb-deploy/pd-22379/log"
- host: 121.235.65.C
ssh_port: 20322
name: "pd-3"
client_port: 32379
peer_port: 32380
deploy_dir: "/data/tidb-deploy/pd-32379"
data_dir: "/data/tidb-data/pd-32379"
log_dir: "/data/tidb-deploy/pd-32379/log"
tidb_servers:
- host: 58.214.27.A
ssh_port: 20122
port: 14000
status_port: 10080
deploy_dir: "/data/tidb-deploy/tidb-14000"
log_dir: "/data/tidb-deploy/tidb-14000/log"
config:
log.slow-query-file: /data/tidb-slow-overwrited.log
- host: 218.90.180.B
ssh_port: 20222
port: 24000
status_port: 20080
deploy_dir: "/data/tidb-deploy/tidb-24000"
log_dir: "/data/tidb-deploy/tidb-24000/log"
config:
log.slow-query-file: /data/tidb-slow-overwrited.log
- host: 121.235.65.C
ssh_port: 20322
port: 34000
status_port: 30080
deploy_dir: "/data/tidb-deploy/tidb-34000"
log_dir: "/data/tidb-deploy/tidb-34000/log"
config:
log.slow-query-file: /data/tidb-slow-overwrited.log
tikv_servers:
- host: 58.214.27.A
ssh_port: 20122
port: 10160
status_port: 10180
deploy_dir: "/data/tidb-deploy/tikv-10160"
data_dir: "/data/tidb-data/tikv-10160"
log_dir: "/data/tidb-deploy/tikv-10160/log"
- host: 218.90.180.B
ssh_port: 20222
port: 20160
status_port: 20180
deploy_dir: "/data/tidb-deploy/tikv-20160"
data_dir: "/data/tidb-data/tikv-20160"
log_dir: "/data/tidb-deploy/tikv-20160/log"
- host: 121.235.65.C
ssh_port: 20322
port: 30160
status_port: 30180
deploy_dir: "/data/tidb-deploy/tikv-30160"
data_dir: "/data/tidb-data/tikv-30160"
log_dir: "/data/tidb-deploy/tikv-30160/log"
monitoring_servers:
- host: 121.235.65.C
ssh_port: 20322
port: 9090
deploy_dir: "/data/tidb-deploy/prometheus-8249"
data_dir: "/data/tidb-data/prometheus-8249"
log_dir: "/data/tidb-deploy/prometheus-8249/log"
grafana_servers:
- host: 121.235.65.C
ssh_port: 20322
port: 3000
deploy_dir: /data/tidb-deploy/grafana-3000
alertmanager_servers:
- host: 121.235.65.C
ssh_port: 20322
web_port: 9093
cluster_port: 19094
deploy_dir: "/data/tidb-deploy/alertmanager-9093"
data_dir: "/data/tidb-data/alertmanager-9093"
log_dir: "/data/tidb-deploy/alertmanager-9093/log"
三、集群部署步骤
1、tiup部署在tidb03上
安装tiup工具
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
source /root/.bash_profile
tiup cluster
tiup update --self && tiup update cluster
2、根据配置文件检查并更新配置
检查风险
tiup cluster check ./topology.yaml --user root -p
自动修复风险
tiup cluster check ./topology.yaml --apply --user root -p
检测通过后就可以安装tidb了
tiup cluster deploy qzn v5.4.2 ./topology.yaml --user root -p
3、安装完成
四、功能验证
1、安装完成后通过dashboard查看集群信息
2、使用navicat可以正常连接数据库集群
3、创建数据库
以上完成了同城双机房公网环境下搭建TIDB集群工作。
总结:本文主要记录了同城双机房的集群搭建,处于成本考虑,主要使用了公网ip的方式,毕竟公网只需要拉一条宽带就可以了,专线的费用是宽带的几十倍,基于成本,只能暂且如此,在安全上,我们做了各个ip之间通过防火墙策略限制只能对端ip访问,这样保证了集群的网络安全,目前已经完成了方案验证和测试环境搭建,下一步我们计划增加阿里云节点,通过本地双机房+阿里云服务器,做到混合云部署tidb集群的架构。