文章目录
上篇文章,我详细介绍了TIDB这款开源分布式关系型数据库,重点阐述了TIDB的多个优秀的特性,例如高度兼容MySQL、分布式事务支持、云原生SQL数据库、水平可扩展性、高可用性等。大家一定想揭开TIDB的神秘的面纱了,这篇文章我就带大家模拟部署生产环境集群。
在官网看了TIDB软件和硬件环境建议之后,着实令人吃惊——TIDB对性能要求如此之高。首先是开发及测试环境建议,TiDB 支持部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器平台或者 ARM 架构的硬件服务器平台。对于开发、测试及生产环境的服务器硬件配置(不包含操作系统 OS 本身的占用)有以下要求和建议:

生产环境更恐怖:

看完环境配置的要求之后让人感慨,想要得到好的东西,是一定要付出代价的!
我手上只有一台2核4G6M带宽的个人服务器,以及实验室的一台8核16G的服务器(此服务器上已经部署和很多项目和应用)。在进行单机模拟部署生产环境集群的时候,毫无例外,这两台服务器都未能完成任务,且都一度出现卡死的局面,服务器卡死好几个小时,半天之后才好转。
因此笔者决定使用本地虚拟机模拟部署(给Centos7.6虚拟机开了24G内存)。
由于官网推荐使用TiUP来进行集群部署管理,因此本文不再使用V4.0之前的docker部署方式,而是使用官方推荐的TiUP方式。
TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 TiDB 实例、3 个 TiKV 实例、3 个 PD 实例和可选的 TiFlash 实例构成。通过 TiUP Playground,可以快速搭建出上述的一套基础测试集群。
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
执行完成之后会出现下述信息:
Successfully set mirror to https://tiup-mirrors.pingcap.com
Detected shell: bash
Shell profile: /home/user/.bashrc
/home/user/.bashrc has been modified to add tiup to PATH
open a new terminal or source /home/user/.bashrc to use it
Installed path: /home/user/.tiup/bin/tiup
===============================================
Have a try: tiup playground
===============================================
source /root/.bash_profile
tiup playground,直接执行该命令会运行最新版的TIDB集群,其中TIDB、TiKV、PD和TiFlash实例各有一个。tiup playground v5.4.1 --db 2 --pd 3 --kv 3
执行命令之后,在最后出现如下内容,说明部署成功:
CLUSTER START SUCCESSFULLY, Enjoy it ^-^
To connect TiDB: mysql --host 127.0.0.1 --port 4000 -u root -p (no password) --comments
To view the dashboard: http://127.0.0.1:2379/dashboard
PD client endpoints: [127.0.0.1:2379]
To view the Prometheus: http://127.0.0.1:9090
To view the Grafana: http://127.0.0.1:3000
然后,
a. 可以通过MySQL客户端连接TIDB:
mysql --host 127.0.0.1 --port 4000 -u root
b. 通过 http://127.0.0.1:9090 访问 TiDB 的 Prometheus 管理界面。
c. 通过 http://127.0.0.1:2379/dashboard 访问 TiDB Dashboard 页面,默认用户名为 root,密码为空。
d. 通过 http://127.0.0.1:3000 访问 TiDB 的 Grafana 界面,默认用户名和密码都为 admin。
测试完成之后
(1)可以先停止集群,control+C即可
(2)清除TIDB集群,使用命令tiup clean --all
本人经过测试,发现这种方式启动的TIDB集群仅仅能进行测试,不能使用Navicat工具进行连接,也就是完全不具备实际开发生产能力。
下面将介绍模拟部署生产环境集群,这种方式能够通过Navicat进行连接访问,具备实际开发能力。
硬性要求:
最小规模的TIDB集群拓扑:

