Centos7.2离线搭建TiDB分布式数据库

文章目录

    • 概述
    • 准备机器
    • 一、环境说明
    • 二、准备工作
      • 1、创建tidb用户及sudo免密
      • 2、格式化文件系统为ext4
    • 三、安装TiDB数据库
      • 1、安装pip
      • 2、安装Ansible及其依赖
    • 四、测试集群
      • 1、访问TiDB监控(中控机ip+端口)
      • 2、访问数据库
    • 五、常见错误
    • 六、后记
      • 1、服务配置文件参数调整

概述

Ansible 是一款自动化运维工具,TiDB-Ansible 是 PingCAP 基于 Ansible playbook 功能编写的集群部署工具。本文档介绍如何使用 TiDB-Ansible 部署一个完整的 TiDB 集群。
TiDB官方文档

注: 对于生产环境,须使用 TiDB-Ansible 部署 TiDB 集群。如果只是用于测试 TiDB 或体验 TiDB 的特性,建议使用 Docker Compose 在单机上快速部署 TiDB 集群

准备机器

  1. 部署目标机器若干
    (1). 建议 4 台及以上,TiKV 至少 3 实例,且与 TiDB、PD 模块不位于同一主机,详见TiDB部署建议
    (2). 推荐安装 CentOS 7.2 及以上版本 Linux 操作系统,x86_64 架构 (amd64)。
    (3). 机器之间内网互通。
  2. 部署中控机一台
    (1). 中控机可以是部署目标机器中的某一台。
    (2). 推荐安装 CentOS 7.2 及以上版本 Linux 操作系统(默认包含 Python 2.7)。
    (3). 该机器需开放外网访问,用于下载 TiDB 及相关软件安装包。

一、环境说明

一共七台服务器,三台跑TiKV server,三台跑PD server, 两台跑TiDB server

内网ip 外网ip 角色
192.168.56.156 192.168.43.191 下载机
192.168.56.155 PD、Prometheus、Grafana、Pushgateway、Node_exporter
192.168.56.154 PD、TiDB、Node_exporter
192.168.56.153 PD、TiDB、Node_exporter
192.168.56.152 TiKV、Node_exporter
192.168.56.151 TiKV、Node_exporter
192.168.56.150 TiKV、Node_exporter

标准 TiDB 集群需要 6 台机器:

  • 2 个 TiDB 节点
  • 3 个 PD 节点
  • 3 个 TiKV 节点,第一台 TiDB 机器同时用作监控机

二、准备工作

1、创建tidb用户及sudo免密

用root用户分别登录到192.168.56.150-155机器创建tidb用户并设置免密

# 创建tidb用户
$ useradd tidb
$ passwd tidb    # 密码也设置为tidb

# 设置免密
$ visudo         # 或者 vim /etc/sudoers
# 跳到最后新增一行
tidb ALL=(ALL) NOPASSWD: ALL

生成 ssh key: 执行 su 命令从 root 用户切换到 tidb 用户下。

#su tidb

