TiDB在测试环境的安装部署

1. 软件及硬件环境说明

TiDB作为一个分布式的NewSQL数据库产品,其安装部署的要求也是挺高的。下面是官方文档的测试环境的安装需求:

组件 CPU 内存 本地存储 网络 实例数量(最低要求)
TiDB 8核+ 16 GB+ 无特殊要求 千兆网卡 1(可与 PD 同机器)
PD 4核+ 8 GB+ SAS, 200 GB+ 千兆网卡 1(可与 TiDB 同机器)
TiKV 8核+ 32 GB+ SSD, 200 GB+ 千兆网卡 3

如果按照官方文档来做的话,没有几台服务器是没办法玩TiDB的了。为了不只是使用他们提供的Docker版,而是使用更加强大的完整版本。下面我们修改一些检测的参数来降低TiDB对硬件的要求,最后实现用Ansible安装部署。下面是我本次测试环境的说明:

组件 CPU 内存 网络 实例数量(最低要求)
TiDB 2核+ 4 GB+ 虚拟网卡 1(可与 PD 同机器)
PD 2核+ 4 GB+ 虚拟网卡 1(可与 TiDB 同机器)
TiKV 2核+ 4 GB+ 虚拟网卡 3

测试环境是在我PC的虚拟机上进行的,系统版本为CentOS7.4,TiDB的版本为2.1

2. 准备虚拟机、准备中控机

按照上表的配置要求准备好四台虚拟机,其中TIDB和PD在同一台虚拟机上,同时这台机也作为中控机来使用。

  • 在中控机上安装系统依赖包
    以 root 用户登录中控机
yum -y install epel-release git curl sshpass
yum -y install python2-pip
  • 在中控机上创建 tidb 用户,并生成 ssh key
    以 root 用户登录中控机,执行以下命令
useradd -m -d /home/tidb tidb
passwd tidb

配置 tidb 用户 sudo 免密码,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾即可。

# visudo
tidb ALL=(ALL) NOPASSWD: ALL

生成 ssh key: 执行 su 命令从 root 用户切换到 tidb 用户下。创建 tidb 用户 ssh key, 提示 Enter passphrase 时直接回车即可。执行成功后,ssh 私钥文件为 /home/tidb/.ssh/id_rsa, ssh 公钥文件为 /home/tidb/.ssh/id_rsa.pub。

su - tidb
ssh-keygen -t rsa
  • 在中控机器上下载 TiDB-Ansible
    目前TiDB的最新版本为3.0,官方给出的版本图表如下



    到TiDB的github上看到2.1的最新版本为2.1.15,本次我们就下载这个版本的TiDB。
    下载指定版本的tidb-ansible:

git clone -b v2.1.15 https://github.com/pingcap/tidb-ansible.git

下载指定版本的tidb-ansible:

git clone https://github.com/pingcap/tidb-ansible.git
  • 在中控机器上安装 Ansible 及其依赖
    以 tidb 用户登录中控机,请务必按以下方式通过 pip 安装 Ansible 及其相关依赖的指定版本,否则会有兼容问题。安装完成后,可通过 ansible --version 查看 Ansible 版本。目前 release-2.0、release-2.1 及 master 版本兼容 Ansible 2.4 及 Ansible 2.5 版本,Ansible 及相关依赖版本记录在 tidb-ansible/requirements.txt 文件中。
cd /home/tidb/tidb-ansible
sudo pip install -r ./requirements.txt
  • 在中控机上配置部署机器 ssh 互信及 sudo 规则
    以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下。
[servers]
192.168.113.20
192.168.113.21
192.168.113.22
192.168.113.23

[all:vars]
username = tidb
ntp_server = pool.ntp.org

执行以下命令,按提示输入部署目标机器 root 用户密码。该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。

ansible-playbook -i hosts.ini create_users.yml -u root -k
  • 在部署目标机器上安装 NTP 服务
    我的这几台服务器在做初始化的时候就装好了NTP服务了,如果你的服务没有安装的话必须要进行安装。
    该步骤将在部署目标机器上使用系统自带软件源联网安装并启动 NTP 服务,服务使用安装包默认的 NTP server 列表,见配置文件 /etc/ntp.conf 中 server 参数,如果使用默认的 NTP server,你的机器需要连接外网。 为了让 NTP 尽快开始同步,启动 NTP 服务前,系统会 ntpdate hosts.ini 文件中的 ntp_server 一次,默认为 pool.ntp.org,也可替换为你的 NTP server。
    以 tidb 用户登录中控机,执行以下命令:
