欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Ansible离线安装TIDB

程序员文章站 2022-07-13 09:14:35
...

使用Ansible离线安装TIDB

这片文章不会说明TIDB是干嘛的,只是纯粹说明怎么在离线环境下安装TIDB,毕竟线上的环境大部分都是不能联网的。(仅测试使用)参照官方步骤!

主机规划与分类

在规划之前首先要准备实验环境,在官方的文档中给出了一些部署建议,这里给出链接地址:TIDB部署建议。因为这里是测试环境,对于官方文档的建议好多不能满足,这里仅先满足测试用的OS是centos7.3及以上即可。

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[[email protected] ~]#

TIDB的整个分布式集群需要三个主要组件:TIDB serversTIKVTIPD。另外还需要一个监控服务器,来监控TIDB集群的状态。
这里我们使用5台服务器,来搭建这个TIDB集群,5台服务器的分配如下:

服务器列表 tidb_servers tikv_servers pd_servers monitoring_servers
10.0.102.209
10.0.102.210
10.0.102.212
10.0.102.102
10.0.102.162

整个服务器的规划如上,下面我们**开始安装TIDB。

安装TIDB

因为ITDB的官方文档很详细了,但是就是在参照的时候比较跳转页面,因此这里特总结一下,以便查看。

在中控机上离线安装ansible

这里我们选择209这台服务器作为中控机。

首先安装依赖包,依赖包下载地址,下载完成之后安装依赖包。

# tar -xzvf ansible-system-rpms.el7.tar.gz
# cd ansible-system-rpms.el7
# chmod u+x install_ansible_system_rpms.sh
# ./install_ansible_system_rpms.sh

安装完成之后可以使用pip检测是否安装成功:

[[email protected] ~]# pip -V
pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)
[[email protected] ~]# 

如果你的系统已安装 pip,请确认版本 >= 8.1.2,否则离线安装 ansible 及其依赖时,会有兼容问题。

在中控机创建tidb用户,并且生成**

在中控机上创建tidb用户,并且配置sudo无密码认证,生成tidb用户的**
创建tidb用户

 useradd -m -d /home/tidb tidb

设置tidb用户的密码

# passwd tidb

设置tidb的sudo

# visudo
tidb ALL=(ALL) NOPASSWD: ALL

切换到tidb用户,然后生成tidb用户的**

# su - tidb
$ ssh-******    
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]-----+

验证sudo的设置

[[email protected] ~]$ whoami 
tidb
[[email protected] ~]$ sudo su 
[[email protected] tidb]# whoami
root
[[email protected] tidb]# 

在中控机中离线安装ansible

在tidb用户下安装ansible
下载离线安装包: ansible2.5离线安装包,安装包的版本需要为2.5
安装ansible

[[email protected] ~]$ tar zxvf ansible-2.5.0-pip.tar.gz 
[[email protected] ~]$ cd ansible-2.5.0-pip
[[email protected] ansible-2.5.0-pip]$ ls
ansible_offline_packages  install_ansible.sh  requirements.txt
[[email protected] ~]$ cd ansible-2.5.0-pip
[[email protected] ansible-2.5.0-pip]$ ls
ansible_offline_packages  install_ansible.sh  requirements.txt
[[email protected] ~]$ cd ansible-2.5.0-pip
[[email protected] ansible-2.5.0-pip]$ ls
ansible_offline_packages  install_ansible.sh  requirements.txt

下载tidb-ansible以及tidb安装包

tidb-ansible可以直接下载也可以使用git直接下载,这里给出直接下载的地址: tidb-ansbiel下载,当然也可以使用git下载

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

接下来安装官方文档要执行如下命令:

cd tidb-ansible
ansible-playbook local_prepare.yml

