分布式数据库TDSQL搭建

news/2025/3/17 5:56:06/文章来源:https://www.cnblogs.com/xiaobaijin/p/18503795

TDSQL介绍

TDSQL是腾讯基于MySQL/Mariadb社区版本打造的一款金融级分布式数据库集群方案,目前腾讯主推TDSQL MySQL版。

TDSQL MySQL版具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。

TDSQL MySQL 版是一款兼容MySQL协议的国产分布式数据库,很好的满足了金融业务场景中对数据库的高可用、高可靠、可运维和信创的要求,同时基于MySQL和X86的软硬件平台,也能极大的降低数据库层面的IT成本,从而极大降低户均成本,非常适用互联网时代的新一代银行架构。

架构介绍

我们可以从请求处理和集群管理两个维度来理解TDSQL的架构。

  1. 请求处理

TDSQL请求通过应用层发出,经过负载均衡模块,转发到Proxy集群;Proxy收到请求后,进行请求解析,然后转发到set单元内的数据库实例节点上(写请求到master,读请求可以到master或slave);数据库实例处理好请求后,回包给Proxy集群,Proxy再通过负载均衡模块回包给应用层。

如下图1所示:

1704866992317

图1 TDSQL架构模型与SET模型

  1. 集群管理

TDSQL的一个管理单元称为一个set,每个set单元的每个数据库实例上,都会部署一个TDSQL Agent模块。Agent模块会收集所在数据库实例的所有监控信息(包括节点主备角色信息/节点存活状态/请求量/TPS/CPU负载/IO负载/慢查询/连接数/容量使用率等等),上报到ZooKeeper集群;ZooKeeper相当于整个TDSQL集群元数据存储管理中心,保存了集群所有元数据信息;TDSQL Scheduler模块会监控ZooKeeper的所存储的上报信息,并根据集群状态启动不同的调度任务,相当于TDSQL集群的大脑,负责整个集群的管理和调度。

DBA管理人员可通过赤兔管理平台实现数据库的管理工作,功能如下图2所示:

1668412223074

图2 赤兔管理平台

主备同步与主备切换

  1. 主备同步

1)同步原理

主备同步需要依赖GTID(Global transaction identifiers,事物ID),同步的过程

备机和主机建立同步时,备机将自己的gtidlist发送给主机,主机根据gtidlist扫描自己的Binlog文件,发现备机需要同步的位置;如果找不到同步的位置点,会通知拉取镜像,拉取加载完成后,再根据binlog同步点和主机建立同步连接。

2)强同步机制

TDSQL基于MySql的binlog的半同步复制机制,进行了优化,增加了强同步复制机制。

对于进入集群的每笔更新操作,都将发到对应Set的主机上,主机会将Binlog发往备机,且收到其中任意一个备机ACK后,然后才本地提交,并返回给客户端应答,这就能确保数据令丢失。

  1. 主备切换

基于TDSQL Agent和Scheduler等模块,实现了自动化的主备强一致切换,在30秒内可以完成整个主备切换流程,实现故障的秒级恢复。

在TDSQL数据库中,强一致性是必须保证的,意思就是节点可以拒绝提供服务,但不能提供错误的服务,主备切换的前提是需要保证数据的一致性。

自动扩容机制

TDSQL引入集群机制,实现了自动的容量伸缩,确保在业务访问量飙升的时候,整个集群可以自动扩容提供对外访问,这种扩容应该是动摇的,对业务应该完全透明,无需业务停机。

TDSQL有两个分支版本,一个是NO-Sharding(非分布式)版本,一个是Group-Sharding(分布式)版本,NS版本不支持自动扩容(一个Set),GS版本支持自动扩容(多个Set),但是该版本不支持跨节点事物和join。目前开源化部署仅支持非分布式部署。

分布式事务本质上还是为了解决在分布式系统中数据一致性的问题。对于分布式数据库,存在存储副本以及数据库本身的分库分表等问题使得一个事物中存在着对不同节点的操作,这就是典型的分布式事务。TDSQL基于MySQL的XA实现了分布式事务机制,在性能损失较低的情况下保证了系统中数据的一致性。

常见的部署方案

  1. 同城单中心架构

这种架构一般用作测试、异地灾备的机房或者业务不能容忍跨数据中心访问带来的网络延迟。每个数据库示例采用三个节点的模式,主备机需要垮不同的机架,主机宕机后,TDSQL会在30S内完成自动的切换,业务基本无感知。

  1. 同城三中心架构