cd /home/tidb/tidb-ansible
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
  • 分配机器资源,编辑 inventory.ini 文件
    以 tidb 用户登录中控机,inventory.ini 文件路径为 /home/tidb/tidb-ansible/inventory.ini。我这里一共有3个kv,pd和db是共用一台服务器,同时这台服务器还担任监控服务器的角色,就是安装了prometheus+grafana。
    注意:
    请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认 22 端口,需添加 ansible_port 变量,如 TiDB1 ansible_host=172.16.10.1 ansible_port=5555。
## TiDB Cluster Part
[tidb_servers]
192.168.113.20

[tikv_servers]
192.168.113.21
192.168.113.22
192.168.113.23

[pd_servers]
192.168.113.20

## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
192.168.113.20

[grafana_servers]
192.168.113.20

# node_exporter and blackbox_exporter servers
[monitored_servers]
192.168.113.20
192.168.113.21
192.168.113.22
192.168.113.23

[alertmanager_servers]
192.168.113.20
  • 部署任务
    ansible-playbook 执行 Playbook 时默认并发为 5,部署目标机器较多时可添加 -f 参数指定并发,如 ansible-playbook deploy.yml -f 10
  1. 确认 tidb-ansible/inventory.ini 文件中 ansible_user = tidb,本例使用 tidb 用户作为服务运行用户,配置如下:
    ansible_user 不要设置成 root 用户,tidb-ansible 限制了服务以普通用户运行。
## Connection
# ssh via normal user
ansible_user = tidb

执行以下命令如果所有 server 返回 tidb 表示 ssh 互信配置成功。

ansible -i inventory.ini all -m shell -a 'whoami'

执行以下命令如果所有 server 返回 root 表示 tidb 用户 sudo 免密码配置成功。

ansible -i inventory.ini all -m shell -a 'whoami' -b
  1. 执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机:
ansible-playbook local_prepare.yml
  1. 初始化系统环境,修改内核参数
    在做这一步之前,我们先要修改 /home/tidb/tidb-ansible/group_vars/all.yml 这个文件中的一个参数
dev_mode: True

意思就是打开测试模式,这时候TiDB对硬件的需求就不会那么高。然后再执行下面那一步,执行的过程可能不会那么顺利,看到有什么不达标再进行处理。

ansible-playbook bootstrap.yml
  1. 部署 TiDB 集群软件
ansible-playbook deploy.yml

注意:
Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖 fontconfig 包和英文字体。如需使用该功能,登录 grafana_servers 机器,用以下命令安装:

sudo yum install fontconfig open-sans-fonts
  1. 启动 TiDB 集群
ansible-playbook start.yml
  • 测试集群
    测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口。
    使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口。
mysql -u root -h 192.168.113.20  -P 4000

通过浏览器访问监控平台。
地址:http://192.168.113.20:3000 默认帐号密码是:admin/admin

  • 下面是TiDB的端口说明
组件 端口变量 默认端口 说明
TiDB tidb_port 4000 应用及DBA工具访问通信端口
TiDB tidb_status_port 10080 TiDB状态信息上报通信端口
TiKV tikv_port 20160 TiKV通信端口
TiKV tikv_status_port 20180 上报TiKV状态的通信端口
PD pd_client_port 2379 提供TiDB和PD通信端口
PD pd_peer_port 2380 PD集群节点间通信端口
Pump pump_port 8250 Pump通信端口
Prometheus prometheus_port 9090 Prometheus服务通信端口
Pushgateway pushgateway_port 9091 TiDB,TiKV,PD监控聚合和上报端口
Node_exporter node_exporter_port 9100 TiDB集群每个节点的系统信息上报通信端口
Blackbox_exporter blackbox_exporter_port 9115 Blackbox_exporter通信端口,用于TiDB集群端口监控
Grafana grafana_port 3000 Web监控服务对外服务和客户端(浏览器)访问端口
Grafana grafana_collector_port 8686 grafana_collector通信端口,用于将Dashboard导出为PDF格式
Kafka_exporter kafka_exporter_port 9308 Kafka_exporter通信端口,用于监控binlogKafka集群
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容