这个playbook的主要任务是下载安装包然后放到合适的位置,但是若是因为某些情况中控机不能联网,那么就需要从别的地方拷贝了,这是可以把对应的安装拷贝到test-ansible下面的downloads目录和resource目录下面,如下
使用Ansible离线安装TIDB tidb-ansible的下载包以及这一步所需的安装包会在后面给出,这样就可以不用再执行这一步了。
这时候tidb-ansible目录中已经包含了tidb的安装包以及一些启动脚本,我们这个目录整个拷贝到tidb用户的家目录下面,注意更改权限为tidb。

在中控机上配置部署机器 ssh 互信及 sudo 规则

中控机我们已经配置了sudo规则,但是没有配置ssh互信。用tidb用户登录中控机,然后修改hosts.ini文件,这个文件制定了ansbile命令作用到的主机。

[[email protected] ~]# su - tidb
Last login: Thu Feb 14 23:52:14 CST 2019 on pts/0
[[email protected] ~]$ cd tidb-ansible/
[[email protected] tidb-ansible]$ cat hosts.ini 
[servers]    
10.0.102.209
10.0.102.200
10.0.102.212
10.0.102.102
10.0.102.162

[all:vars]
username = tidb
ntp_server = 172.16.140.20
[[email protected] tidb-ansible]$ 

这个servers包含所有的主机然后执行下面的yml文件;上面的ntp服务若是没有可以注释掉,因为这是测试环境,后面也会注释掉对应ntp服务。

ansible-playbook -i hosts.ini create_users.yml -u root -k

这个yml文件会在指定的主机上创建tidb用户,设置sudo规则,并且配置ssh互信。
在官方文档中,下面有三个步骤,部署ntp服务,配置 CPUfreq 调节器模式,以及挂载ext4系统,我们可以跳过这三个步骤,直接执行下面的步骤。

分配机器资源,编辑 inventory.ini 文件

在文章最开始的时候,我们已经规划了服务器的分配情况,把对应的分配情况写入inventory.ini文件即可。

[[email protected] tidb-ansible]$ cat inventory.ini 
## TiDB Cluster Part
[tidb_servers]
10.0.102.209
10.0.102.200

[tikv_servers]
10.0.102.212
10.0.102.102
10.0.102.162

[pd_servers]
10.0.102.200
10.0.102.209
10.0.102.212

[spark_master]

[spark_slaves]

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

[grafana_servers]
10.0.102.102

# node_exporter and blackbox_exporter servers
[monitored_servers]
10.0.102.209
10.0.102.200
10.0.102.212
10.0.102.102
10.0.102.162

[alertmanager_servers]

[kafka_exporter_servers]

## Binlog Part
[pump_servers:children]
tidb_servers

文件很长,没有全部贴上去,需要修改就是上面的内容,另外要确保 ansible_user 的值为 tidb

部署任务

安装离线字体包

Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖 fontconfig 包及英文字体,如需使用该功能,请下载 font 离线安装包上传至 grafana_servers 机器上安装。该离线包仅支持 CentOS 7 系统,包含 fontconfig 及 open-sans-fonts。

$ tar -xzvf grafana-font-rpms.el7.tar.gz
$ cd grafana-font-rpms.el7
$ chmod u+x install_grafana_font_rpms.sh
$ ./install_grafana_font_rpms.sh

这个操作需要在监控服务器上执行

测试互信与免密码的配置是否成功

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