每个数据库实例采用三个节点的模式部署,分布在3个IDC。业务系统支持多活模式部署,每个IDC内的业务系统访问本IDC内LVS/TGW对应的虚拟IP,由其后端的Proxy模块将请求路由到正确的主备数据库节点。对于读写分离的请求优先访问本IDC的备机,任何一个数据库节点宕机时,TDSQL会在30S内完成自动切换,业务基本无感知。

  1. 两地三中心架构

这种架构是同城两个中心+异地中心,可以提供非常好的可用性和一致性,是TDSQL主要推荐的部署模式。每个数据库实例采用4-6个节点的模式,分布在3个IDC,业务系统支持多活模式的部署。

价格介绍

腾讯云价格:

够买时长

模式

数据库

配置

价格

1月

一主一备

Mysql 8.0

4 核 8GB 内存/500G

1176/元

1年

一主一备

Mysql 8.0

4 核 8GB 内存/500G

11712/元

1月

一主一备

TDSQL Mysql 8.0

高 IO 版 - 4 核 8GB 内存/500GB/2分片

2116/元

1年

一主一备

TDSQL Mysql 8.0

高 IO 版 - 4 核 8GB 内存/500GB/2分片

21083/元

部署过程

TDSQL 集群架构设计

组件

10.10.77.50

10.10.77.56

10.10.77.57

10.10.77.59

10.10.77.60

10.10.77.67

ZK

zk1

zk2

zk3

kafka

kafka1

kafka2

kafka3

scheduler

scheduler1

scheduler2

oss

oss1

oss2

chitu

chitu1

chitu2

monitor

monitor1

monitor2

db

db2

db1

db1

db2

proxy

proxy1

proxy2

proxy3

lvs

lvs2

lvs1

lvs1

lvs2

hdfs

hdfs

hdfs

ansible

ansible

es

es

consumer

consumer

基础部署

配置主机名

#设置主机名

10.10.77.50 hostname tdsql50

10.10.77.56 hostname tdsql56

10.10.77.57 hostname tdsql57

10.10.77.59 hostname tdsql59

10.10.77.60 hostname tdsql60

10.10.77.67 hostname tdsql67

添加主机名IP映射

vim /etc/hosts

10.10.77.50 tdsql50

10.10.77.56 tdsql56

10.10.77.57 tdsql57

10.10.77.59 tdsql59

10.10.77.60 tdsql60

10.10.77.67 tdsql67

开启时间同步

安装ntp软件包
# 所有主机都要安装,如果没有yum源需要配置yum源

yum -y install ntp

crontab -e

0 3 * * * /usr/sbin/ntpdate -u ntp.aliyun.com

规划存储目录

# 所有主机执行

mkdir -p /data

mkdir -p /data1

TDSQL下载

在主控机tdsql50上下载腾讯云独立输出TDSQL(软件介质)

cd /root/

wget https://tdsql1031730-1300276124.cos.ap-beijing.myqcloud.com/tdsql_10.3.17.3.0.zip

unzip tdsql_10.3.17.3.0.zip

TDSQL配置

配置免密登录

在主控机节点tdsql50上配置到所有主机root免密登录

cd /root/tdsql_10.3.17.3.0/tdsql_install/scripts

vim ip_passwd_lis

sh nokey.sh

执行完成后,免密登录配置完成。

修改tdsql_hosts文件

避免中文乱码,首先执行

export LANG='en_US.UTF-8'

修改tdsql_hosts文件:
cd /root/tdsql_10.3.17.3.0/tdsql_install

vim tdsql_hosts

# 填入所有机器的地址(包括主控机)

# 用于环境检测和初始化配置

# 同一个标签组内的ip地址不要重复,一个ip一行

# 序号从1递增,比如只有2台机器,那么序号保留tdsql_mac1 tdsql_mac2

# 后续如果有扩容,新扩容的机器也需要在这里补上

[tdsql_allmacforcheck]

tdsql_mac1 ansible_ssh_host=10.10.77.50

tdsql_mac2 ansible_ssh_host=10.10.77.56

tdsql_mac3 ansible_ssh_host=10.10.77.57

tdsql_mac4 ansible_ssh_host=10.10.77.59

tdsql_mac5 ansible_ssh_host=10.10.77.60

tdsql_mac6 ansible_ssh_host=10.10.77.67

# zookeeper机器ip地址

# 数量只能是1、3、5, 正式环境建议3台或者5台

# 如果是使用自己已有的zk集群,这里同样要填写正确的zk地址

[tdsql_zk]

tdsql_zk1 ansible_ssh_host=10.10.77.56

tdsql_zk2 ansible_ssh_host=10.10.77.57

tdsql_zk3 ansible_ssh_host=10.10.77.59

