=================== 下面进入真正的实施部署阶段了===
概述
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 部署方式。
部署目标机器若干
TiDB 集群主要分为三个组件:
•TiDB Server
TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。 TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。
•PD Server
Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。
PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。
•TiKV Server
TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range (从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region 。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。
建议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 集群所需要的所有文件。
4.下载TiDb-Ansible
在192.168.1.56虚拟机上运行下面合令
su – tidb #使用tidb用户登录中控机
cd /home/tidb
sudo yum -y install git
git clone -b release-2.0 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安装成功
配置设置免密的目标服务器
vi hosts.ini
使用ansible执行免密
ansible-playbook -i hosts.ini create_users.yml -k
ssh 192.168.1.50
sudo -su root
如果在中控机上能够无密码登录,并且登录后可以无密码切换到root。即说明免密设置成功
特别注意中控机本机也要免密,后续将组件安装到中控机时就不用再进行特别的设置了
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服务
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可以查看各服务器当前使用的时间服务器
使用tidb登录中控机,进行规划配置
cd /home/tidb/tidb-ansible
vi inventory.ini
安装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核数不够,如果不是关键问题,可以
直接继续。
vim bootstrap.yml 修改该文件并注释掉以下的内容
# - { role: check_system_optional, when: not dev_mode }
重新执行ansible-playbook bootstrap.yml命令
根据inventory.ini部署集群
执行如下命令:
ansible-playbook deploy.yml
为spark配置JDK
如果使用了TiSpark,那么需要为对应的服务器配置JDK。首先将JDK安装包放到中控机上,然后再传给TiSpark所在的服务器。
如果可以直接传过去,也可以不使用此种方式
执行如下命令:
cd /home/tidb
mkdir software
cd software
转到java官网下载java安装包
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
执行
wget http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz?AuthParam=1528549364_67d5fd9aae08d3e2b1f12a03f7e2b0ea
下载64位的Java sdk
首先在TiKV的服务器上用mkdir创建/opt/jdk目录。然后回到中控机使用scp进行传输
执行如下命令:
49-52 IP虚拟主机都需要进行下面的操作:
ssh 192.168.1.49
su root
mkdir /opt/jdk
exit
exit
scp jdk-8u172-linux-x64.tar.gz root@192.168.1.49:/opt/jdk/
使用root切换到49、50、51三台虚拟机上,进行jdk解压,并进行环境变量配置。以49为例:
ssh 192.168.1.49
su – root
cd /opt/jdk
tar –zxvf jdk-8u172-linux-x64.tar.gz
vi /etc/profile
在文件的最后位置增加JDK配置。
export JAVA_HOME=/opt/jdk/jdk1.8.0_172
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
验证JDK安装是否成功:
source /etc/profile
java -version
su - tidb
java -version
其它两台虚拟机一样操作
使用tidb登录,启动集群
cd /home/tidb/tidb-ansible
ansible-playbook start.yml
出现以下输出,代表停止成功
使用tidb登录,停止集群
cd /home/tidb/tidb-ansible
ansible-playbook stop.yml
通过浏览器访问监控平台
地址:http://192.168.1.56:3000
默认帐号密码是:admin/admin
滚动升级 TiDB 集群组件
ansible-playbook rolling_update.yml
滚动升级 TiDB 监控组件
为满足客户监控组件混布需求,监控组件 systemd service 开始按端口区分。
查看 inventory.ini 文件中 process_supervision 变量:
如果 process_supervision = systemd ,为兼容 v2.0.0-rc.6 之前的版本,你需要执行 migrate_monitor.yml Playbook。如果 process_supervision = supervise ,此步骤不需要执行。
ansible-playbook migrate_monitor.yml
滚动升级 TiDB 监控组件:
ansible-playbook rolling_update_monitor.yml
TIDB各文件说明
ansible.cfg: ansible 配置文件
inventoty.ini: 组和主机的相关配置
conf: TiDB 相关配置模版
group_vars: 相关变量配置
scripts: grafana 监控 json 模版
local_prepare.yml: 用来下载相关安装包
bootstrap.yml: 初始化集群各个节点
deploy.yml: 在各个节点安装 TiDB 相应服务
roles: ansible tasks 的集合
start.yml: 启动所有服务
stop.yml: 停止所有服务
unsafe_cleanup_data.yml: 清除数据
unsafe_cleanup.yml: 销毁集群