腾讯云数据库TDSQL——架构与安装体验
Posted liangbinhome
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯云数据库TDSQL——架构与安装体验相关的知识,希望对你有一定的参考价值。
目录
前言:
我在接触国产数据库之前,一直从事Oracle的运维工作,在漫长岁月里面,直到2017年才听说了TDSQL数据库,后来发现国产数据库如雨后春笋般涌出,竞争相当激烈。
有幸公司准备采用国产化数据库,在2020年对一些国产化数据库进行调研。在众多数据库中TDSQL进入了我的眼帘,跟了TDSQL在我公司整个POC的过程,也有幸参加了2020年12月24日的腾讯云数据库2020年度盛典。
目前公司部分系统已经用上了TDSQL,下面分享一下使用体验。
-
TDSQL架构体验
说起TDSQL架构,大家可以从网上资料中找到很多资料,最经典的图如下:
总结起来就是:
- 赤兔管理平台:统一运维管理平台,是DBA使用最多的图形化界面。
- OSS:http协议操作接口,如果多个机器用一个赤兔管理,也是通过OSS来对接的。
- scheduler/manager:运维管理模块,负责高可用切换,资源调度等。
- Zookeeper:决策模块,保存集群元数据,提供配置维护、选举决策、路由同步等。
- SQL引擎(Proxy):计算节点,负责权限管理。SQL转发,读写分离等。
- 数据节点(Set):部署mysql数据库服务,并包含Agent状态监控模块。
关于负载均衡的探讨:
看一下上图的“负载均衡”,一般是F5硬负载,如果没有也可以使用LVS软负载。其实腾讯原厂的同事建议使用负载均衡,把请求按照一定规则发送到Proxy节点。但是在我们实践过程中,还是有很多实际情况与预想不符。
首先就是F5设备不符合国产化需求,如果使用国产化Array产品,又有TDSQL适配难度;然后LVS软负载不符合本公司对负载的要求,也未采纳;最后,根据业务特点我们应用不对外,很多都是长连接,这样一来对负载均衡的需求则不高。
所以,可以采用应用直连Proxy的方式,当然也会区分几类不同的业务系统,连接指定的Proxy,如果出现问题,则由应用自行切换选择可用Proxy。
关于使用虚拟机还是物理机:
如果是测试环境,虚拟机就行了,最少可以使用3台。到了生产环境,建议大家还是按照官方文档来看,我手头的是《TDSQL产品文档_v10.3.17.4.0》,有需要的小伙伴可以私信我。
按照文档,核心组件中Proxy和DB节点建议用物理机,这个对于分布式实例,对性能有要求的集群是必要的,其余节点我们选择的仍然是虚拟机。
后期新的业务投产的时候,为了共用集群,会增加Proxy和DB节点,但是由于只是用于基础库,数据量不大,且为非分布式实例。这时我们选择使用虚拟机来实现。基于企业实际情况,这也许是节约成本的最佳选择。
关于备份:
数据库备份是TDSQL建议的,如果不配置备份,会有相应的告警。基于实际情况,是否备份,怎样备份是需要探讨的。基于我们实际的业务,数据量约20T,但只有6台DB节点,如果使用一主两备6分片的情况,就会产生单个数据库约10T。这样备份的量很大,除了全备,至少要能够容纳两个全备和一周的增备。另外最主要的问题是备份出的数据需要恢复,也需要同等大小的计算资源和存储资源,生产实际难以满足,最终还是采用重要表的逻辑备份。
关于非核心组件:
大家知道TDSQL的开源组件很多,关于安装哪些非必要组件的问题。
- 安装HDFS吗?如果库小且计算和存储资源能够保证恢复的情况下可以安装使用,如果已有备份存储设备替代HDFS则可以不用,或数据库特别大,备份恢复不能满足实际要求。
- 安装LVS吗?LVS是软负载,是开源组件,如果厂商给予维护则可以考虑。如果有硬负载,则考虑硬负载,除非业务特殊不用负载均衡设备。
- 安装Kafka吗?不用多源同步可不使用,DBBridge可替代。
- 安装Consumer吗?不用多源同步可不使用,DBBridge可替代。
- 安装ES吗?除非监管要求审计,一般按需使用。当然实际上为了安全,能安装尽量安装。
-
TDSQL安装体验
相比于安装Oracle,搭建TDSQL还是非常方便的,得益于腾讯对安装脚本的封装。具体安装步骤还是请参考《TDSQL产品文档_v10.3.17.4.0》。当然文档写的还是较粗,对于一般性操作系统的配置并没有提到。
下面结合最小化安装环境的练习,做一个简单的安装体验。
集群名 | 最小化测试集群 | ||
操作系统 | CentOS7.6 | ||
cpu | 8 | ||
内存 | 16G | ||
磁盘 | 200G | ||
数量 | 3 | ||
主机名 | TDBDB01 | TDBDB02 | TDBDB03 |
IP1 | 1.1.1.220 | 1.1.1.221 | 1.1.1.222 |
IP2 | 2.2.2.13 | 2.2.2.14 | 2.2.2.15 |
ZK | Y | Y | Y |
Scheduler | Y | Y | |
OSS | Y | Y | |
CHITU | Y | Y | |
MONITOR | Y | Y | |
DB | Y | Y | Y |
PROXY | Y | Y | Y |
为了实现反复安装练习,需要先清理环境。本次采用的是删除目录,杀进程,去掉定时,重启。当然,前提是要先安装ansible和配置好各分区IP。
//删除各节点data/data1目录
ansible servers -i /txsoft/sh -m shell -a 'rm -rf /data && rm -rf /data1'
ansible servers -i /txsoft/sh -m shell -a 'rm -rf /tddata/data && rm -rf /tddata/data1'
ansible servers -i /txsoft/sh -m shell -a 'ls -l / |grep data '
ansible servers -i /txsoft/sh -m shell -a 'ps -ef|grep php'
ansible servers -i /txsoft/sh -m shell -a 'ps -ef|grep nginx'
ansible servers -i /txsoft/sh -m shell -a 'pkill nginx'
ansible servers -i /txsoft/sh -m shell -a 'pkill php'
ansible servers -i /txsoft/sh -m shell -a 'ps -ef|grep php'
ansible servers -i /txsoft/sh -m shell -a 'rm -rf /usr/local/php && rm -rf /usr/local/ngnix'
//清空/etc/crontab定时执行程序
ansible servers -i /txsoft/sh -m copy -a 'src=/bc/crontab dest=/etc/crontab'
//重启各节点
ansible servers -i /txsoft/j6_1 -m shell -a 'reboot'
ansible servers -i /txsoft/sh -m shell -a 'uptime'
创建相应的目录。一般data目录是安装软件的,必须要有。因为只有一块盘,可以创建软连接。其中data1用于装数据。
//各节点创建data/data1目录,建立软连接
ansible servers -i /txsoft/sh -m shell -a 'mkdir -p /tddata/data && mkdir -p /tddata/data1 '
ansible servers -i /txsoft/sh -m shell -a 'ln -s /tddata/data /data && ln -s /tddata/data1 /data1 '
ansible servers -i /txsoft/sh -m shell -a 'ls -l / |grep data '
最小化测试环境如果没有NTP,需要统一一下时间。
//统一时间
ansible servers -i /txsoft/sh -m shell -a 'date'
cmd=$(date "+%Y-%m-%d %H:%M:%S")&&cmd=$(echo "ansible servers -i /txsoft/sh -m shell -a \\"date -s \\\\\\""$cmd"\\\\\\"\\"")&& eval $cmd
接下来直接安装步骤1。
//执行tdsql安装程序
ansible-playbook -i tdsql_hosts playbooks/tdsql_part1_site.yml
后面的安装可以再次引用《TDSQL产品文档_v10.3.17.4.0》。也就是配置赤兔环境,还有运行安装步骤2。由于篇幅优先不再赘述。
-
TDSQL心得与收获
TDSQL的引入大大方便了运维,由于腾讯的封装,使DBA不再因为MySQL的架构问题而烦恼,TDSQL也修复了MySQL中很多的BUG,解放了运维人员,使人员更专注于业务逻辑。是不是有点SaaS的味道。
当然本次说的是独立部署TDSQL的情况,如果公司允许可以使用在线的腾讯云数据库TDSQL。
关于考证,可以先拿下TCA,有精力的同学通过培训可以去考TCP。
本次分享就到这里。
TDSQL的安装教程(低配体验)
一、了解TDSQL
tdsql腾讯云文档
TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-C MySQL 版100%兼容 MySQL 5.7、8.0。实现超百万级 QPS 的高吞吐,最高 PB 级智能存储,保障数据安全可靠。
TDSQL-C MySQL 版采用存储和计算分离的架构,所有计算节点共享一份数据,提供秒级的配置升降级、秒级的故障恢复,单节点可支持百万级 QPS,自动维护数据和备份,最高以GB/秒的速度并行回档。
TDSQL-C MySQL 版既融合了商业数据库稳定可靠、高性能、可扩展的特征,又具有开源云数据库简单开放、高效迭代的优势。TDSQL-C MySQL 版引擎完全兼容原生 MySQL,您可以在不修改应用程序任何代码和配置的情况下,将 MySQL 数据库迁移至 TDSQL-C MySQL 版引擎。
腾讯云私有文档:这个文档有详细的教程,是官方的说明安装文档。可以自行去看一下,我看网上都没有提到。 里面的内容如下:
感兴趣可以自行了解。
可以看到tdsql-mysql是完全兼容mysql的数据库,所有的操作都是mysql一样,只不过是多了分布式的集群化,拥有的更多的功能更加高效。
术语表
机器准备
部署方式请参考官方的手册。
由于本地环境资源不足,这里构建出三个虚拟机,使用三台虚拟机来搭建一个最小的TDSQL集群(2台用于DB、1台用于调度和运营体系部署)。
备注:虚拟机环境均为:
2核+AMD Ryzen 5 PRO 4650U+CentOS7+2G内存,配置可以说是极低(所以可选的组件本文就不安装了)。
三台虚拟机的配置如下:
三台机器的规划如下:
虚拟机系统推荐centos7
配置环境
1.下载安装包
终端执行命令下载文件
wget https://tdsql1031730-1300276124.cos.ap-beijing.myqcloud.com/tdsql_10.3.17.3.0.zip
解压文件
unzip tdsql_10.3.17.3.0.zip
2.配置文件
2.1免密配置
#以下指令都在主机执行 这里直接回撤就行不需要设置
ssh-keygen -t rsa
#这里需要输入从机1的密码
ssh-copy-id 192.168.162.136
#这里需要输入从机2的密码
ssh-copy-id 192.168.162.137
免密登录主要是安装的时候脚本自动连接从机安装需要的组件
2.2 修改 tdsql_hosts文件
文件在tdsql_install文件夹下面
# 填入所有机器的地址(包括主控机)
# 用于环境检测和初始化配置
# 同一个标签组内的ip地址不要重复,一个ip一行
# 序号从1递增,比如只有2台机器,那么序号保留tdsql_mac1 tdsql_mac2
# 后续如果有扩容,新扩容的机器也需要在这里补上
[tdsql_allmacforcheck]
tdsql_mac1 ansible_ssh_host=192.168.162.135
tdsql_mac2 ansible_ssh_host=192.168.162.136
tdsql_mac3 ansible_ssh_host=192.168.162.137
# zookeeper机器ip地址
# 数量只能是1、3、5, 正式环境建议3台或者5台
# 如果是使用自己已有的zk集群,这里同样要填写正确的zk地址
[tdsql_zk]
tdsql_zk1 ansible_ssh_host=192.168.162.135
tdsql_zk2 ansible_ssh_host=192.168.162.136
tdsql_zk3 ansible_ssh_host=192.168.162.137
# scheduler机器的ip地址,正式环境建议2个
[tdsql_scheduler]
tdsql_scheduler1 ansible_ssh_host=192.168.162.136
tdsql_scheduler2 ansible_ssh_host=192.168.162.137
# oss机器的ip地址, 正式环境建议2个
[tdsql_oss]
tdsql_oss1 ansible_ssh_host=192.168.162.136
tdsql_oss2 ansible_ssh_host=192.168.162.137
# 赤兔机器的ip地址, 正式环境建议2个
[tdsql_chitu]
tdsql_chitu1 ansible_ssh_host=192.168.162.136
tdsql_chitu2 ansible_ssh_host=192.168.162.137
# 监控采集模块的IP地址,正式环境建议2个
[tdsql_monitor]
tdsql_monitor1 ansible_ssh_host=192.168.162.136
tdsql_monitor2 ansible_ssh_host=192.168.162.137
# db机器地址
# 有多少台就填多少个ip地址
# 注意tdsql_db序号逐个递增,不要跳跃
[tdsql_db]
tdsql_db1 ansible_ssh_host=192.168.162.136
tdsql_db2 ansible_ssh_host=192.168.162.137
# proxy机器地址
[tdsql_proxy]
tdsql_proxy1 ansible_ssh_host=192.168.162.136
tdsql_proxy2 ansible_ssh_host=192.168.162.137
# hdfs机器地址
# 机器数量只能是1台或者3台
# 如果单节点部署,则只保留tdsql_hdfs1,其他删除
# 正式环境建议高可用部署,初始安装数量只能3台
[tdsql_hdfs]
tdsql_hdfs1 ansible_ssh_host=192.168.162.135
# lvs机器地址,数量固定2台
[tdsql_lvs]
tdsql_lvs1 ansible_ssh_host=172.16.16.30
tdsql_lvs2 ansible_ssh_host=172.16.16.48
# kafka机器地址,数量固定3台
[tdsql_kafka]
tdsql_kafka1 ansible_ssh_host=172.16.16.47
tdsql_kafka2 ansible_ssh_host=172.16.16.30
tdsql_kafka3 ansible_ssh_host=172.16.16.48
# 多源同步消费者服务ip地址,数量固定1台
[tdsql_consumer]
tdsql_consumer1 ansible_ssh_host=172.16.16.30
# es机器地址
[tdsql_es]
tdsql_es1 ansible_ssh_host=192.168.162.135
[tdsql_mc]
tdsql_mc1 ansible_ssh_host=192.168.162.135
tdsql_mc2 ansible_ssh_host=192.168.162.136
tdsql_mc3 ansible_ssh_host=192.168.162.137
#这里如果不需要可以不配置
[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
按照上面规划的填写即可 这里的ip需要换成你自己的ip
2.2 修改group_vars配置(ansible变量)
文件在tdsql_install/group_vars/all文件
---
# scheduler,oss机器网卡
tdsql_sche_netif: ens33
# 操作系统账号tdsql的明文密码
# 如果有规划要部署两个集群做DCN同步, 则这两个集群的tdsql密码要一致
tdsql_os_pass: 12345
# tdsql在zk上的根路径, 保持默认不允许修改
tdsql_zk_rootdir: /tdsqlzk
# zk机器的域名配置, 会写入各配置文件, 并将域名配置到/etc/hosts中
# 正式环境必须用机房或者地区的关键字, 有意义的关键字来命名
# 如果部署多套TDSQL集群, 则名字需要唯一
# 例如: 深圳机房zk的域名可以定义为tdsql_sz_zk
tdsql_zk_domain_name: tdsql_test_zk
# zk端口配置, 保持默认不要改,如果是自建的zk, 则和已有zk端口保持一致
tdsql_zk_clientport: 2118
tdsql_zk_serverport1: 2338
tdsql_zk_serverport2: 2558
# 赤兔监控库配置, 赤兔初始化完成后需要将监控库信息在这里更新
tdsql_metadb_ip: 192.168.162.135
tdsql_metadb_port: 15001
tdsql_metadb_ip_bak: 192.168.162.135
tdsql_metadb_port_bak: 15001
tdsql_metadb_user: hanlon
tdsql_metadb_password: 123456
# 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: ens33
# es7配置
tdsql_es7_mem: 4
tdsql_es7_base_path: /data1/es
tdsql_helper_cluster_name: tdsql
# 一致性读MC机器的网卡, 需要安装MC时配置
tdsql_mc_netif: ens33
update_tdsqlinstall_packet: mysqlagent
注意 只需要修改网卡 和 赤兔监控库配置
网卡可以通过 命令查看
ifconfig
红色框里的就是自己的网卡
2.3安装ansible(主控机)
#指定环境配置
source scripts/environment_set
#执行安装脚本
sh scripts/install_ansible.sh
查看是否安装成功
ansible --version
2.4 关闭防火墙
注意一定要关闭防火墙 要不然无法连接到从机
#(关闭防火墙)
systemctl stop firewalld.service
#(关闭防火墙自动启动)
systemctl disable firewalld.service
#查看防火墙状态:
systemctl status firewalld.service
2.5 修改内存检测文件(如果内存满足要求 则不需要修改)
vim tdsql_install/roles/tdsql_env_check/files/checkenv/docheck.sh
#!/bin/bash
loglist=`ls /data/tools/checklog/`
initime=0
mintime=0
maxtime=0
initzone='hanlon'
for curlog in $loglist
do
curtime=`grep "cur_timestamp" /data/tools/checklog/$curlog |awk -F "[: ]+" 'print $2'`
if [ $initime -eq 0 ];then
initime=$curtime
mintime=$(($initime - 8))
maxtime=$(($initime + 8))
else
if [ $curtime -gt $maxtime ]; then
echo "/data/tools/checklog/$curlog time is not sync"
echo "/data/tools/checklog/$curlog time is not sync" > /data/tools/checkenv/err.log
exit 1
fi
if [ $curtime -lt $mintime ]; then
echo "/data/tools/checklog/$curlog time is not sync"
echo "/data/tools/checklog/$curlog time is not sync" > /data/tools/checkenv/err.log
exit 1
fi
fi
cur_cpu_capacity=`grep "cpu_capacity" /data/tools/checklog/$curlog |awk -F "[: ]+" 'print $2'`
if [ $cur_cpu_capacity -lt 2 ]; then
echo "/data/tools/checklog/$curlog cpu less than 2C"
echo "/data/tools/checklog/$curlog cpu less than 2C" > /data/tools/checkenv/err.log
exit 1
fi
cur_mem_capacity=`grep "mem_capacity" /data/tools/checklog/$curlog |awk -F "[: ]+" 'print $2'`
#注释掉这里 这里是检测机器的内存大小是否为5g
#if [ $cur_mem_capacity -lt 5000000 ]; then
# echo "/data/tools/checklog/$curlog available mem less than 5G"
# echo "/data/tools/checklog/$curlog available mem less than 5G" > /data/tools/checkenv/err.log
# exit 1
# fi
cur_python_version=`grep "python_version" /data/tools/checklog/$curlog |awk -F "[: ]+" 'print $2'`
if [[ "$cur_python_version" < '2.7.0' ]]; then
echo "/data/tools/checklog/$curlog python_version less than 2.7"
echo "/data/tools/checklog/$curlog python_version less than 2.7" > /data/tools/checkenv/err.log
exit 1
fi
curtimezone=`grep "cur_timezone" /data/tools/checklog/$curlog |awk -F "[: ]+" 'print $2'`
if [[ "$initzone" == 'hanlon' ]]; then
initzone=$curtimezone
fi
if [[ "$curtimezone" != "$initzone" ]]; then
echo "/data/tools/checklog/$curlog time_zone is not $initzone"
echo "/data/tools/checklog/$curlog time_zone is not $initzone" > /data/tools/checkenv/err.log
exit 1
fi
cur_sh=`grep "cur_sh" /data/tools/checklog/$curlog | awk -F "[: ]+" 'print $2' | awk -F'/' 'print $NF'`
if [[ "$cur_sh" != 'bash' ]]; then
echo "/data/tools/checklog/$curlog /bin/sh is not bash"
echo "/data/tools/checklog/$curlog /bin/sh is not bash" > /data/tools/checkenv/err.log
exit 1
fi
done
这里是检测机器的内存大小是否为5g 因为我不需要安装后面的一系列组件 只是测试一下是否能够安装 所有 这里取消了
3.开始安装
进入tdsql_install目录下
cd tdsql_10.3.17.3.0/tdsql_install/
安装命令
ansible-playbook -i tdsql_hosts playbooks/tdsql_part1_site.yml
他会自动安装 如果太久没有反应查看是否从机 卡住了
最后执行到没有错误那就是安装成功了
# 执行了近20多分钟 ,执行完成要无failed=0
PLAY RECAP ********************************************************************************************************************************************************
chitu1 : ok=20 changed=19 unreachable=0 failed=0
chitu2 : ok=20 changed=19 unreachable=0 failed=0
db1 : ok=13 changed=12 unreachable=0 failed=0
db2 : ok=13 changed=12 unreachable=0 failed=0
db3 : ok=13 changed=12 unreachable=0 failed=0
huyidb01 : ok=30 changed=19 unreachable=0 failed=0
huyidb02 : ok=27 changed=16 unreachable=0 failed=0
huyidb03 : ok=27 changed=16 unreachable=0 failed=0
huyidb04 : ok=27 changed=17 unreachable=0 failed=0
oss1 : ok=14 changed=11 unreachable=0 failed=0
oss2 : ok=14 changed=11 unreachable=0 failed=0
proxy1 : ok=13 changed=10 unreachable=0 failed=0
proxy2 : ok=13 changed=10 unreachable=0 failed=0
proxy3 : ok=13 changed=10 unreachable=0 failed=0
scheduler1 : ok=25 changed=23 unreachable=0 failed=0
scheduler2 : ok=22 changed=20 unreachable=0 failed=0
zk1 : ok=19 changed=17 unreachable=0 failed=0
zk2 : ok=19 changed=17 unreachable=0 failed=0
zk3 : ok=19 changed=17 unreachable=0 failed=0
可能出现的问题 ssh连接错误 那就是没有关闭防火墙 或者 没有配置免密登录
获取manager_varabie 错误 是网卡配置错误
4.初始化赤兔平台
网页访问安装chitu模块的机器地址,初始化chitu。
http://192.168.162.136/tdsqlpcloud
注意这里的ip为你hosts文件配置的ip地址
下一步 这里需要输入 配置文件配置的oss地址
就是从机1:8080 和从机2:8080 如有多个填写多个即可
集群初始化
逐一配置IDC、机型规格、设备资源、网关组等信息,然后创建分布式实例。
然后初始化实例
然后完成安装 进入平台
登录运营管理平台: 帐号密码 admin/123456
后续的就自己去尝试了
以上是关于腾讯云数据库TDSQL——架构与安装体验的主要内容,如果未能解决你的问题,请参考以下文章
腾讯云数据库 TDSQL——记录腾讯云 TDSQL 数据库的一次调研