使用Ansible离线安装TIDB

使用Ansible离线安装TIDB

  • 使用Ansible离线安装TIDB
    • 主机规划与分类
    • 安装TIDB
      • 在中控机上离线安装ansible
      • 在中控机创建tidb用户,并且生成密钥
      • 在中控机中离线安装ansible
    • 下载tidb-ansible以及tidb安装包
    • 在中控机上配置部署机器 ssh 互信及 sudo 规则
    • 分配机器资源,编辑 inventory.ini 文件
    • 部署任务
      • 安装离线字体包
      • 测试互信与免密码的配置是否成功
      • 初始化系统环境
      • 部署tidb集群
      • 启动tidb集群
    • 测试集群

使用Ansible离线安装TIDB

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

主机规划与分类

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

[root@docker2 ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[root@docker2 ~]#

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检测是否安装成功:

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

如果你的系统已安装 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-keygen    
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的设置

[tidb@docker5 ~]$ whoami 
tidb
[tidb@docker5 ~]$ sudo su 
[root@docker5 tidb]# whoami
root
[root@docker5 tidb]# 

在中控机中离线安装ansible

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

[tidb@docker5 ~]$ tar zxvf ansible-2.5.0-pip.tar.gz 
[tidb@docker5 ~]$ cd ansible-2.5.0-pip
[tidb@docker5 ansible-2.5.0-pip]$ ls
ansible_offline_packages  install_ansible.sh  requirements.txt
[tidb@docker5 ~]$ cd ansible-2.5.0-pip
[tidb@docker5 ansible-2.5.0-pip]$ ls
ansible_offline_packages  install_ansible.sh  requirements.txt
[tidb@docker5 ~]$ cd ansible-2.5.0-pip
[tidb@docker5 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_第1张图片 tidb-ansible的下载包以及这一步所需的安装包会在后面给出,这样就可以不用再执行这一步了。
这时候tidb-ansible目录中已经包含了tidb的安装包以及一些启动脚本,我们这个目录整个拷贝到tidb用户的家目录下面,注意更改权限为tidb。

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

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

[root@docker5 ~]# su - tidb
Last login: Thu Feb 14 23:52:14 CST 2019 on pts/0
[tidb@docker5 ~]$ cd tidb-ansible/
[tidb@docker5 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
[tidb@docker5 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文件即可。

[tidb@docker5 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 互信配置成功。

[tidb@docker5 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 免密码配置成功。

[tidb@docker5 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服务,在以下目录注释掉文件中的以下内容
[root@docker5 tasks]# pwd
/home/tidb/tidb-ansible/roles/check_system_necessary/tasks
[root@docker5 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也需要注释掉:

[root@docker5 tasks]# pwd
/home/tidb/tidb-ansible/roles/check_config_dynamic/tasks
[root@docker5 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. 第二个修改最低配置要求,自带的最低配置要求蛮高的,测试的时候适当修改,这里修改的很低。
[root@docker5 defaults]# pwd
/home/tidb/tidb-ansible/roles/check_system_optional/defaults
[root@docker5 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
[root@docker5 defaults]# 

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

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

你可能感兴趣的:(使用Ansible离线安装TIDB)