在线安装TiDB集群


  • 服务器准备

说明:TiDB8需要能够连接外网,以便下载各类安装包

TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到

TiKV最好是采用Ext4文件格式,所以使用挂载盘的方式增加(如果没有数据盘,那么不配置也能安装成功)

机器名 IP 操作系统 配置 用途
TiDB1 ***.62 CentOS7.4 X64 4C+8G+60G+200G扩展 TiKV+TiSpark
TiDB2 ***.63 CentOS7.4 X64 4C+8G+60G+200G扩展 TiKV+TiSpark
TiDB3 ***.64 CentOS7.4 X64 4C+8G+60G+200G扩展 TiKV+TiSpark
TiDB4 ***.65 CentOS7.4 X64 4C+8G+260G Mysql5.7+测试工具
TiDB5 ***.66 CentOS7.4 X64 4C+8G+60G TiDB+PD
TiDB6 ***.67 CentOS7.4 X64 4C+8G+60G TiDB+PD
TiDB7 ***.68 CentOS7.4 X64 4C+8G+60G TiDB+PD
TiDB8 ***.69 CentOS7.4 X64 4C+8G+60G 中控机ansible+monitor

  • TiKV数据盘挂载

在TiDB1,TiDB2,TiDB3都需要进行操作。

执行 vi /etc/fstab

添加挂载参数

/dev/mapper/centos-home /home  ext4 defaults,nodelalloc,noatime        

参数解释:

noatime - 不更新文件系统上 inode 访问记录,可以提升性能

nodelalloc情况下每5秒文件系统会提交日志触发回写;delalloc情况下,系统会在约每30秒左右触发一次回写。对于频繁读写,可以加快写入速度。

最后一个0表示是否使用fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0。

 卸载目录并重新挂载

# umount /home
# mount -a

确认是否生效,如果生效了会多出nodelalloc

# mount -t ext4
/dev/mapper/centos-home on /home type ext4 (rw,noatime,seclabel,nodelalloc,data=ordered)

  • 在中控机上添加tidb用户并设置免密码

添加用户

# useradd tidb
# passwd tidb

如果密码设置过短,则会提示密码少于8位,但只是警告继续即可。若设置不成功,可修改vi /etc/login.defs中的PASS_MIN_LEN参数

设置免密

# visudo

将tidb ALL=(ALL) NOPASSWD: ALL加入到最后一行并保存


  • 在中控机上配置 用户、Ansible、免密

使用tidb用户登录中控机

下载TiDb-Ansible

$ cd /home/tidb
$ sudo yum -y install git
$ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git

版本可以到github上看一下,是否有更新。如果使用主线版本执行 git clone https://github.com/pingcap/tidb-ansible.git

安装ansible

$ sudo yum -y install epel-release
$ sudo yum -y install python-pip curl
$ sudo yum -y install sshpass
$ cd tidb-ansible
$ sudo pip install -r ./requirements.txt
$ ansible --version
ansible 2.5.

配置其它服务器的免密

$ ssh-keygen -t rsa

生成密钥,连续回车即可

配置设置免密的目标服务器,注意将***换成真实的IP。

$ vi hosts.ini

[servers]
***.***.***.
***.***.***.
***.***.***.
***.***.***.
***.***.***.
***.***.***.
***.***.***.68
***.***.***.69
[all:vars]
username = tidb
ntp_server = pool.ntp.org

使用ansible执行免密

$ ansible-playbook -i hosts.ini create_users.yml -k

检验

$ ssh ***.***.***.
$ sudo -su root

如果在中控机上能够无密码登录,并且登录后可以无密码切换到root。即说明免密设置成功

特别注意中控机本机也要免密,后续将组件安装到中控机时就不用再进行特别的设置了


  • 关闭所有服务器上的防火墙

使用tidb用户登录,关闭防火墙,并取消开机启动

