小白版本的安裝入門媚朦,歡迎新手來參考??
系統(tǒng)初始化(選擇59作為中控機)
注意:推薦安裝時渴丸,不使用 root 用戶侯嘀,而是使用 tidb 用戶
- 1.檢查系統(tǒng)
# 檢查文件系統(tǒng)
# cat /etc/fstab
/dev/vdb1 /data1 ext4 nodelalloc 0 0
- 2.免密配置
# 生成秘鑰
# useradd tidb
# passwd tidb
# su - tidb
# ssh-keygen -t rsa
# 下載 tidb-ansible master
# git clone https://github.com/pingcap/tidb-ansible.git
# 安裝 ansible 的依賴
# sudo yum -y install epel-release
# sudo yum -y install python-pip curl
# cd tidb-ansible/
# sudo pip install -r ./requirements.txt
# ansible --version
# 使用 tidb-ansible 配置秘鑰
# vi hosts.ini
[servers]
172.16.10.59
172.16.10.60
172.16.10.61
172.16.10.62
[all:vars]
username = tidb
# 按照順序輸入密碼
# ansible-playbook -i hosts.ini create_users.yml -k
注意:這里的互信是看官網(wǎng)的,實際操作是直接在59那臺服務(wù)器生成公鑰谱轨,然后將內(nèi)容復(fù)制到每臺服務(wù)器的 home 目錄下 .ssh/ 下的 authorized_keys 文件內(nèi)戒幔。最后的目標(biāo)是通過中控機可以訪問無秘鑰登錄其他服務(wù)器 tidb 賬戶,每臺服務(wù)器的 tidb 賬戶可以通過 sudo su - root
直接切換到 root 用戶土童,這樣互信就完成了诗茎,下文有檢查互信的方法。
- 3.檢查 ntp 是否正常運行
[tidb@ip-172-16-10-59 tidb-ansible]$ ntpstat
synchronised to NTP server (85.199.214.100) at stratum 2
time correct to within 159 ms
polling server every 1024 s
注意:這個可以在配置文件里面關(guān)閉献汗,主要是為了保證服務(wù)器時間統(tǒng)一敢订,正式服務(wù)器不可關(guān)閉,測試可以罢吃。
安裝配置
- 1.配置 inventory.ini
vim inventory.ini
修改內(nèi)容參考官方
注意:user 改為 tidb 用戶楚午,注意下載的 tidb 的版本
- 2.檢查互信
ansible -i inventory.ini all -m shell -a 'whoami'
ansible -i inventory.ini all -m shell -a 'whoami' -b
- 3.下載 tidb binary
ansible-playbook local_prepare.yml
- 4.初始化系統(tǒng)環(huán)境司光,修改內(nèi)核參數(shù)
ansible-playbook bootstrap.yml
注意
如果這個地方配置沒有通過扯俱,如修改 `/home/tidb/wangjun/tidb-ansible/roles/check_system_optional/defaults/main.yml` 里面的限制邢疙,注意看報錯模塊,一般都是在 roles 文件夾下臀稚,defaults 文件夾下的 yml 文件中是閾值。
為了提高初始化系統(tǒng)環(huán)境的速度蜈出,可以修改 io 測試模塊中秩伞,生成文件的大小,默認(rèn)是10G饮睬。
或者跳過
bootstrap.yml
階段如何跳過磁盤檢測租谈、CPU、內(nèi)存容量檢測
ansible-playbook bootstrap.yml --extra-vars "dev_mode=True"
- 5.安裝
ansible-playbook deploy.yml
- 6.啟動集群
ansible-playbook start.yml
部署完成
注意:
Grafana Dashboard 上的 Report 按鈕可用來生成 PDF 文件捆愁,此功能依賴 fontconfig 包割去。如需使用該功能,登錄 grafana_servers 機器昼丑,用以下命令
sudo yum install fontconfig -y
集群入門使用
- 1.登錄
mysql -uroot -P4000 -h 172.16.10.59
注意:
1.需要接 ip呻逆,不然默認(rèn) socket 接入是有問題的
2.MySQL 命令可以找一個,上傳上去
3.沒有初始化密碼菩帝,注意設(shè)置初始密碼
- 2.監(jiān)控前端
地址:http://172.16.10.59:3000
默認(rèn)帳號密碼是:admin/admin
注意:如果修改了 admin 的密碼咖城,及時修改 inventor.ini 配置文件中的相關(guān)配置。
滾動升級
1.滾動升級呼奢,不影響業(yè)務(wù)運行的話宜雀,最低的配置為:
pd*3 ,tidb*2 ,tikv*3
2.如果集群環(huán)境中有 pump / drainer 服務(wù),請先停止 drainer 后滾動升級 (升級 TiDB 時會升級 pump)
- 自動下載 binary
# 原先的版本
./resources/bin/tidb-server -V
# 刪除原來的安裝包
rm -rf downloads/
# 修改配置
vim inventory.ini
tidb_version = v1.0.2
# 下載
ansible-playbook local_prepare.yml
# 現(xiàn)在的版本
./resources/bin/tidb-server -V
# 滾動升級所有(可指定升級部分)
ansible-playbook rolling_update.yml
# 更新 Prometheus 配置并重啟
ansible-playbook rolling_update_monitor.yml --tags=prometheus
擴(kuò)容
添加一個 tidb
# 添加新 tidb 的 IP
vim inventory.ini
# 初始化新增節(jié)點(多個IP 用逗號隔開握础,--tags=tidb 參數(shù)指定服務(wù)辐董,-l 可以接 ip 或者服務(wù)的別名,為了 單 node 多 tikv 部署的情況使用)
ansible-playbook bootstrap.yml -l 172.16.10.61
# 部署新增節(jié)點
ansible-playbook deploy.yml -l 172.16.10.61
# 啟動新節(jié)點服務(wù)
ansible-playbook start.yml -l 172.16.10.61
# 更新 Prometheus 配置并重啟
ansible-playbook rolling_update_monitor.yml --tags=prometheus
添加一個 pd
這里我們將59服務(wù)器擴(kuò)容 pd
安裝
# 修改 inventory.ini 配置文件
[pd_servers]
172.16.10.59
# 初始化新增節(jié)點
ansible-playbook bootstrap.yml -l 172.16.10.59
# 部署新節(jié)點
ansible-playbook deploy.yml -l 172.16.10.59 --tags=pd
# 注意 這里需要上新增 pd 服務(wù)器中手動修改配置文件
## 修改 vim scripts/run_pd.sh
### 刪除:
--initial-cluster="pd1=http://172.16.10.59:2380,pd2=http://172.16.10.60:2380,pd3=http://172.16.10.61:2380,pd4=http://172.16.10.62:2380" \
### 添加:
--join="http://172.16.10.60:2379" \
### 注意:
1.端口為2379
2.修改 inventory.ini 配置文件時禀综,新加 pd 的 ip 加在最后简烘,因為 run_pd.sh 的腳本中有個name 的屬性,里面的名字是 pd+順序 id 拼接的定枷,如果寫的位置不是最后一個夸研,可能會造成這個屬性沖突。
## 手動啟動
./scripts/start_pd.sh
在中控機上使用 pd-ctl 命令看 member 信息
## 滾動升級依鸥,更新所有其他節(jié)點記錄的pd 信息和相關(guān)腳本
ansible-playbook rolling_update.yml
## 更新 Prometheus 配置并重啟
ansible-playbook rolling_update_monitor.yml --tags=prometheus
刪除59新添的 pd
# 1.使用 pd-ctl 命令查看59的 pd name亥至,并根據(jù) pd name 將其移除pd 集群
./resources/bin/pd-ctl -u http://172.16.10.60:2379 -d member
./resources/bin/pd-ctl -u http://172.16.10.60:2379 -d member delete name pd4
# 2.關(guān)閉59上 pd 的服務(wù)
ansible-playbook stop.yml -l 172.16.10.59 --tags=pd
# 3.注釋掉 inventory.ini 59服務(wù)器的 pd 配置
# 4.滾動更新 prometheus
ansible-playbook rolling_update_monitor.yml --tags=prometheus
縮容
剔除61的 tidb
# 關(guān)閉 61服務(wù)器中的tidb 服務(wù)
ansible-playbook stop.yml -l 172.16.10.61 --tags=tidb
# 注釋 61服務(wù)器
vim inventory.ini
## TiDB Cluster Part
[tidb_servers]
172.16.10.59
172.16.10.60
#172.16.10.61
# 更新 prometheus
ansible-playbook rolling_update_monitor.yml --tags=prometheus
思路:
1.關(guān)閉需要剔除的 tidb 服務(wù)器
2.注釋中控機配置文件中,tidb 模塊中的 ip贱迟,避免中控機啟動集群再次啟動
3.剔除的 tidb 物理文件依然在原服務(wù)器上
剔除61的 tikv
# 中控機使用 pd-ctl 命令遠(yuǎn)程剔除
# pd-ctl 命令尋找
[tidb@ip-172-16-10-59 tidb-ansible]$ sudo find / -name pd-ctl*
/home/tidb/wangjun/tidb-ansible/resources/bin/pd-ctl
/home/tidb/wangjun/tidb-ansible/scripts/pd-ctl.sh
/home/tidb/wangjun/tidb-ansible/roles/ops/templates/pd-ctl.sh.j2
# 1.查看 pd 中需要剔除 tikv 的 store id
./resources/bin/pd-ctl -u "http://172.16.10.61:2379" -d store
# 2.根據(jù) store id 去剔除 tikv
./resources/bin/pd-ctl -u "http://172.16.10.61:2379" -d store delete 5
# 3.關(guān)閉對應(yīng)的 tikv
ansible-playbook stop.yml -l 172.16.10.61 --tags=tikv
# 4.注釋掉 ini 配置文件中的 IP
ansible-playbook rolling_update_monitor.yml --tags=prometheusvim inventory.ini
# 5.更新掉 prometheus
ansible-playbook rolling_update_monitor.yml --tags=prometheus
思路:
1.使用 pd-ctl 找出需要剔除 tikv 的 store 的 id姐扮,并剔除
2.關(guān)閉對應(yīng) tikv 的服務(wù)(單 node 多實例情況下, -l 接 tikv 的別名來關(guān)閉 tikv)
3.注釋中控機配置文件中衣吠,tikv 模塊中的 ip茶敏,避免中控機啟動集群再次啟動
4.剔除的 tikv 物理文件依然在原服務(wù)器上
再次將61的 tikv 添加到集群
# 刪除 tikv 余留的物理文件
ansible-playbook unsafe_cleanup_data.yml -l 172.16.10.61 --tags=tikv
# 發(fā)現(xiàn)未生效,直接物理刪除 data/ 目錄缚俏,不刪除惊搏,無法添加成功
# 按照添加 tidb 的方式贮乳,將 tikv 添加回集群,添加成功
tikv 多實例
# 關(guān)閉集群
ansible-playbook stop.yml
# 銷毀集群
ansible-playbook unsafe_cleanup.yml
# 單機多 tikv 部署
vim inventory.ini
TiKV1-1 ansible_host=172.16.10.60 deploy_dir=/data1/wj_deploy_1 tikv_port=20171 labels="host=tikv1"
TiKV1-2 ansible_host=172.16.10.60 deploy_dir=/data1/wj_deploy_2 tikv_port=20172 labels="host=tikv1"
TiKV2-1 ansible_host=172.16.10.61 deploy_dir=/data1/wj_deploy_1 tikv_port=20171 labels="host=tikv2"
TiKV2-2 ansible_host=172.16.10.61 deploy_dir=/data1/wj_deploy_2 tikv_port=20172 labels="host=tikv2"
TiKV3-1 ansible_host=172.16.10.62 deploy_dir=/data1/wj_deploy_1 tikv_port=20171 labels="host=tikv3"
TiKV3-2 ansible_host=172.16.10.62 deploy_dir=/data1/wj_deploy_2 tikv_port=20172 labels="host=tikv3"
...
[pd_servers:vars]
# location_labels = ["zone","rack","host"]
location_labels = ["host"]
[all:vars]
deploy_dir = /data1/wj_deploy
tidb_version = v2.0.0
# 配置 vim conf/tikv.yml(算法參考官網(wǎng))
## 1.block-cache-size 配置(內(nèi)存)
### 配置 rocksdb defaultcf 下的 block-cache-size
block-cache-size: "1024MB"
### 配置 rocksdb writecf 下的 block-cache-size
block-cache-size: "1280MB"
### 配置 rocksdb lockcf 下的 block-cache-size
block-cache-size: "145MB"
### 配置 raftdb defaultcf 下的 block-cache-size
block-cache-size: "145MB"
## 2.concurrency 配置(CPU)
### 配置 readpool 下的 high-concurrency恬惯、normal-concurrency 和 low-concurrency 三個參數(shù)
high-concurrency: 2
normal-concurrency: 2
low-concurrency: 2
## 3.磁盤配置
### 配置 raftsore 下的 capacity 參數(shù)
capacity: "40G"
# 正常部署即可
tidb-binlog 集群搭建(ansible 部署方式)
- 三組件:
a)binlog 是由 pump 生成向拆,并異步寫入到 kafka;
b)Kafka & ZooKeeper:存儲 pump 推來的日志酪耳,并且給 drainer 讀取
kafka 集群部署
- 參考文件:IP:
https://github.com/pingcap/thirdparty-ops/blob/master/kafka-ansible/zh_cn.md
# 中控機下載 kafka-ansible
git clone https://github.com/pingcap/thirdparty-ops.git
cd kafka-ansible
# 配置 inventory.ini (配置內(nèi)容具體看參考文件)
[zookeeper_servers]
zk1 ansible_host=172.16.10.59 deploy_dir=/home/tidb/wj_zk_deploy myid=1
zk2 ansible_host=172.16.10.60 deploy_dir=/home/tidb/wj_zk_deploy myid=2
zk3 ansible_host=172.16.10.61 deploy_dir=/home/tidb/wj_zk_deploy myid=3
[kafka_servers]
kafka1 ansible_host=172.16.10.59 deploy_dir=/home/tidb/wj_kafka_deploy data_dirs=/data1/kafka_data,/data1/kafka_data_2 kafka_port=9092 id=1
kafka2 ansible_host=172.16.10.60 deploy_dir=/home/tidb/wj_kafka_deploy data_dirs=/data1/kafka_data,/data1/kafka_data_2 kafka_port=9092 id=2
kafka3 ansible_host=172.16.10.61 deploy_dir=/home/tidb/wj_kafka_deploy data_dirs=/data1/kafka_data,/data1/kafka_data_2 kafka_port=9092 id=3
# 開始部署
## 下載需要的包
ansible-playbook -i inventory.ini local_prepare.yml
## 初始化系統(tǒng)環(huán)境浓恳,修改內(nèi)核參數(shù)
ansible-playbook -i inventory.ini bootstrap.yml --extra-vars "dev_mode=True"
## 安裝依賴包
ansible-playbook -i inventory.ini deploy.yml
## 啟動服務(wù)
ansible-playbook -i inventory.ini start.yml
- 遇到的問題:
如果發(fā)現(xiàn) kafka 啟動失敗,日志打印內(nèi)存不足碗暗,可以配置 inventory.ini
中的 kafka_heap_size
大小
kafka監(jiān)控
# 進(jìn)入 tidb-ansible 安裝目錄颈将,修改 inventory.ini 配置
vim inventory.ini
[kafka_exporter_servers]
172.16.10.59
# 更新監(jiān)控
ansible-playbook rolling_update_monitor.yml
ansible 部署 pump
- 1.關(guān)閉 tidb-server
ansible-playbook -i inventory.ini stop.yml --tags=tidb
- 2.配置 inventory.ini
enable_binlog = True
zookeeper_addrs = "172.16.10.59:2181,172.16.10.60:2181,172.16.10.61:2181"
kafka_addrs = "172.16.10.59:9092,172.16.10.60:9092,172.16.10.61:9092"
- 3.更新 tidb 組件
ansible-playbook -i inventory.ini deploy.yml --tags=tidb
- 4.啟動 tidb 組件
ansible-playbook -i inventory.ini start.yml --tags=tidb
部署 drainer
# 1.解壓下載的包
wget http://download.pingcap.org/tidb-binlog-latest-linux-amd64.tar.gz
tar -zxvf tidb-binlog-latest-linux-amd64.tar.gz
cd tidb-binlog-latest-linux-amd64/
# 2.配置配置文件,參考(https://pingcap.com/docs-cn/tools/tidb-binlog-kafka/#tidb-binlog-%E9%83%A8%E7%BD%B2%E6%96%B9%E6%A1%88)
vim drainer.toml
# 3.啟動
./bin/drainer -config drainer.toml &
注意:drainer 下游有兩種:
1.db-type 配置為 mysql言疗,使用流復(fù)制晴圾,傳輸?shù)?mysql 中
2.db-type 配置為 pb,存放到 binlog 日志目錄下
注意2:
經(jīng)過測試噪奄,如果同步有錯誤死姚,比如上游 tidb 創(chuàng)建一個庫下游 mysql 已經(jīng)存在,這樣的話 drainer 會重試5次梗醇,如果不成功,自動跳過撒蟀。
如果是 dml 語句叙谨,為了避免數(shù)據(jù)丟失,會一直重試保屯。
監(jiān)控
# 修改啟動腳本
[tidb@ip-172-16-10-59 tidb-binlog-latest-linux-amd64]$ cat run_drainer.sh
#!/bin/bash
set -e
ulimit -n 1000000
DEPLOY_DIR=/home/tidb/wangjun/tidb-binlog-latest-linux-amd64
cd "${DEPLOY_DIR}" || exit 1
# WARNING: This file was auto-generated. Do not edit!
# All your edit might be overwritten!
exec bin/drainer \
--config=drainer.toml \
--metrics-addr=172.16.10.59:9091 \
# --metrics-interval = 15 \
PbReader工具部署
解析 binlog 的工具
# 注意配置 drainer 的配置文件手负,開啟 pd 模式
# 下載使用
wget http://download.pingcap.org/pb_reader-latest-linux-amd64.tar.gz
tar -zxvf pb_reader-latest-linux-amd64.tar.gz
cd pbReader
bin/pbReader -binlog-file=../data.drainer/binlog-0000000000000000-20180615110715