# scheduler机器的ip地址,正式环境建议2个

[tdsql_scheduler]

tdsql_scheduler1 ansible_ssh_host=10.10.77.56

tdsql_scheduler2 ansible_ssh_host=10.10.77.57

# oss机器的ip地址, 正式环境建议2个

[tdsql_oss]

tdsql_oss1 ansible_ssh_host=10.10.77.56

tdsql_oss2 ansible_ssh_host=10.10.77.57

# 赤兔机器的ip地址, 正式环境建议2个

[tdsql_chitu]

tdsql_chitu1 ansible_ssh_host=10.10.77.56

tdsql_chitu2 ansible_ssh_host=10.10.77.57

# 监控采集模块的IP地址,正式环境建议2个

[tdsql_monitor]

tdsql_monitor1 ansible_ssh_host=10.10.77.56

tdsql_monitor2 ansible_ssh_host=10.10.77.57

# db机器地址

# 有多少台就填多少个ip地址

# 注意tdsql_db序号逐个递增,不要跳跃

[tdsql_db]

tdsql_db1 ansible_ssh_host=10.10.77.59

tdsql_db2 ansible_ssh_host=10.10.77.60

tdsql_db3 ansible_ssh_host=10.10.77.67

# proxy机器地址

[tdsql_proxy]

tdsql_proxy1 ansible_ssh_host=10.10.77.56

tdsql_proxy2 ansible_ssh_host=10.10.77.57

tdsql_proxy2 ansible_ssh_host=10.10.77.59

# hdfs机器地址

# 机器数量只能是1台或者3台

# 如果单节点部署,则只保留tdsql_hdfs1,其他删除

# 正式环境建议高可用部署,初始安装数量只能3台

[tdsql_hdfs]

tdsql_hdfs1 ansible_ssh_host=10.10.77.50

# lvs机器地址,数量固定2台

[tdsql_lvs]

tdsql_lvs1 ansible_ssh_host=10.10.77.56

tdsql_lvs2 ansible_ssh_host=10.10.77.57

# kafka机器地址,数量固定3台

[tdsql_kafka]

tdsql_kafka1 ansible_ssh_host=10.10.77.56

tdsql_kafka2 ansible_ssh_host=10.10.77.57

tdsql_kafka3 ansible_ssh_host=10.10.77.59

# 多源同步消费者服务ip地址,数量固定1台

[tdsql_consumer]

tdsql_consumer1 ansible_ssh_host=10.10.77.50

# es机器地址

[tdsql_es]

tdsql_es1 ansible_ssh_host=10.10.77.50

[tdsql_mc]

tdsql_mc1 ansible_ssh_host=1.1.1.1

tdsql_mc2 ansible_ssh_host=1.1.1.1

tdsql_mc3 ansible_ssh_host=1.1.1.1

[tdsql_newdb]

tdsql_newdb1 ansible_ssh_host=1.1.1.1

tdsql_newdb2 ansible_ssh_host=2.2.2.2

tdsql_newdb3 ansible_ssh_host=3.3.3.3

[tdsql_ansible_test]

tdsql_ansible_test1 ansible_ssh_host=1.1.1.1

tdsql_ansible_test2 ansible_ssh_host=2.2.2.2

tdsql_ansible_test3 ansible_ssh_host=3.3.3.3

修改ansible变量

cd /root/tdsql_10.3.17.3.0/tdsql_install/group_vars

vim all

# scheduler,oss机器网卡

tdsql_sche_netif: ens192

# 操作系统账号tdsql的明文密码

# 如果有规划要部署两个集群做DCN同步, 则这两个集群的tdsql密码要一致

tdsql_os_pass: a+complex+password

# tdsql在zk上的根路径, 保持默认不允许修改

tdsql_zk_rootdir: /tdsqlzk

# zk机器的域名配置, 会写入各配置文件, 并将域名配置到/etc/hosts中

# 正式环境必须用机房或者地区的关键字, 有意义的关键字来命名

# 如果部署多套TDSQL集群, 则名字需要唯一

# 例如: 深圳机房zk的域名可以定义为tdsql_sz_zk

tdsql_zk_domain_name: tdsql_bj_zk

# zk端口配置, 保持默认不要改,如果是自建的zk, 则和已有zk端口保持一致

tdsql_zk_clientport: 2118

tdsql_zk_serverport1: 2338

tdsql_zk_serverport2: 2558

# 赤兔监控库配置, 赤兔初始化完成后需要将监控库信息在这里更新

tdsql_metadb_ip: 10.10.77.56

tdsql_metadb_port: 15001

