=================== 下面進入真正的實施部署階段了===
概述
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: 銷毀集群