之前部署测试集群的时候已经详细说明过,这里不再赘述
tiup cluster
如果已经安装了TiUP cluster,需要更新软件版本
tiup update --self && tiup update cluster
vim /etc/ssh/sshd_config
将里面的MaxSessions设置为20,然后保存之后重启sshd服务
service sshd restart
(1)首先需要一个配置文件,对集群的组成进行配置,命名为topo.yaml,其中:
topo.yaml配置文件如下(192.168.117.6是我虚拟机的IP地址,大家改成自己的即可,其余地方不需要改动):
# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
# # Monitored variables are applied to all the machines.
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
server_configs:
tidb:
log.slow-threshold: 300
tikv:
readpool.storage.use-unified-pool: false
readpool.coprocessor.use-unified-pool: true
pd:
replication.enable-placement-rules: true
replication.location-labels: ["host"]
tiflash:
logger.level: "info"
pd_servers:
- host: 192.168.117.6
tidb_servers:
- host: 192.168.117.6
tikv_servers:
- host: 192.168.117.6
port: 20160
status_port: 20180
config:
server.labels: { host: "logic-host-1" }
- host: 192.168.117.6
port: 20161
status_port: 20181
config:
server.labels: { host: "logic-host-2" }
- host: 192.168.117.6
port: 20162
status_port: 20182
config:
server.labels: { host: "logic-host-3" }
tiflash_servers:
- host: 192.168.117.6
monitoring_servers:
- host: 192.168.117.6
grafana_servers:
- host: 192.168.117.6
(2)执行集群部署命令:
tiup cluster deploy tidb-test v5.4.1 ./topo.yaml --user root -p
tidb-test是集群的名称,v5.4.1是集群的版本,这里我选择的是v5.4.1, -p是在连接机器时需要使用的密码,我这里是进行测试,所以设置为空,不用密码就能登录。
(3)出现以下提示
Do you want to continue? [y/N]: y
Input SSH password:
填写y,然后输入SSH登录密码即可。
这里只要服务器或者虚拟机性能足够,就能顺利执行完成。
(4)启动集群
tiup cluster start tidb-test
笔者在这里遇到一个坑,折磨了我半天:
启动程序前面已经全部执行之后,在最后出现:
+ [ Serial ] - UpdateTopology: cluster=liking
Started cluster `liking` successfully
Failed to set root password of TiDB database to 'G^174F*P!3t2sz&Wd5'
Error: dial tcp 192.168.117.6:4000: connect: connection refused
Verbose debug logs has been written to /root/.tiup/logs/tiup-cluster-debug-2022-05-18-15-01-41.log.
在网上搜索很多解决方法都未能解决这个问题,浪费了几个小时的时间,最终在TiDB社区“TiDB Community”找到了解决方法。出现这种情况的原因是权限不够,即TiDB集群是使用tidb用户部署的,/tmp/tidb-4000.sock以及/tmp/tidb-4001.sock这两个文件是root权限的,即tidb用户对这两个文件没有权限,导致服务起不来。把这两个文件删除,并赋予tidb用户权限chmod -R 777 /tmp,再次启动TiDB集群,就成功了。
执行命令:
tiup cluster display tidb-test
查看tidb-test集群的信息:
[root@docker01 ~]# tiup cluster display tidb-test
tiup is checking updates for component cluster ...
A new version of cluster is available:
The latest version: v1.9.6
Local installed version: v1.9.5
Update current component: tiup update cluster
Update all components: tiup update --all
Starting component `cluster`: /root/.tiup/components/cluster/v1.9.5/tiup-cluster /root/.tiup/components/cluster/v1.9.5/tiup-cluster display tidb-test
Cluster type: tidb
Cluster name: tidb-test
Cluster version: v5.4.1
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.168.117.6:2379/dashboard
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.168.117.6:3000 grafana 192.168.117.6 3000 linux/x86_64 Up - /tidb-deploy/grafana-3000
192.168.117.6:2379 pd 192.168.117.6 2379/2380 linux/x86_64 Up|L|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.117.6:9090 prometheus 192.168.117.6 9090/12020 linux/x86_64 Up /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090
192.168.117.6:4000 tidb 192.168.117.6 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000
192.168.117.6:9000 tiflash 192.168.117.6 9000/8123/3930/20170/20292/8234 linux/x86_64 Up /tidb-data/tiflash-9000 /tidb-deploy/tiflash-9000
192.168.117.6:20160 tikv 192.168.117.6 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.168.117.6:20161 tikv 192.168.117.6 20161/20181 linux/x86_64 Up /tidb-data/tikv-20161 /tidb-deploy/tikv-20161
192.168.117.6:20162 tikv 192.168.117.6 20162/20182 linux/x86_64 Up /tidb-data/tikv-20162 /tidb-deploy/tikv-20162
Total nodes: 8
(5)在宿主机使用Navicat进行连接:

和使用tiup playground 命令模拟部署测试环境集群不一样,这种方法可以远程连接,即具备开发能力。
(6)在宿主机浏览器输入:192.168.117.6:2379/dashboard,查看集群监控页面,默认用户名为root,密码为空:

(7)在宿主机浏览器输入:192.168.117.6:3000,访问集群 Grafana 监控页面,默认用户名和密码均为 admin:

本文介绍了TiDB部署本地测试集群和再单机上模拟生产环境集群两种TiDB模拟部署方式,这两种方式对服务器性能都有一定要求,特别是第二种方式,实验室8核16G的服务器直接卡死。笔者在虚拟机上很好地完成了这两种部署,并在部署中遇到并解决一个权限问题的坑。希望本文能对大家有所帮助。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m