tdsql_metadb_ip_bak: 10.10.77.57

tdsql_metadb_port_bak: 15001

tdsql_metadb_user: hanlon

tdsql_metadb_password: hanlon

# hdfs机器的ssh端口

tdsql_hdfs_ssh: 22

# hdfs数据目录, 正式环境要求mount挂载比较大的数据盘

tdsql_hdfs_datadir: /data2/hdfs,/data3/hdfs,/data4/hdfs

# kafka日志目录,正式环境要求mount挂载比较大的数据盘

tdsql_kafka_logdir: /data2/kafka,/data3/kafka,/data4/kafka

# 多源同步消费服务的机器网卡

tdsql_consumer_netif: ens192

# es7配置

tdsql_es7_mem: 4

tdsql_es7_base_path: /data1/es

tdsql_helper_cluster_name: tdsql

# 一致性读MC机器的网卡, 需要安装MC时配置

tdsql_mc_netif: ens192

update_tdsqlinstall_packet: mysqlagent

安装ansible

在主控机安装ansible

cd /root/tdsql_10.3.17.3.0/tdsql_install/scripts

source environment_set

sh install_ansible.sh

验证ansible安装是否成功

TDSQL安装

cd /root/tdsql_10.3.17.3.0/tdsql_install

ansible-playbook -i tdsql_hosts playbooks/tdsql_part1_site.yml

安装大约需要9分钟,日志在/var/log/ansible.log,最终显示failed任务数为0表示安装成功。

赤兔初始化

网页访问安装chitu模块的机器地址,进行chitu初始化

http://10.10.77.56/tdsqlpcloud

勾选同意,下一步

环境检测

安装完成后,环境检测都是“通过”的,然后下一步

集群配置

第一步:集群命名,这个名称是全局唯一的,这里我命名为TdSqlCluster

第二步:配置OSS服务列表,前面配置了几个OSS节点,这里就填几个,格式如提示那样“IP:PORT”形式

第三步:测试OSS服务连接,点击旁边的“测试服务连接”按钮,zookeeper列表会自动显示,zookeeper节点目录也会自动显示

第四步:检查集群信息,点击“测试服务连接”后,集群信息也是自动显示,这里检查一下

第五步:点击下一步

集群初始化

接下来对每一项内容初始化

新增IDC配置

命名规则可以这样定义:城市+机房+房间号+机架号

IDC是策略上的配置,要对应到实际的机架信息上。比如有2个DB机器,为了保证DB实例跨机架,新增2个IDC

IDC权重:IDC权重皆使用默认值100

新增db机器的机型

机型:TS80,根据实际情况设定。(机型的名字要全部大写)

CPU、内存和磁盘:设置机型的时候要依据实际的机器配置

CPU:设置为实际机器一致

内存:设置为实际机器的75%

磁盘:设置为实际机器的90%

磁盘包括:数据盘和日志盘,比例为3:1

目录结构

数据目录:/data1/tdengine/data

日志目录:/data1/tdengine/log

安装包目录:/data/home/tdsql/tdsqlinstall

数据库安装目录:/data/tdsql_run

预留资源百分比:固定不变

新增网关机器的机型

网关机型已经自动创建好,不需要手动创建,请勿修改!!!

7.上报db设备资源

IP:填写实际的DB机器的通信ip地址

机型:选择刚才创建的机型,如DELL750