$ cd /home/tidb/tidb-ansible
$ ansible -i hosts.ini all -m shell -a "firewall-cmd --state" -b
$ sudo systemctl stop firewalld.service
$ sudo systemctl disable firewalld.service
$ ansible -i hosts.ini all -m shell -a "systemctl stop firewalld.service" -b
$ ansible -i hosts.ini all -m shell -a "systemctl disable firewalld.service" -b

  • 设置NTP

使用tidb用户登录中控机,安装ntp服务

$ cd /home/tidb/tidb-ansible
$ ansible -i hosts.ini all -m shell -a "yum install -y ntp" -b

配置中控机做为时间服务器

$ sudo vi /etc/ntp.conf

文件做如下修改
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict ***.**.*.0 mask 255.255.255.0 # Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 127.127.1.0
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst

说明:需要增加一个restrict,可以使用当前服务器的IP段,上面使用***是为了保密。注意填写自己的IP段。

ntp中本机使用server 127.127.1.0

配置所有从机的ntp配置

$ sudo vi /etc/ntp.conf

文件做如下修改
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server ***.***.***.69 iburst
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst

iburst : 当server不可达时,以默认发包速率的8倍向服务器发包。***是为了保密,请修改为主控机的实际IP

启动ntp服务

使用tidb登录中控机

$ cd /home/tidb/tidb-ansible
$ ansible -i hosts.ini all -m shell -a "systemctl disable chronyd.service" -b
$ ansible -i hosts.ini all -m shell -a "systemctl enable ntpd.service" -b
$ ansible -i hosts.ini all -m shell -a "systemctl start ntpd.service" -b

检验ntp服务

$ ansible -i hosts.ini all -m shell -a  "ntpstat" -b
$ ansible -i hosts.ini all -m shell -a "ntpq -p" -b

ntpstat可以查看服务器的ntp状态,ntpq可以查看各服务器当前使用的时间服务器

特别注意:服务器重启以后,去启动tidb时,可能会提示ntp同步不成功,确保ntp服务是开启的,等待几分钟就好了。


  • 配置集群规划

本次每台服务器只配置一个TiKV,并且使用标准目录配置,如果需要一台服务器配置多KV或者调整数据目录,请参考官方文档

机器名 IP 操作系统 配置 用途
TiDB1 ***.62 CentOS7.4 X64 4C+8G+60G+200G扩展 TiKV+TiSpark
TiDB2 ***.63 CentOS7.4 X64 4C+8G+60G+200G扩展 TiKV+TiSpark
TiDB3 ***.64 CentOS7.4 X64 4C+8G+60G+200G扩展 TiKV+TiSpark
TiDB4 ***.65 CentOS7.4 X64 4C+8G+260G Mysql5.7+测试工具
TiDB5 ***.66 CentOS7.4 X64 4C+8G+60G TiDB+PD
TiDB6 ***.67 CentOS7.4 X64 4C+8G+60G TiDB+PD
TiDB7 ***.68 CentOS7.4 X64 4C+8G+60G TiDB+PD
TiDB8 ***.69 CentOS7.4 X64 4C+8G+60G 中控机ansible+monitor

 使用tidb登录中控机,进行规划配置

$ cd /home/tidb/tidb-ansible
$ vi inventory.ini 将服务器IP配置到各配置项下面
## TiDB Cluster Part
[tidb_servers]
***.***.**
***.***.**
***.***.** [tikv_servers]
***.***.**
***.***.**
***.***.** [pd_servers]
***.***.**
***.***.**
***.***.** [spark_master]
***.***.** [spark_slaves]
***.***.**
***.***.** ## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
***.***.** [grafana_servers]
***.***.** # node_exporter and blackbox_exporter servers
[monitored_servers]
***.***.**
***.***.**
***.***.**
***.***.**
***.***.**
***.***.**
***.***.**
***.***.**

请将***替换为实际的IP


  • 安装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

下载安装包

$ ansible-playbook local_prepare.yml

执行后会自动下载最新的TiDB包到downloads目录中

修改系统环境,修改内核参数

$ ansible-playbook bootstrap.yml