创建 tidb 用户的 ssh key, 提示 Enter passphrase 时直接回车即可。执行成功后,ssh 私钥文件为 /home/tidb/.ssh/id_rsa, ssh 公钥文件为 /home/tidb/.ssh/id_rsa.pub。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tidb/.ssh/id_rsa):
Created directory '/home/tidb/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tidb/.ssh/id_rsa.
Your public key has been saved in /home/tidb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eIBykszR1KyECA/h0d7PRKz4fhAeli7IrVphhte7/So [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|=+o+.o.          |
|o=o+o.oo         |
| .O.=.=          |
| . B.B +         |
|o B * B S        |
| * + * +         |
|  o + .          |
| o  E+ .         |
|o   ..+o.        |
+----[SHA256]-----+

以tidb用户登录到下载机[192.168.56.156],执行以下命令,将中控机的pub key发送到其他需要互信的机器上

$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.150
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.151
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.152
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.153
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.154
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.155

验证ssh免密登录(互相通信)

$ ssh 192.168.56.154

在中控机上ssh到互信的机器,是不需要输入密码的

2、格式化文件系统为ext4

需把TiKV server三台机器的外挂SSD磁盘格式化为ext4格式

# 查看磁盘,找到需要格式化的磁盘号(假设磁盘号为/dev/vdb)
$ fdisk -l

# 对磁盘进行分区,此处我们只分一个区,按提示一步一步操作即可
# 可以参考:https://blog.csdn.net/panfelix/article/details/39701011
$ fdisk /dev/vdb

# 创建一个文件夹,用于刚格式化的分区mount到该文件夹
$ mkdir /u01

# 设置开机自动mount,编辑/etc/fstab文件,加入一行
$ vim /etc/fstab
/dev/vdb /u01 ext4 defaults,nodelalloc,noatime 0 2

# 确认是否生效
$ mount -a
$ mount -t ext4
/dev/vdb on /u01 type ext4 (rw,noatime,nodelalloc,data=ordered)

三、安装TiDB数据库

参考官方文档:https://pingcap.com/docs-cn/op-guide/offline-ansible-deployment/

1、安装pip

由于中控机没有公网ip,不能连接外网,所以需要借助下载机(192.168.56.156)下载pip安装包,然后scp到中控机(192.168.56.155)

# 在下载机中下载pip安装包
$ wget https://download.pingcap.org/pip-rpms.el7.tar.gz

# scp 到中控机
$ scp pip-rpms.el7.tar.gz [email protected]:/home/tidb

# 中控机中安装pip
$ tar -zxvf pip-rpms.el7.tar.gz
$ cd pip-rpms.el7.tar.gz
$ sh install_pip.sh

# 验证pip是否安装成功
$ pip -V

下载机也需要安装pip,安装方式跟中控机一样,解压再执行shell安装脚本

2、安装Ansible及其依赖

# 下载机中下载Ansible2.5安装包
$ wget https://download.pingcap.org/ansible-2.5.0-pip.tar.gz

# scp 到中控机
scp ansible-2.5.0-pip.tar.gz [email protected]:/home/tidb

# 在中控机中安装Ansible2.5
$ tar -xzvf ansible-2.5.0-pip.tar.gz
$ cd ansible-2.5.0-pip/
$ sh install_ansible.sh

# 查看ansible版本
$ ansible --version

下载机中也需要安装ansible,安装方式跟中控机一样,解压再执行shell安装脚本

注: 如果中控机安装ansible过程中提示依赖没有安装,可以到下载机中下载相关依赖的rpm包,scp到中控机安装yum -y install xxx.rmp,centos rmp包查找

以 tidb 用户登录中控机并进入 /home/tidb 目录。以下为 tidb-ansible 分支与 TiDB 版本对应关系,版本选择可以咨询官方。

tidb-ansible 分支 TiDB版本 备注
release-2.0 2.0版本 最新稳定版本,可用于生产环境。
master master版本 包含最新特性,每日更新。

使用git命令从 Github TiDB-Ansible 项目上下载 TiDB-Ansible 相应分支,默认的文件夹名称为 tidb-ansible。

下载 2.0 版本:

$ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git

或下载 master 版本:

$ git clone https://github.com/pingcap/tidb-ansible.git

**注:**请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不要下载到 /root 下,否则会遇到权限问题。

执行chown -R tidb:tidb /home/tidb/ 给tidb-ansible授权

在下载机中执行 local_prepare.yml playbook,联网下载 TiDB binary 到下载机

$ cd tidb-ansible
$ ansible-playbook local_prepare.yml

将下载机中的tidb-ansible文件夹scp到中控机,接下来的操作就跟下载机无关了。

$ scp -r tidb-ansible [email protected]:/home/tidb

以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下。

$ cd /home/tidb/tidb-ansible
$ vim hosts.ini
[servers]
192.168.56.150
192.168.56.151
192.168.56.152
192.168.56.153
192.168.56.154
192.168.56.155
 
[all:vars]
username = tidb
ntp_server = pool.ntp.org

在中控机中配置集群节点的分布情况,以及安装路径

$ /home/tidb/tidb-ansible

$ vim inventory.ini

## TiDB Cluster Part
[tidb_servers]
192.168.56.153
192.168.56.154

[tikv_servers]
192.168.56.150
192.168.56.151
192.168.56.152

[pd_servers]
192.168.56.153
192.168.56.154
192.168.56.155

[spark_master]

[spark_slaves]

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

[grafana_servers]
192.168.56.155

# node_exporter and blackbox_exporter servers
[monitored_servers]
192.168.56.150
192.168.56.151
192.168.56.152
192.168.56.153
192.168.56.154
192.168.56.155

[alertmanager_servers]

## Binlog Part
[pump_servers:children]
tidb_servers

## Group variables
[pd_servers:vars]
# location_labels = ["zone","rack","host"]

## Global variables
[all:vars]
deploy_dir = /home/tidb/deploy

## Connection
# ssh via normal user
ansible_user = tidb

cluster_name = test-cluster

tidb_version = latest

# process supervision, [systemd, supervise]
process_supervision = systemd

# timezone of deployment region
timezone = Asia/Shanghai
set_timezone = True

enable_firewalld = False
# check NTP service
enable_ntpd = True
set_hostname = False
......

修改完配置文件后,在中控机中执行初始化

在 /home/tidb/tidb-ansible/下执行以下命令

$ ansible-playbook -i inventory.ini bootstrap.yml -k -K

在中控机中安装服务

$ ansible-playbook -i inventory.ini deploy.yml -k -K

启动所有服务

$ ansible-playbook -i inventory.ini start.yml -k

停止所有服务

$ ansible-playbook -i inventory.ini stop.yml

四、测试集群

1、访问TiDB监控(中控机ip+端口)

通过浏览器访问监控平台。

http://192.168.56.155:3000

默认帐号密码是:admin/admin

注: 中控机没有公网ip,我们可以通过下载机来访问

2、访问数据库

我们的TiDBs server运行在192.168.56.153和192.168.56.154,所以我们可以通过这两个ip进行访问
使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口

mysql -u root -h 192.168.56.153 -P 4000

数据库密码默认为空
Centos7.2离线搭建TiDB分布式数据库_第1张图片

五、常见错误

详见博客

六、后记

1、服务配置文件参数调整

多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中的 block-cache-size 参数:

  • rocksdb defaultcf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 30%
  • rocksdb writecf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 45%
  • rocksdb lockcf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 2.5% (最小 128 MB)
  • raftdb defaultcf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 2.5% (最小 128 MB)

多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数:

readpool:
  coprocessor:
    # Notice: if CPU_NUM > 8, default thread pool size for coprocessors
    # will be set to CPU_NUM * 0.8.
    # high-concurrency: 8
    # normal-concurrency: 8
    # low-concurrency: 8
  • 推荐设置:实例数*参数值 = CPU 核数 * 0.8。

如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 conf/tikv.yml 中的 capacity 参数:

  • capacity = 磁盘总容量 / TiKV 实例数量,例如 “100GB”

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

yum install -y fontconfig open-sans-fonts

你可能感兴趣的:(DataBase,TiDB)