[[email protected] tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami'
10.0.102.209 | SUCCESS | rc=0 >>
tidb

10.0.102.162 | SUCCESS | rc=0 >>
tidb

10.0.102.102 | SUCCESS | rc=0 >>
tidb

10.0.102.212 | SUCCESS | rc=0 >>
tidb

10.0.102.200 | SUCCESS | rc=0 >>
tidb

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

[[email protected] tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami' -b
10.0.102.209 | SUCCESS | rc=0 >>
root

10.0.102.102 | SUCCESS | rc=0 >>
root

10.0.102.212 | SUCCESS | rc=0 >>
root

10.0.102.162 | SUCCESS | rc=0 >>
root

10.0.102.200 | SUCCESS | rc=0 >>
root

初始化系统环境

这一步因为我们是测试环境,所以要修改一些配置文件,让系统初始化成功。

  1. 第一个注释掉ntp服务,在以下目录注释掉文件中的以下内容
[[email protected] tasks]# pwd
/home/tidb/tidb-ansible/roles/check_system_necessary/tasks
[[email protected] tasks]# cat main.yml
#- name: Preflight check - Set NTP service status
#  shell: ntpstat | grep -w synchronised | wc -l
#  register: ntp_st
#  changed_when: false
#  when: enable_ntpd

#- name: Preflight check - NTP service
#  fail:
#    msg: "Make sure NTP service is running and ntpstat is synchronised to NTP server. See https://github.com/pingcap/docs/blob/master/op-guide/ansible-deployment.md#how-to-check-whether-the-ntp-service-is-normal ."
#  when:
#    - enable_ntpd
#    - ntp_st.stdout|int != 1

另一个ntp也需要注释掉:

[[email protected] tasks]# pwd
/home/tidb/tidb-ansible/roles/check_config_dynamic/tasks
[[email protected] tasks]# cat main.yml 
#- name: Preflight check - Set NTP service status
#  shell: ntpstat | grep -w synchronised | wc -l
#  register: ntp_st
#  changed_when: false
#  when: enable_ntpd

#- name: Preflight check - NTP service
#  fail:
#    msg: "Make sure NTP service is running and ntpstat is synchronised to NTP server. See https://github.com/pingcap/docs/blob/master/op-guide/ansible-deployment.md#how-to-check-whether-the-ntp-service-is-normal ."
#  when:
#    - enable_ntpd
#    - ntp_st.stdout|int != 1

  1. 第二个修改最低配置要求,自带的最低配置要求蛮高的,测试的时候适当修改,这里修改的很低。
[[email protected] defaults]# pwd
/home/tidb/tidb-ansible/roles/check_system_optional/defaults
[[email protected] defaults]# cat main.yml 
---

# CPU
tidb_min_cpu: 2
tikv_min_cpu: 2
pd_min_cpu: 2
monitor_min_cpu: 2

# Mem
tidb_min_ram: 1500
tikv_min_ram: 1500
pd_min_ram: 1500
monitor_min_ram: 1500

# Disk
tidb_min_disk: 30000000000
tikv_min_disk: 30000000000
pd_min_disk: 30000000000
monitor_min_disk: 30000000000
[[email protected] defaults]# 

这个文件配置对应服务器需要的最低配置,可以修改

  1. 替换ssd的检测,因为默认是使用ssd环境来初始化,但是若没有ssd环境,则可以不进行ssd检测。这里ssd检测了很多东西,把原来的task文件改名保存,自己写一个,目的是跳过ssd检测。
[[email protected] tasks]# pwd
/home/tidb/tidb-ansible/roles/machine_benchmark/tasks
[[email protected] tasks]# ls
main.yml  main.yml.bak
[[email protected] tasks]# cat main.yml
---
 - name: test disk io
   shell: w
[[email protected] tasks]# 

上面修改完成之后,可以进行系统初始化了:

ansible-playbook bootstrap.yml
.......
TASK [machine_benchmark : test disk io] ****************************************************************************************************************************************************
changed: [10.0.102.212]
changed: [10.0.102.102]
changed: [10.0.102.162]
........

可以看到我们自己写的task任务。只要不报错就说明初始化成功了!

部署tidb集群

ansible-playbook deploy.yml

只要初始化成功了,并且对应的安装包都拷贝了,这一步一般不会出错。

启动tidb集群

ansible-playbook start.yml

这个步骤执行时间可能会有点长,只要不报错,说明集群搭建成功。

测试集群

测试连接,可以使用mysql客户端连接:

[root@test2 ~]# mysql -uroot -h10.0.102.209 -P 4000
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.10-TiDB-v2.0.5 MySQL Community Server (Apache License 2.0)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

查看web监控界面,在浏览器输入对应http://ip:3000