本文耗时较长,包括实战演练以及经验总结。
我很早就接触了 TiDB ,不过一直都是单机版,最近对于大数据存储以及性能、可扩展性方面有所要求,所以对 TiDB 有了更深的投入,首先就是搭建一个测试集群环境,实打实的试用一段时间才知道是什么感觉。
本文是我对搭建 TiDB 集群的入门和实践过程的纪要,希望对大家有所帮助。
本文分为以下几个方面来进行介绍:
- 准备工作
- 安装、配置调试
- 监控
- 总结
- 参考资料
本文耗时较长,包括实战演练以及经验总结。
我很早就接触了 TiDB ,不过一直都是单机版,最近对于大数据存储以及性能、可扩展性方面有所要求,所以对 TiDB 有了更深的投入,首先就是搭建一个测试集群环境,实打实的试用一段时间才知道是什么感觉。
本文是我对搭建 TiDB 集群的入门和实践过程的纪要,希望对大家有所帮助。
本文分为以下几个方面来进行介绍:
本文耗时较长,包括实战演练。
|
|
注意:
我们要先设置成两个端口,测试成功后再关闭一个端口 22,这是为了在修改的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试,以免发生连接不上的状况。
RHEL/CentOS 用户
新建 /etc/yum.repos.d/gitlab-ce.repo,内容为
[gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1
再执行
sudo yum makecache sudo yum install gitlab-ce-8.13.11-ce.0.el6.x86_64 sudo gitlab-ctl status; sudo gitlab-ctl reconfigure;
注意
本文耗时 1小时10分钟,预计阅读/实战时长 1 小时(要多练习)。
InfluxDB 用 Go 语言编写的一个开源分布式时序、事件和指标数据库,和传统是数据库相比有不少不同的地方。 类似的数据库有 Elasticsearch、Graphite 等。
一般用来储存实时数据,配合一套 UI 界面(Grafana)来展示统计信息。
下载链接
https://portal.influxdata.com/downloads#influxdb
选择 InfluxDB (Time-Series Data Storage) V1.3.2(最新版)
根据不同的操作系统,这里提供了不同的下载安装指引。
注意:InfluxDB 的安装是需要 root 账号或者有管理员账号权限的账户。
前几天我们新开发了一个服务,需要将之前的几个接口转发到新服务的新接口上,很自然的我们只需要做一次统一转发处理接口。
我们是基于 Nginx+Lua+Openresty 构建的统一接口网关,所以处理这个问题非常简便,只需要在nginx conf中针对相应接口做一次转发即可,这里使用到 location URL 规则匹配和 proxy_pass 。
但是当我设置 location 匹配规则之后(因为有多个接口,所以匹配规则是前缀匹配),因为在转发之前,我们还有一个逻辑是处理请求的,所以调用了 lua 插件,但是就因为 lua 插件里面对于 proxy_pass 的处理,导致不能转发完整 URL 以及 URL 后面的 query 参数。
举个例子:
location /old_service/v1/old_api/ { rewrite_by_lua_file “rule.lua”; proxy_pass http://new_server/new_service/v1/module/; }
接口: /old_service/v1/old_api/get_info->/new_service/v1/module/get_info; /old_service/v1/old_api/query_info->/new_service/v1/module/query_info;
有问题的时候: new_service 接收到的接口是:/new_service/v1/module 报404-找不到相应的接口。
问题就出在:rewrite_by_lua_file “rule.lua”;
本文耗时30分钟,阅读需要5分钟。
本文是《一小时入门Go语言》的答疑。希望能对一些初学者有帮助。
Q1:@ziksang go语言试用于什么方面,与node.js比价值有什么优势,有什么不如node.js? A1:Go 语言适用于所有服务器端,特别是在高并发分布式领域,他的并发特可以很容易满足你的需求
TJ 在几年前都已经转Go了。
TJ是谁? 程序员兼艺术家,Koa、Co、Express、jade、mocha、node-canvas、commander.js等知名开源项目的创建和贡献者。
对node npm社区代码贡献截止目前占到整个社区的3.04%
知乎上有这样的回答:(https://www.zhihu.com/question/24373004)
今日头条Go 语言微服务实践 http://mp.weixin.qq.com/s/CJL0Ttexvh7XT1zoNLOJrA
Q2:@Adele 哪些有名的产品或项目用了此语言? A2:Docker、TiDB、kingshard,nsq,etcd,InfluxDB,open-falcon
https://github.com/trending/go或者(掘金 Chrome 插件,关注Github上Go版块) http://awesome-go.com
Q3:@咸柠沙士 请教老师您是怎么做包依赖管理的? A3:godep,govendor,dep 目前我们团队使用govendor,基于go1.5提出来的vendor管理办法。 dep是google官方出的一个解决方案。
govendor拉github上的东西经常拉不动,有什么好的解决方法? 翻墙,或者自己clone下来到相关目录。
有人提到一些代码可以fork到coding,我的建议是直接到GitHub。
Q4:@果冻 PHP可以转型Go吗?多久或如何能精通? A4:有计算机基础一两天入门没问题,一周上手开发,精通不太好说。开发语言不一定要精通才可以养家,大家不要被精通这个字蒙蔽了双眼,要看清本质。 一个开发人员水平的高低不完全是语言本身是否精通。
Q5:@胡戎 对于依赖管理和go项目的git管理方法比如哪些文件需要放进git,clone下来后需要做什么,您能指导下吗?比如node项目clone下来直接npm install,go有gopath,管理项目应该怎么做呢?所有的的项目只要放在gopath内还是每个项目一个gopath呢?这个系统中,网关、配置中心以及请求跟踪用什么方案? A5:依赖可以放到vendor里面,也可以放在gopath下。一个项目可以一个gopath,也可以多个项目一个gopath,看你自己的实际情况和需要。
本文耗时x分钟,阅读需要x分钟。
学习一门新的开发语言最重要的就是做到三点:
服务器C10K和C1000K问题
“Go not only solves C10K problem it blows it away with C1000K.”
Go 是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为Golang。 摘自维基百科。
Go 的发展历程
现在也有集成度比较高的,比方说:gometalinter
本文耗时120分钟,建议实战。
Travis-CI 是国外的开源持续集成构建项目,支持 Github 项目,通过 yml 配置来驱动执行相对应的持续集成脚本。对于 Github 的项目支持起来非常简单,开通 Travis 后只需要你在自己的项目根目录下增加.travis.yml就好了。
Coveralls 是一个自动化测试覆盖率的服务,它能提供代码覆盖率并且给以友好的展现。
如果你的项目是私有仓库的话,比方说 Gitlab,并且你的Gitlab 版本是 8.0 以上的,在Gitlab 搭建好之后就是支持 gitlab-ci 的,用法跟 Travis 类似,在项目里面根目录下增加.gitlab-ci.yml,然后你可能需要单独增加 gitlab-runner,即可进行持续集成。
更多详情,请大家看我写的另外一篇文章。
打开 travis 官网:https://travis-ci.org/

使用github账号授权登录。
添加项目,这里使用我的 Golang 示例项目 ratelimit。

整个 ci 的过程有以下几步:
.travis.yml,Travis-CI会按照.travis.yml里的内容进行构建.travis.yml到 Github,自动触发持续集成,本文耗时60分钟,建议实战。
.gitlab-ci.yml文件,详细内容见下文源码。注意:经过以上3步之后,build 状态会显示[pending 状态],原因是因为还没有给他配置 Runner。
我们还要配置一下 Runner,如果没有 Runner 则可以参考这个:http://xxx.gitlab.local/server/xxx/runners 其实,Gitlab 已经有 Runner 了,可以直接用于你的项目。点击使其可用就好了。
另外:
Feature Visibility中找到 builds,改变权限,然后点击保存。)
所以,我们应该把这个选项都全部勾选上,用于要求被Merge的代码一定是通过 build 的。
本文耗时60分钟,阅读需要10分钟。
今天要跟大家剖析的是 redis client in golang gopkg.in/redis.v3
其实在此之前,我已经对这个库的源码进行过初步介绍和分析了。
Golang redis.v3源代码分析 Golang redis.v3 源代码再分析
主要是最近我们线上环境使用到redis的一个服务出现了这样的错误信息:
|
|
错误信息提示的很清楚,超时之后又是打开连接太快了。
应该不难理解,其实就是当连接池里面的连接超时不可用了之后,再重新创建,但是因为业务量对于redis连接数的诉求比较大,所以短时间内就出现了超过设定的连接池大小了,而这个错误是超过其预设连接池的2倍就会触发。
为什么是2倍呢?带着这样的问题,我就开始查看错误信息的来源[源码 gopkg.in/redis.v3/pool.go#L199]
注意我这里提供的源码项目版本是:
|
|
备注:GitHub 上已经没有3.1.4.1的分支了,那我直接给大家贴源码吧。