https://pingcap.com/docs-cn/op-guide/ansible-deployment/
https://github.com/pingcap/docs-cn/blob/master/op-guide/ansible-deployment.md#如何检测-ntp-服务是否正常
相关准备工作
systemctl stop firewalld.service
systemctl disable firewalld.service
[root@tidb1 tidb-ansible]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.137.161 tidb1
192.168.137.162 tidb2
192.168.137.163 tidb3
192.168.137.164 tidb4
192.168.137.165 tidb5
192.168.137.166 tidb6
配置 ssh
ssh-keygen -t rsa
ssh-copy-id -i root@192.168.137.161
ssh-copy-id -i root@192.168.137.162
ssh-copy-id -i root@192.168.137.163
ssh-copy-id -i root@192.168.137.164
ssh-copy-id -i root@192.168.137.165
ssh-copy-id -i root@192.168.137.166
ssh localhost
ssh tidb1
ssh tidb2
ssh tidb3
ssh tidb4
ssh tidb5
ssh tidb6
scp -rp /etc/hosts tidb2:/etc/
scp -rp /etc/hosts tidb3:/etc/
scp -rp /etc/hosts tidb4:/etc/
scp -rp /etc/hosts tidb5:/etc/
scp -rp /etc/hosts tidb6:/etc/
[root@tidb1 ~]# yum install -y ansible
=================== 下面 进入真正的 实施部署阶段了===
概述
Ansible 是一款自动化运维工具,TiDB-Ansible 是 PingCAP 基于 Ansible playbook 功能编写的集群部署工具。使用 TiDB-Ansible 可以快速部署一个完整的 TiDB 集群(包括 PD、TiDB、TiKV 和集群监控模块)。
本部署工具可以通过配置文件设置集群拓扑,一键完成以下各项运维工作:
初始化操作系统,包括创建部署用户、设置 hostname 等
部署组件
滚动升级,滚动升级时支持模块存活检测
数据清理
环境清理
配置监控模块
准备机器
部署中控机一台:
Python 2.6 或 Python 2.7,安装有 Ansible 2.3 版本或以上版本。
依赖 Python Jinja2 及 MarkupSafe 指定版本模块: pip install Jinja2==2.7.2 MarkupSafe==0.11
可通过 ssh 登录目标机器,支持密码登录或 ssh authorized_key 登录。
中控机可以是部署目标机器中的某一台,该机器需开放外网访问,并且安装 curl 软件包,用于下载 binary。
如使用 Docker 方式部署,依赖详见如何使用 docker 方式部署 TiDB,默认为 binary 部署方式。
部署目标机器若干
建议4台及以上,TiKV 至少3实例,且与 TiDB、PD 模块不位于同一主机,详见部署建议。
Linux 操作系统,x86_64 架构(amd64),内核版本建议 3.10 以上,推荐 CentOS 7.3 及以上版本, 文件系统推荐 ext4(部分内核版本 xfs 文件系统有 bug, 本工具检查到 xfs 文件系统有 bug 会退出)。
机器之间网络互通,防火墙、iptables 等可以在部署验证时关闭,后期开启。
机器的时间、时区设置正确(要求机器时间同步),有 NTP 服务可以同步正确时间, ubuntu 系统需单独安装 ntpstat 软件包,详见如何检测 NTP 服务是否正常。
若使用普通用户作为 Ansible SSH 远程连接用户,该用户需要有 sudo 到 root 权限,或直接使用 root 用户远程连接。
Python 2.6 或 Python 2.7。
如使用 Docker 方式部署,依赖详见如何使用 docker 方式部署 TiDB,默认为 binary 部署方式。
在中控机器上安装配置 Ansible
按照 官方手册 安装 Ansible,推荐使用 Ansible 2.3 及以上版本。 安装完成后,可通过 ansible --version 查看版本。
使用以下命令从 Github TiDB-Ansible 项目 上下载 TiDB-Ansible 相应版本,默认的文件夹名称为 tidb-ansible。该文件夹包含用 TiDB-Ansible 来部署 TiDB 集群所需要的所有文件。
下载 GA 版本:
git clone -b release-1.0 https://github.com/pingcap/tidb-ansible.git
git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git -- 最新版本
如何使用 Ansible 部署 NTP 服务
参照在中控机器上下载 TiDB-Ansible下载 TiDB-Ansible,将你的部署目标机器 IP 添加到 [servers] 区块下,ntp_server 变量的值 pool.ntp.org 可替换为其他 NTP server,在启动 NTP 服务前,系统会 ntpdate 该 NTP server,Ansible 安装的 NTP 服务使用安装包默认 server 列表,见配置文件 cat /etc/ntp.conf 中 server 参数。
$ vi hosts.ini
[servers]
192.168.137.164
192.168.137.165
192.168.137.166
192.168.137.161
192.168.137.162
192.168.137.163
[all:vars]
username = tidb
ntp_server = pool.ntp.org
执行以下命令,按提示输入部署目标机器 root 密码。
$ ansible-playbook -i hosts.ini deploy_ntp.yml -k
[root@tidb1 tidb-ansible]# cat inventory.ini
## TiDB Cluster Part
[tidb_servers]
192.168.137.161
192.168.137.162
[tikv_servers]
192.168.137.164
192.168.137.165
192.168.137.166
[pd_servers]
192.168.137.161
192.168.137.162
192.168.137.163
[spark_master]
192.168.137.164
[spark_slaves]
192.168.137.165
192.168.137.166
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
192.168.137.161
[grafana_servers]
192.168.137.161
# node_exporter servers
[monitored_servers]
192.168.137.161
192.168.137.162
192.168.137.163
192.168.137.164
192.168.137.165
192.168.137.166
## 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
# ssh via root:
ansible_user = root
ansible_become = true
ansible_become_user = tidb
cluster_name = test-cluster
tidb_version = v1.0.8
# deployment methods, [binary, docker]
deployment_method = binary
# 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
machine_benchmark = True
set_hostname = False
## binlog trigger
enable_binlog = False
# zookeeper address of kafka cluster, example:
# zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181"
zookeeper_addrs = ""
# KV mode
deploy_without_tidb = False
使用local_prepare.yml,联网下载 tidb binary 到中控机
ansible-playbook local_prepare.yml
初始话系统环境,修改内核参数
如果服务用户尚未建立,此初始化操作会自动创建该用户
ansible-playbook bootstrap.yml
如果ansible 使用root用户远程连接需要密码,使用 -k 参数 ,执行playbook ,同理:
ansible-playbook bootstrap.yml -k
ansible-playbook bootstrap.yml
如果是非SSD 测试的话 ,最好将如下的内容注释掉
# name: machine benchmark
# hosts: tikv_servers
# gather_facts: false
# roles:
# - { role: machine_benchmark, when: machine_benchmark }
ansible-playbook deploy.yml -k
启动TIDB 集群
ansible-playbook start.yml -k
测试集群
测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口。
使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口。
[root@tidb1 ~]# netstat -anp | grep 4000
tcp6 0 0 :::4000 :::* LISTEN 39591/bin/tidb-serv
tcp6 0 0 192.168.137.161:4000 192.168.137.1:14022 ESTABLISHED 39591/bin/tidb-serv
tcp6 0 0 192.168.137.161:4000 192.168.137.1:14018 ESTABLISHED 39591/bin/tidb-serv
msql -u root -h 192.168.137.161 -P 4000
[root@tidb1 ~]# mysql -h 127.0.0.1 -uroot -P 4000 -D mysql
bash: mysql: command not found.
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
yum install -y mysql-community-client.x86_64
[root@tidb1 ~]# mysql -h 127.0.0.1 -uroot -P 4000
mysql -h 192.168.137.161 -uroot -P 4000
mysql -h 192.168.137.161 -uroot -P 4000 -D mysql
=== 监控 ==
http://192.168.137.161:3000/ 密码:admin/admn
==== 运维
ansible-playbook stop.yml 关闭数据库
=== 销毁集群
ansible-playbook stop.yml 停用集群
ansible-playbook unsafe_cleanup.yml 销毁集群