一、准備服務器
1.准備三台服務器,配置如下
2.三塊固態硬盤分別做raid0
3.最小化安裝centos7.7系統,配置ip地址和DNS
二、服務器初始化:包括安裝常用命令工具,修改系統時區,校對系統時間,關閉selinux,關閉firewalld,修改主機名,修改系統文件描述符,優化內核參數,優化數據盤掛載參數
1、安裝常用命令工具
yum install vim net-tools bash-completion wget unzip ntp bzip2 epel-release numactl -y
2、修改系統時區,啟動ntp服務
timedatectl set-timezone Asia/Shanghai
ntpdate 192.168.0.205
vim /etc/ntp.conf
server 192.168.0.205
systemctl start ntpd
systemctl enable ntpd
3、關閉selinux
vim /etc/selinux/config
SELINUX=disabled
4、關閉防火牆
systemctl stop firewalld.service
systemctl disable firewalld.service
5、修改主機名
vim /etc/hostname
TiDB-01
6、修改系統文件描述符大小
vim /etc/security/limits.conf
最后添加:
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft memlock unlimited
* hard memlock unlimited
7.優化內核參數
vim /etc/sysctl.conf
最后添加:
vm.max_map_count = 655360
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 10000
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
8.優化數據盤掛載參數,官方推薦 TiKV 部署目標機器的數據目錄使用 EXT4 文件系統格式,所以我們需要格式化兩塊數據盤
使用fdisk -l查看數據盤
Disk /dev/sdb: 1919.7 GB
Disk /dev/sdc: 1919.7 GB
創建分區表
parted -s -a optimal /dev/sdb mklabel gpt -- mkpart primary ext4 1 -1
parted -s -a optimal /dev/sdc mklabel gpt -- mkpart primary ext4 1 -1
格式化文件系統
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdc1
查看數據盤分區 UUID
lsblk -f
編輯 /etc/fstab 文件,添加掛載參數
UUID=dda54ded-acff-47c0-beb9-ea47351e11c8 /data1 ext4 defaults,nodelalloc,noatime 0 2
UUID=013c4145-bb40-4a7e-b467-41c43985dbfd /data2 ext4 defaults,nodelalloc,noatime 0 2
掛載數據盤
mkdir /data1 /data2 && mount -a
執行以下命令,如果文件系統為 ext4,並且掛載參數中包含 nodelalloc,則表示已生效
三、使用官方推薦的TiUP部署TiDB集群
1.在中控機上安裝TiUP組件,中控機可以是部署目標機器中的一台,我這里使用跳板機
在中控機上添加tidb用戶,設置tidb密碼
useradd tidb
passwd tidb
切換到tidb用戶
su - tidb
2.在中控機上安裝TiUP組件
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
3.設置 TiUP 環境變量
source .bash_profile
4.安裝 TiUP cluster 組件
tiup cluster
5.驗證當前 TiUP cluster 版本信息
四、配置初始化參數文件topology.yaml
拓撲信息
vim topology.yaml
# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
deploy_dir: "/tidb-deploy/monitored-9100"
data_dir: "/tidb-data-monitored-9100"
log_dir: "/tidb-deploy/monitored-9100/log"
server_configs:
tikv:
readpool.unified.max-thread-count: 16
readpool.storage.use-unified-pool: true
readpool.coprocessor.use-unified-pool: true
storage.block-cache.capacity: "16GB"
pd:
replication.location-labels: ["host"]
replication.enable-placement-rules: true
pd_servers:
- host: 192.168.0.226
deploy_dir: "/data1/tidb-deploy/pd-2379"
data_dir: "/data1/tidb-data/pd-2379"
log_dir: "/data1/tidb-deploy/pd-2379/log"
- host: 192.168.0.227
deploy_dir: "/data1/tidb-deploy/pd-2379"
data_dir: "/data1/tidb-data/pd-2379"
log_dir: "/data1/tidb-deploy/pd-2379/log"
- host: 192.168.0.228
deploy_dir: "/data1/tidb-deploy/pd-2379"
data_dir: "/data1/tidb-data/pd-2379"
log_dir: "/data1/tidb-deploy/pd-2379/log"
tidb_servers:
- host: 192.168.0.226
- host: 192.168.0.227
- host: 192.168.0.228
tikv_servers:
- host: 192.168.0.226
port: 20160
status_port: 20180
deploy_dir: "/data1/tidb-deploy/tikv-20160"
data_dir: "/data1/tidb-data/tikv-20160"
log_dir: "/data1/tidb-deploy/tikv-20160/log"
numa_node: "0"
config:
server.labels: { host: "tikv1" }
- host: 192.168.0.226
port: 20161
status_port: 20181
deploy_dir: "/data2/tidb-deploy/tikv-20161"
data_dir: "/data2/tidb-data/tikv-20161"
log_dir: "/data2/tidb-deploy/tikv-20161/log"
numa_node: "1"
config:
server.labels: { host: "tikv1" }
- host: 192.168.0.227
port: 20160
status_port: 20180
deploy_dir: "/data1/tidb-deploy/tikv-20160"
data_dir: "/data1/tidb-data/tikv-20160"
log_dir: "/data1/tidb-deploy/tikv-20160/log"
numa_node: "0"
config:
server.labels: { host: "tikv2" }
- host: 192.168.0.227
port: 20161
status_port: 20181
deploy_dir: "/data2/tidb-deploy/tikv-20161"
data_dir: "/data2/tidb-data/tikv-20161"
log_dir: "/data2/tidb-deploy/tikv-20161/log"
numa_node: "1"
config:
server.labels: { host: "tikv2" }
- host: 192.168.0.228
port: 20160
status_port: 20180
deploy_dir: "/data1/tidb-deploy/tikv-20160"
data_dir: "/data1/tidb-data/tikv-20160"
log_dir: "/data1/tidb-deploy/tikv-20160/log"
numa_node: "0"
config:
server.labels: { host: "tikv3" }
- host: 192.168.0.228
port: 20161
status_port: 20181
deploy_dir: "/data2/tidb-deploy/tikv-20161"
data_dir: "/data2/tidb-data/tikv-20161"
log_dir: "/data2/tidb-deploy/tikv-20161/log"
numa_node: "1"
config:
server.labels: { host: "tikv3" }
monitoring_servers:
- host: 192.168.0.226
grafana_servers:
- host: 192.168.0.226
alertmanager_servers:
- host: 192.168.0.226
五、部署TiDB
1.查看 TiUP 支持管理的 TiDB 版本
tiup list tidb --refresh
2.執行部署命令
tiup cluster deploy tidb-endata v4.0.0-rc.1 ./topology.yaml --user root -i /home/tidb/.ssh/id_rsa
3.檢查 TiUP 管理的集群情況
tiup cluster list
4.檢查部署的 TiDB 集群情況
tiup cluster display tidb-endata
5.啟動集群
tiup cluster start tidb-endata
6.通過 TiUP 檢查集群狀態
tiup cluster display tidb-endata
六、通過 TiDB Dashboard 和 Grafana 檢查集群狀態
通過 {pd-leader-ip}:2379/dashboard 登錄 TiDB Dashboard,登錄用戶和口令為 TiDB 數據庫 root 用戶和口令,如果你修改過數據庫的 root 密碼,則以修改后的密碼為准,默認密碼為 空。
查看 Grafana 監控 Overview 頁面檢查 TiDB 集群狀態
通過 {Grafana-ip}:3000 登錄 Grafana 監控,默認用戶名及密碼為 admin/admin
登錄數據庫執行簡單 DML、DDL 操作和查詢 SQL 語句
mysql -uroot -h192.168.0.79 -P4000 -p
執行如下命令關閉 tidb-endata集群:
tiup cluster stop tidb-endata
七、使用 TiUP 擴容縮容 TiDB 集群
1.擴容TiDB節點,添加 TiKV 和 PD 節點和添加 TiDB 節點的步驟類似。
如果要添加一個 TiDB 節點,IP 地址為 192.168.0.229,可以按照如下步驟進行操作。
1.1 編寫擴容拓撲配置
在 scale-out.yaml 文件添加擴容拓撲配置:
vim scale-out.yaml
tidb_servers:
- host: 192.168.0.229
ssh_port: 22
port: 4000
status_port: 10080
默認情況下,可以不填端口信息。但在單機多實例場景下,你需要分配不同的端口,如果有端口或目錄沖突,會在部署或擴容時提醒。
你可以使用 tiup cluster edit-config <cluster-name> 查看當前集群的整體配置,其中 global 和 server_configs 的全局配置也會在 scale-out.yaml 中生效。
1.2 執行擴容命令
tiup cluster scale-out <cluster-name> scale-out.yaml
預期輸出 Scaled cluster <cluster-name> out successfully 信息,表示擴容操作成功。
1.3 檢查集群狀態
tiup cluster display <cluster-name>
打開瀏覽器訪問監控平台 http://192.168.0.226:3000,監控整個集群和新增節點的狀態。
2.執行縮容操作,下線一個TiKV節點
tiup cluster scale-in <cluster-name> --node 192.168.0.226:20160
其中 --node 參數為需要下線節點的 ID。
預期輸出 Scaled cluster <cluster-name> in successfully 信息,表示縮容操作成功。
3.檢查集群狀態
下線需要一定時間,下線節點的狀態變為 Tombstone 就說明下線成功。
執行如下命令檢查節點是否下線成功:
tiup cluster display <cluster-name>
打開瀏覽器訪問監控平台 http://192.168.0.226:3000,監控整個集群狀態
八、TiDB常用操作命令
1.修改root密碼
SET PASSWORD FOR 'root'@'%' = 'xxxxxxx;
2.可以 kill DML 語句,首先使用 show processlist,找到對應 session 的 id,然后執行 kill tidb [session id]
3.可以 kill DDL 語句,首先使用 admin show ddl jobs,查找需要 kill 的 DDL job ID,然后執行 admin cancel ddl jobs 'job_id' [, 'job_id'] ...
4.創建索引
ALTER TABLE ods_mongo_baidu.SearchIndex ADD INDEX (statis_date);
九、注意事項
使用TiUP部署后在目標服務器上會安裝監控插件,有兩個插件未加入開機自啟,導致服務器重啟后系統監控數據異常,需要加入開機自啟
systemctl enable blackbox_exporter-9115.service
systemctl enable node_exporter-9100.service