对于生产环境,须使用 TiDB-Ansible 部署 TiDB 集群。Ansible 是一款自动化运维工具,TiDB-Ansible 是 PingCAP 基于 Ansible playbook 功能编写的集群部署工具。本文档介绍如何使用 TiDB-Ansible 部署一个完整的 TiDB 集群。
部署中控机一台:
如果你的部署目标机器时间、时区设置一致,已开启 NTP 服务且在正常同步时间,此步骤可忽略。可参考如何检测 NTP 服务是否正常。
# 查看ntp时间状态(是否运行)
sudo systemctl status ntpd.service
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-04-01 15:00:39 CST; 29min ago
Main PID: 3206 (ntpd)
CGroup: /system.slice/ntpd.service
└─3206 /usr/sbin/ntpd -u ntp:ntp -g
# 开启服务
sudo systemctl start ntpd.service
# 开机自启动
sudo systemctl enable ntpd.service
ntpstat
synchronised to NTP server (202.108.6.95) at stratum 3
time correct to within 74 ms
polling server every 128 s
ntpstat
unsynchronised
ntpstat
Unable to talk to NTP daemon. Is it running?
sudo yum install ntp ntpdate
sudo systemctl start ntpd.service
sudo systemctl enable ntpd.service
以 root 用户依次登录到部署目标机器创建 tidb 用户并设置登录密码。
useradd tidb #添加用户
passwd tidb #修改密码
vi sudo #编辑sudo文件
tidb ALL=(ALL) NOPASSWD: ALL #添加用户免密
3、配置ssh免密(登陆到用户TiDB中配置免密)
ssh-keygen -t rsa 执行语句一路回车生成秘钥
ssh-copy-id -i ~/.ssh/id_rsa.pub cdh02 -p 53535 #拷贝公钥到cdh02主机中
ssh-copy-id -i ~/.ssh/id_rsa.pub cdh02 -p 53535 #拷贝公钥到cdh03主机中
4、验证
sudo -su root # 验证sudo免密是否成功
ssh cdh02 -p 53535# 验证ssh免密登陆是否成功
CentOS 7 系统,执行以下命令:
# yum -y install epel-release git curl sshpass
# yum -y install python-pip
以 tidb 用户登录中控机并进入 /home/tidb 目录,下载自己想要安装的版本,以下是版本对照信息:
TiDB 版本 | tidb-ansible tag | 备注 |
---|---|---|
2.0 版本 | v2.0.10、v2.0.11 | 最新 2.0 稳定版本,可用于生产环境。 |
2.1 版本 | v2.1.1 ~ v2.1.6 | 最新 2.1 稳定版本,可用于生产环境(建议)。 |
3.0 版本 | v3.0.0-beta、v3.0.0-beta.1 | 目前是 beta 版本,不建议用于生产环境。 |
latest 版本 | None | 包含最新特性,每日更新,不建议用于生产环境。 |
使用以下命令从 Github TiDB-Ansible 项目上下载 TiDB-Ansible 相应版本,默认的文件夹名称为 tidb-ansible:
注意:部署和升级 TiDB 集群需使用对应的 tidb-ansible 版本,通过改 inventory.ini 文件中的版本来混用可能会产生一些错误
# 登陆到tidb用户下,下载指定 tag 的 tidb-ansible:
git clone -b $tag https://github.com/pingcap/tidb-ansible.git
# 下载 latest 版本对应的 tidb-ansible:
git clone https://github.com/pingcap/tidb-ansible.git
注:请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不能下载到 /root 下,否则会遇到权限问题。
以 tidb用户登录中控机,请务必按以下方式通过 pip 安装 Ansible 及其相关依赖的指定版本,否则会有兼容问题。安装完成后,可通过 ansible --version 查看 Ansible 版本。目前 release-2.0、release-2.1 及 master 版本兼容 Ansible 2.4 及 Ansible 2.5 版本,Ansible 及相关依赖版本记录在 tidb-ansible/requirements.txt 文件中
cd /home/tidb/tidb-ansible # 进入到tidb家目录下
sudo pip install -r ./requirements.txt 使用pip安装
以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下
cd tidb-ansible/ # 进入到安装目录下
vi hosts.ini # 编辑hosts文件,将目标机器加入
执行以下命令,按提示输入部署目标机器 root 用户密码。该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。
ansible-playbook -i hosts.ini create_users.yml -u root -k #自动部署,如果已经手动部署了可以免去这个步骤
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b # 自动在目标机器上安装ntp服务
七、在部署目标机器上配置 CPUfreq 调节器模式
如果返回 “Not Available”,表示当前系统不支持配置 CPUfreq,跳过该步骤即可。
ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -p53535 -b
ansible-playbook -i hosts.ini deploy_ntp.yml -u -p53535 tidb -b
atime 是可选建议参数。如果你的数据盘已经格式化成 ext4 并挂载,可先执行 umount 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。
# umount /dev/nvme0n1
下面以 /dev/nvme0n1 数据盘为例:
查看数据盘
# fdisk -l
Disk /dev/nvme0n1: 1000 GB
创建分区表
# parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
格式化文件系统
# mkfs.ext4 /dev/nvme0n1
查看数据盘分区 UUID,本例中 nvme0n1 的 UUID 为 c51eb23b-195c-4061-92a9-3fad812cc12f。
# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 237b634b-a565-477b-8371-6dff0c41f5ab /boot
├─sda2 swap f414c5c0-f823-4bb1-8fdf-e531173a72ed
└─sda3 ext4 547909c1-398d-4696-94c6-03e43e317b60 /
sr0
nvme0n1 ext4 c51eb23b-195c-4061-92a9-3fad812cc12f
编辑 /etc/fstab 文件,添加 nodelalloc 挂载参数
# vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
挂载数据盘
# mkdir /data1
# mount -a
执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc 表示生效:
# mount -t ext4
/dev/nvme0n1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
以 tidb 用户登录中控机,编辑 inventory.ini 文件添加部署服务器资源,
注: 请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认 22 端口,需添加 ansible_port 变量,如: TiDB1 ansible_host=172.16.10.1 ansible_port = 53535
## TiDB Cluster Part
[tidb_servers]
tidb_servers IP:你的 tidb IP
[tikv_servers]
你分配的 tikv IP1
你分配的 tikv IP2
你分配的 tikv IP3
……
[pd_servers]
你分配的 pd IP
[spark_master]
[spark_slaves]
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
你的主 IP
[grafana_servers]
你的监控界面 IP
# node_exporter and blackbox_exporter servers
[monitored_servers]
你的 IP1
你的 IP2
你的 IP3
……
[alertmanager_servers]
你的主 IP
[kafka_exporter_servers]
## Binlog Part
[pump_servers:children]
tidb_servers
[drainer_servers]
## Group variables
[pd_servers:vars]
# location_labels = ["zone","rack","host"]
## Global variables
[all:vars]
deploy_dir = /home/tidb/deploy #默认的文件夹如果没有需要手动创建
## Connection
# ssh via normal user
ansible_user = tidb
ansible_port = 53535
cluster_name = test-cluster
tidb_version = v2.0.11
# process supervision, [systemd, supervise]
process_supervision = supervise
timezone = Asia/Shanghai
enable_firewalld = False
# check NTP service
enable_ntpd = True
set_hostname = False
## binlog trigger
enable_binlog = False
# zookeeper address of kafka cluster for binlog, example:
# zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181"
zookeeper_addrs = ""
# kafka cluster address for monitoring, example:
# kafka_addrs = "192.168.0.11:9092,192.168.0.12:9092,192.168.0.13:9092"
kafka_addrs = ""
# store slow query log into seperate file
enable_slow_query_log = False
# enable TLS authentication in the TiDB cluster
enable_tls = False
# KV mode
deploy_without_tidb = False
# Optional: Set if you already have a alertmanager server.
# Format: alertmanager_host:alertmanager_port
alertmanager_target = ""
grafana_admin_user = "admin"
grafana_admin_password = "admin"
### Collect diagnosis
collect_log_recent_hours = 2
enable_bandwidth_limit = True
# default: 10Mb/s, unit: Kbit/s
collect_bandwidth_limit = 10000
ansible-playbook 执行 Playbook 时默认并发为 5,部署目标机器较多时可添加 -f 参数指定并发,如 ansible-playbook deploy.yml -f 10
## Connection
# ssh via normal user
ansible_user = 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
# 在/home/tidb/目录下创建deploy文件夹
mkdir deploy
cd deploy
mkdir scripts #创建scripts文件夹 scripts 目录下一般存放启动 关闭的脚本
ansible-playbook local_prepare.yml
ansible-playbook bootstrap.yml # 这一步骤会做系统的硬盘检测,生产环境中必须执行这一步,否则后续会有性能问题
ansible-playbook bootstrap.yml --extra-vars "dev_mode=True" # 如果只是搭建伪生产环境,可以跳过硬盘检测,直接执行这一句即可
Congrats! All goes well. :-) # 返回这个信息即为成功
ansible-playbook deploy.yml # 一般情况下这一步不需要自己创建文件夹,如果有需要可以自己创建
ansible-playbook start.yml
测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口。使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口。
mysql -u root -h 你的监控界面 IP -P 4000
地址:http://IP 默认帐号密码是:admin/admin
至此,TIDB 正式环境搭建完成 :)
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43129750/article/details/103235351
内容来源于网络,如有侵权,请联系作者删除!