TIDB集群安装部署方案————————下篇

===================  下面进入真正的实施部署阶段了===

 

概述

Ansible 是一款自动化运维工具,TiDB-Ansible PingCAP 基于 Ansible playbook 功能编写的集群部署工具。使用 TiDB-Ansible 可以快速部署一个完整的 TiDB 集群(包括 PDTiDBTiKV 和集群监控模块)

 

本部署工具可以通过配置文件设置集群拓扑,一键完成以下各项运维工作:

 

 

初始化操作系统,包括创建部署用户、设置 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 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVSHAProxy 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实例,且与 TiDBPD 模块不位于同一主机,详见部署建议。

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切换到495051三台虚拟机上,进行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: 销毁集群

 

posted @ 2018-07-14 18:13  叶海无崖  阅读(2055)  评论(0编辑  收藏  举报