修改后会做一些检测,也会提示一些错误,例如CPU核数不够,如果不是关键问题,可以直接继续。

根据inventory.ini部署集群

$ ansible-playbook deploy.yml

部署需要的时间比较长,可以看看日志输出,当出现以下字样时,说明部署成功。如果failed不是0,那么可以重新执行部署,如果多次部署还不成功,则需要看一下,错误原因了。

***.***.**.              : ok=   changed=   unreachable=    failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
localhost : ok= changed= unreachable= failed= Congrats! All goes well. :-)

为spark配置JDK

如果使用了TiSpark,那么需要为对应的服务器配置JDK。首先将JDK安装包放到中控机上,然后再传给TiSpark所在的服务器。

如果可以直接传过去,也可以不使用此种方式

$ cd /home/tidb
$ mkdir software

先将jdk文件传送到此目录中,jdk-8u91-linux-x64.tar.gz

在TiKV的服务器上创建/opt/jdk目录。然后回到中控机使用scp进行传输

scp jdk-8u91-linux-x64.tar.gz root@***.**.**.:/opt/jdk/
scp jdk-8u91-linux-x64.tar.gz root@***.**.**.:/opt/jdk/
scp jdk-8u91-linux-x64.tar.gz root@***.**.**.:/opt/jdk/

请将***换成实际IP

使用root切换到62、63、64三台服务器上,进行jdk解压,并进行环境变量配置。以62为例

$ ssh 172.18.100.62
$ su -
# cd /opt/jdk/
# tar zxvf jdk-8u91-linux-x64.tar.gz
# vi /etc/profile 在文件的最后位置增加JDK配置。 done export JAVA_HOME=/opt/jdk/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar unset i
unset -f pathmunge

验证JDK安装是否成功

# source /etc/profile
# java -version
# su - tidb
# java -version

  • 启动和停止TiDB集群

使用tidb登录,启动集群

$ cd /home/tidb/tidb-ansible
$ ansible-playbook start.yml

出现以下输出,代表启动成功

***.***.**.              : ok=   changed=    unreachable=    failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
localhost : ok= changed= unreachable= failed= Congrats! All goes well. :-)

使用tidb登录,停止集群

$ cd /home/tidb/tidb-ansible
$ ansible-playbook stop.yml

出现以下输出,代表停止成功

***.***.**.              : ok=   changed=    unreachable=    failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
***.***.**. : ok= changed= unreachable= failed=
localhost : ok= changed= unreachable= failed= Congrats! All goes well. :-)

  • 检查集群状态

 使用mysql客户端工具测试

mysql -u root -h ***.***.**.66 -P 4000
mysql -u root -h ***.***.**.67 -P 4000
mysql -u root -h ***.***.**.68 -P 4000

通过浏览器访问监控平台

地址:http://***.***.**.69:3000 默认帐号密码是:admin/admin

至此平台安装完成,TiSpark目前还没有测试,代测试后补充这部分内容。


  • 安装mysql客户端

如果手头没有mysql服务器,那么就无法使用mysql命令,所以这里提供mysql客户端的安装方法

$ cd /home/tidb/
$ mkdir software
$ cd software
$ mkdir mysql
$ sudo yum -y install wget
$ wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
$ sudo yum install -y mysql57-community-release-el7-.noarch.rpm
$ sudo yum install -y mysql-community-client

安装成功后,安装目录就可以删除了。


  • 使用tpch-mysql加载数据(可选)

下载tpch工具

$ cd /home/tidb
$ git clone https://github.com/maobuji/tpch-mysql
$ cd tpch-mysql/test-tools
$ chmod *.sh

配置tpch导入工具

$ vi config.properties

在文件中配置数据库地址、用户名等内容

生成待导入数据

$ sh dataMake.sh

创建库表并导入数据

$ sh dataImport.sh

导入数据库需要一定时间,需要耐心等待

如果设置的是并发导入,任务会进入后台,且结束不会提示。如果用ps查到类似的进程,则说明还在导入中