IDC:根据实际情况,选择其归属于哪一个IDC(不同DB机器要划分到不同IDC中

fenceid、frame、zone:默认

1698396360938

8.上报网关资源

IP:填写实际的PROXY机器的通信ip地址

IDC:同一网关组内的网关可以划分在不同的IDC中,或者相同的IDC中

9.新增网关组

因为之前上报了3台proxy机器,且这3台proxy机器划分在不同的IDC中,所以这里选择“从3个IDC中取3台机器”

10.建实例

创建一个监控库实例

基础设置如下

 容灾设置如下

这里选择“一主一备”为初始化db,新增IDC分布,依据之前设置的IDC分布,如果设置的是一个IDC,则关闭IDC校验

开始创建:

创建完成后初始化实例,选择“初始化”

11.配置数据库

密码和账号一致

TDSQL配套提供了赤兔管理平台系统,来支持整个TDSQL集群的可视化、自动化的监控和运维功能。如图3所示,为TDSQL赤兔管理平台的运行界面。

图3 TDSQL赤兔管理平台

通过TDSQL赤兔管理平台,可以实现监控数据的采集与显示,告警和策略配置,日常运维操作(主备切换,节点替换,配置更改等),数据库备份与恢复,慢查询分析,性能分析等一系列功能,极大的提升了运维效率和运维准确性。

admin 123456

普通用户密码:

Umpay01!@#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/822260.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF_BUU SQL COURSE 1

BUUCTF_BUU SQL COURSE 1 打开实例发现“热点”及“登录”两个选项 根据题目提示,sql注入,尝试在登录界面寻找注入点,无果 接着进入热点界面,发现三篇新闻,依次点击发现url变化,burp抓包发现是通过对id值的控制访问不同界面,由此发现注入点 1.判断注入类型,输入1,2-1 ?…

openGussDb企业版5.0.1搭建

openGussDb企业版5.0.1搭建官方文档地址:https://docs-opengauss.osinfra.cn/zh/docs/5.0.0/docs/ReleaseNotes/Releasenotes.html软件包&客户端下载地址:https://opengauss.org/zh/download/环境准备1、软件环境要求软件类型配置描述linux操作系统ARM:openEuler 20.03L…

USB协议详解第20讲(USB包-帧首包SOF)

1.包的四种类型 根据包的组成把包分为四种类型,分别是、帧首包SOF(Start of Frame)、命令包(Token)、数据包(Data)、握手包(Handshake),如下图(大家一定要把PID类型和包类型分开)。4种PID类型和4种包类型(按照组成分类)的区别如下,大家注意区分。2.SOF包组成 我…

BigDecimal使用

常见方法 我们在使用 BigDecimal 时,为了防止精度丢失,推荐使用它的BigDecimal(String val)构造方法或者 BigDecimal.valueOf(double val) 静态方法来创建对象。 《阿里巴巴 Java 开发手册》对这部分内容也有提到,如下图所示。加减乘除 add 方法用于将两个 BigDecimal 对象相…

低功耗4G模组:FTP应用示例

​ 一、FTP 概述 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。 FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。 其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于 FTP 服务器上的资源。在开发网站的时候,…

「FHQ_Treap」学习笔记

一、前言 & 基本理论 来自笔者的肯定:最容易理解且比较好写的平衡树(不过就是常数有点大了),可能是笔者花了较长的时间去理解旋转 Treap 和 Splay 的旋转吧()。FHQ 不仅比旋转法编码简单,而且能用于区间翻转、移动、持久化等场合。——《算法竞赛》FHQ_Treap 的所有…

鲜花-CSP2024 游记

前言 坐标 \(\text{SX}\),去年 \(\text{CSP}\) 和 \(\text{NOIP}\) 都爆炸了,于是这就是我最后一年了。 初赛 赛前随便做了三份题,可以随便过线就放下不管了。 赛时光速写完选择,然后被状压题硬控,没太看懂在求什么,有点慌乱,后面的完善程序二分题很快写上去了,但是 \(…

如何使用NTP同步时间?

​ 一、NTP通信概述 很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作。但是模块上电后的初试时间戳是946713600(即2000/01/01,16:00:00),所以同步时钟成为了开发者要解决的重要问题。对于Cat.1模块,移动/电信卡,通常会下发基站时间,那么sntp就不是必要…

工地升降机AI人数识别系统

工地升降机人数识别系统采用了AI神经网络和深度学习算法,工地升降机AI人数识别系统通过升降机内置的摄像头实时监测轿厢内的人员数量。通过图像处理和人脸识别算法,系统能够精确地识别升降机内的人数。一旦系统识别到人数达到或者超过设定的阈值,工地升降机AI人数识别系统会…

楼道堆积物视觉识别监控系统

楼道堆积物视觉识别监控系统采用了AI神经网络和深度学习算法,楼道堆积物视觉识别监控系统通过摄像头实时监测楼道的情况,通过图像处理、物体识别和目标跟踪算法,系统能够精确地识别楼道通道是否被堆积物阻塞。楼道堆积物视觉识别监控系统检测到堆积物的存在,立刻通过告警信…

变电站人员安全作业行为识别监测系统

变电站人员安全作业行为识别监测系统采用了AI神经网络和深度学习算法,变电站人员安全作业行为识别监测系统通过利用已装好的监控摄像头,进行人员行为分析。针对未穿戴安全帽、工作服、安全马甲、绝缘靴等不符合安全要求的行为,系统能够实时识别并发出预警,提醒工作人员及时…

redis数据库操作指令

一、数据库操作指令 2、redis中库说明 对于一个redis服务而言,包含默认有16个数据库给我们使用,从0开始编号,共15号数据库,默认使用的是0号数据库 切换库,select 库号 举例:使用1号库:select 1 库和库之间数据不共享 库和库之间的键可以重名 2、redis中清空库的指令清空…