在线安装TiDB集群

Posted 紫霞315

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在线安装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       0 0

参数解释:

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.0
复制代码

 

配置其它服务器的免密

$ ssh-keygen -t rsa

生成密钥,连续回车即可

 

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

复制代码
$ vi hosts.ini

[servers]
***.***.***.62
***.***.***.63
***.***.***.64
***.***.***.65
***.***.***.66
***.***.***.67
***.***.***.68
***.***.***.69

[all:vars] username = tidb ntp_server = pool.ntp.org
复制代码

 

使用ansible执行免密

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

 

检验

$ ssh ***.***.***.68
$ 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 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.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 0.centos.pool.ntp.org iburst
server 1.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可以查看各服务器当前使用的时间服务器


 

  • 配置集群规划

本次每台服务器只配置一个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]
***.***.**66
***.***.**67
***.***.**68

[tikv_servers]
***.***.**62
***.***.**63
***.***.**64

[pd_servers]
***.***.**66
***.***.**67
***.***.**68

[spark_master]
***.***.**62

[spark_slaves]
***.***.**63
***.***.**64


## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
***.***.**69

[grafana_servers]
***.***.**69

# node_exporter and blackbox_exporter servers
[monitored_servers]
***.***.**62
***.***.**63
***.***.**64
***.***.**65
***.***.**66
***.***.**67
***.***.**68
***.***.**69
复制代码

请将***替换为实际的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,那么可以重新执行部署,如果多次部署还不成功,则需要看一下,错误原因了。

复制代码
***.***.**.62              : ok=59   changed=28   unreachable=0    failed=0   
***.***.**.63              : ok=60   changed=29   unreachable=0    failed=0   
***.***.**.64              : ok=60   changed=29   unreachable=0    failed=0   
***.***.**.65              : ok=32   changed=15   unreachable=0    failed=0   
***.***.**.66              : ok=66   changed=28   unreachable=0    failed=0   
***.***.**.67              : ok=66   changed=28   unreachable=0    failed=0   
***.***.**.68              : ok=66   changed=28   unreachable=0    failed=0   
***.***.**.69              : ok=85   changed=48   unreachable=0    failed=0   
localhost                  : ok=1    changed=0    unreachable=0    failed=0   

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@***.**.**.62:/opt/jdk/
scp jdk-8u91-linux-x64.tar.gz root@***.**.**.63:/opt/jdk/
scp jdk-8u91-linux-x64.tar.gz root@***.**.**.64:/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

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

复制代码
***.***.**.62              : ok=18   changed=3    unreachable=0    failed=0   
***.***.**.63              : ok=18   changed=3    unreachable=0    failed=0   
***.***.**.64              : ok=18   changed=3    unreachable=0    failed=0   
***.***.**.65              : ok=14   changed=2    unreachable=0    failed=0   
***.***.**.66              : ok=18   changed=4    unreachable=0    failed=0   
***.***.**.67              : ok=18   changed=4    unreachable=0    failed=0   
***.***.**.68              : ok=18   changed=4    unreachable=0    failed=0   
***.***.**.69              : ok=31   changed=10   unreachable=0    failed=0   
localhost                  : ok=1    changed=0    unreachable=0    failed=0   

Congrats! All goes well. :-)
复制代码

 

使用tidb登录,停止集群

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

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

复制代码
***.***.**.62              : ok=18   changed=2    unreachable=0    failed=0   
***.***.**.63              : ok=18   changed=2    unreachable=0    failed=0   
***.***.**.64              : ok=18   changed=2    unreachable=0    failed=0   
***.***.**.65              : ok=13   changed=1    unreachable=0    failed=0   
***.***.**.66              : ok=17   changed=3    unreachable=0    failed=0   
***.***.**.67              : ok=17   changed=3    unreachable=0    failed=0   
***.***.**.68              : ok=17   changed=3    unreachable=0    failed=0   
***.***.**.69              : ok=20   changed=4    unreachable=0    failed=0   
localhost                  : ok=1    changed=0    unreachable=0    failed=0   

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目前还没有测试,代测试后补充这部分内容。

以上是关于在线安装TiDB集群的主要内容,如果未能解决你的问题,请参考以下文章

数据库必知必会:TiDB(11)TiDB数据库集群安装

TiDB集群安装TiDB Dashboard

在开发环境使用 TiUP安装TiDB集群

在开发环境使用 TiUP安装TiDB集群

国内重要的 Go 语言项目:TiDB 3.0 GA,稳定性和性能大幅提升

TIDB - Docker环境集群搭建