$ ps -ef|grep tpch

tidb             : pts/    :: mysql -h 172.34.34.66 -P  -uroot --local-infile= -D tpch

如果希望知道进度,可以将config文件中的target_db_asynchronous 改为1,逐表进行导入。

生成查询sql

$ sh queryMake.sh
$ cd queries

目录下会生成tpch的22个查询sql,可以用于测试执行


  • 启动TiSpark

使用tidb用户登录TIDB1,启动master

$ cd /home/tidb/deploy/spark
$ ./sbin/start-master.sh

启动成功后,可以访问http://TIDB1_IP:8080/ 进入管控台,后续加入Spark-Slave后也可以通过管控台查看Slave是否已加入集群

使用tidb用户登录TIDB2,TIDB3,启动Slave

$ cd /home/tidb/deploy/spark
$ ./sbin/start-slave.sh spark://TIDB1_IP:7077

再次访问管控台,可以看到Slave已经加入了

配置信息

TiSpark需要配置PD信息

/home/tidb/deploy/spark/conf/spark-defaults.conf

由于我们在开始的规划文档中已经配置好了,所以只要看一下文件内容即可,不再需要配置了

spark.tispark.pd.addresses这个配置项目应该指向PD的IP列表,如果没有则手工配置 ***.***.**.66:2379,***.***.**.67:2379,***.***.**.68:2379


  • 运行TiSpark测试

目前数据库中已经有了tpch数据库,我们对这个数据库进行查询。

$ cd /home/tidb/deploy/spark/bin
$ sh spark-shell 启动成功后会出现如下输出:
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.
/_/ Using Scala version 2.11. (Java HotSpot(TM) -Bit Server VM, Java 1.8.0_91)
Type in expressions to have them evaluated.
Type :help for more information.

 执行查询

scala> import org.apache.spark.sql.TiContext
import org.apache.spark.sql.TiContext scala> val ti = new TiContext(spark)
ti: org.apache.spark.sql.TiContext = org.apache.spark.sql.TiContext@3d6c7152 scala> ti.tidbMapDatabase("tpch") scala> spark.sql("select count(*) from lineitem").show
+--------+
|count()|
+--------+
| |
+--------+

除了使用spark-shell以外,也可以使用tispark-sql,即可以直接执行sql语句,不过该工具没有被默认安装,需要自己下载

使用tidb保持登录在TiSpark的master上

$ cd /home/tidb/deploy/spark/bin
$ sudo yum install -y wget
$ wget https://raw.githubusercontent.com/pingcap/tispark/master/core/scripts/tispark-sql
$ chmod tispark-sql
$ sh tispark-sql

等一会则进入输入模式

tispark-sql> use tpch;
tispark-sql> show databases;

以下内查询结果:

.......

18/05/17 10:14:32 INFO TaskSchedulerImpl: Removed TaskSet 1.0, whose tasks have all completed, from pool
18/05/17 10:14:32 INFO DAGScheduler: ResultStage 1 (processCmd at CliDriver.java:376) finished in 0.101 s
18/05/17 10:14:32 INFO DAGScheduler: Job 1 finished: processCmd at CliDriver.java:376, took 0.147235 s
test
tpch
mysql
default
Time taken: 0.206 seconds, Fetched 4 row(s)
18/05/17 10:14:32 INFO CliDriver: Time taken: 0.206 seconds, Fetched 4 row(s)

查询输出的日志内容非常多,结果也混在里边,目前还太清楚,如何配置参数,不输出查询过程。

自此, TiSpark测试完成

在线安装TIDB集群的更多相关文章

  1. 在线安装CM集群

    https://www.cloudera.com/documentation/manager/5-0-x/Cloudera-Manager-Installation-Guide/cm5ig_insta ...

  2. Centos7配置TiDB集群

    一:各模块属性 模块名称 状态 建议实例数 功能 负载均衡组件 TiDB 无状态 2 接收SQL请求,处理SQL相关逻辑,并通过PB找到存储数据的TiKV地址 LVS.HAProxy.F5 PB 集群 ...

  3. TiDB集群安装主要操作

    TiDB集群安装主要操作 参考资料:https://www.cnblogs.com/plyx/archive/2018/12/21/10158615.html 一.TiDB数据简介 TiDB 是 Pi ...

  4. centos7.0 安装redis集群

    生产环境下redis基本上都是用的集群,毕竟单机版随时都可能挂掉,风险太大.这里我就来搭建一个基本的redis集群,功能够用但是还需要完善,当然如果有钱可以去阿里云买云数据库Redis版的,那个还是很 ...

  5. CentOS7 搭建Ambari-Server,安装Hadoop集群(一)

    2017-07-05:修正几处拼写错误,之前没发现,抱歉! 第一次在cnblogs上发表文章,效果肯定不会好,希望各位多包涵. 编写这个文档的背景是月中的时候,部门老大希望我们能够抽时间学习一下Had ...

  6. linux下redis的安装和集群搭建

    一.redis概述 1.1.目前redis支持的cluster特性: 1):节点自动发现. 2):slave->master 选举,集群容错. 3):Hot resharding:在线分片. 4 ...

  7. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  8. 部署TiDB集群

    架构图 节点规划 120.52.146.213 Control Machine 120.52.146.214 PD1_TiDB1 120.52.146.215 PD2_TiDB2 120.52.146 ...

  9. tidb集群

    tidb ansible部署 https://zhuanlan.zhihu.com/p/27308307?refer=newsql 网址:http://www.cnblogs.com/mowei/p/ ...

随机推荐

  1. Java语法基础学习DaySeventeen(多线程续)

    一.线程的特点 1.线程的分类 java中的线程分为两类:守护线程和用户线程.唯一的区别是判断JVM何时离开. 守护线程是用来服务用户线程的,通过在start()方法前调用Thread.setDaem ...

  2. javascript性能优化之避免二次评估

    Javascript与许多脚本语言一样,允许你在程序中获取一个包含代码的字符串然后运行它,有多种方式可以实现在一串Javascript代码并运行它. 代码示例如下 <html> <h ...

  3. L2-024. 部落(并查集)*

    L2-024. 部落 参考博客 #include<cstdio> #include<iostream> #include<set> #include<algo ...

  4. 第k大元素

    在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注意 你可以交换数组 ...

  5. vagrant package制作一个box镜像

    1.进入virtualbox安装目录,查看虚拟机的名称(第一列为虚拟机名称) # vboxmanage list vms 2. vagrant  package 打包命令 vagrant packag ...

  6. python 5

    一.python2与3的差别 在2中,range是一个数字列表 xrange是一个可迭代对象 在3中,range是一个可迭代对象 没有xrange 二.dict dict长什么样? 一个key对应一个 ...

  7. Combining Lexical and Grammatical Features to Improve Readability Measures for First and Second Language Texts.-paper

    http://www.aclweb.org/anthology/N07-1058 Volume:Human Language Technologies 2007: The Conference of ...

  8. #电脑磁盘分区#新买的电脑一般只有C盘或者C盘和D盘,怎么加多几个盘呢

    新买的电脑一般只有C盘或者C盘和D盘,怎么加多几个盘呢 鼠标右键点击桌面我的电脑选择管理 进入计算机管理.选择磁盘管理 若桌面没有我的电脑,可按win+x键,在快捷菜单栏中点击磁盘管理 通过以上两种w ...

  9. 内存溢出eclipse启动tomcat

    1.在eclipse中的Window->preferences->Java->install jar->选择JDK,然后在点击Edit,在Default VM argument ...

  10. #学习笔记#JSP数据交互

    #学习笔记#JSP数据交互 数据库的使用方式:   当用户在第一个页面的查询框输入查询语句点提交的时候我们是用什么样的方式完成这个查询的? 答:我们通过在第一个页面提交表单的形式,真正的数据库查询时在 ...