os: centos 7.4
db: tidb
TiDB 是 PingCAP 公司的 newsql 数据库产品.是 Google Spanner/F1 的具体实现.架构非常好.
TiDB 集群的三个组件(tidb-server、tikv-server、pd-server),具体可以参考公司的文档页面: https://pingcap.com/docs-cn/overview/
生产环境的部署要严格遵守 TiDB 的部署文档。
本文介绍的是 TiDB 基于 ansible 的部署(本地虚拟机再次验证).
ip 规划,6台机器
192.168.56.98 nodepdtidb1
192.168.56.99 nodepdtidb2
192.168.56.100 nodepdtidb3
192.168.56.101 nodetikv1
192.168.56.102 nodetikv2
192.168.56.102 nodetikv3
nodepdtidb1 节点部署 pd tidb 实例
nodepdtidb2 节点部署 pd tidb 实例
nodepdtidb3 节点部署 pd tidb 实例
nodetikv1 节点部署部署一个 tikv 实例
nodetikv2 节点部署部署一个 tikv 实例
nodetikv3 节点部署部署一个 tikv 实例
nodepdtidb1 节点充当 中控机,开通外网访问权限
中控机 os 设置
root 用户登录中控机,安装依赖包
# yum install -y epel-release git curl sshpass python2-pip \
python python-devel fontconfig open-sans-fonts \
ntp ntpdate
# systemctl start ntpd.service;
systemctl enable ntpd.service
root 用户登录中控机,执行以下命令
# groupadd -g 10000 tidb;
useradd -m -d /home/tidb -g tidb tidb;
# passwd tidb
root 用户登录中控机,配置 tidb sudoer
# vi /etc/sudoers
tidb ALL=(ALL:ALL) NOPASSWD:ALL
# su - tidb
$ ssh-keygen -t rsa
中控机下载 TiDB Ansible
下载 tidb-ansible
# su - tidb
$ git clone https://github.com/pingcap/tidb-ansible.git
$ cd /home/tidb/tidb-ansible;
sudo pip install -r ./requirements.txt;
$ ansible --version
ansible 2.7.11
config file = /home/tidb/tidb-ansible/ansible.cfg
configured module search path = [u'/home/tidb/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
中控机配置部署机器 ssh 互信及 sudo 规则
# su - tidb
$ cd /home/tidb/tidb-ansible;
$ vi hosts.ini
[servers]
192.168.56.98
192.168.56.99
192.168.56.100
192.168.56.101
192.168.56.102
192.168.56.102
[all:vars]
username = tidb
ntp_server = pool.ntp.org
配置部署机器 ssh 互信及 sudo 规则
$ ansible-playbook -i hosts.ini create_users.yml -u root -k
当然也可以手工在各个节点创建 ssh ,配置ssh,修改 sudo 规则。
中控机配置部署目标机器上安装 NTP 服务
# su - tidb
$ cd /home/tidb/tidb-ansible;
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b;
部署目标机器上配置 CPUfreq 调节器模式
所有节点都需要设置。
为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式。
查看 CPU 支持的模式
# cpupower frequency-info --governors
如果返回如下,
analyzing CPU 0:
available cpufreq governors: performance powersave
如果返回如下,则跳过这一步骤
analyzing CPU 0:
available cpufreq governors: Not Available
查看当前设置
# cpupower frequency-info --policy
设置为 performance 模式
# cpupower frequency-set --governor performance
批量查看
$ cd /home/tidb/tidb-ansible;
ansible -i hosts.ini all -m shell -a "cpupower frequency-info --governors" -u tidb -b
批量修改
$ cd /home/tidb/tidb-ansible;
ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b
部署目标机器上添加数据盘 ext4 文件系统挂载参数
参考官方文档
分配机器资源
编辑 inventory.ini 文件
# su - tidb
$ cd /home/tidb/tidb-ansible;
$ vi inventory.ini
## TiDB Cluster Part
[tidb_servers]
192.168.56.98
192.168.56.99
192.168.56.100
[tikv_servers]
192.168.56.101
192.168.56.102
192.168.56.103
[pd_servers]
192.168.56.98
192.168.56.99
192.168.56.100
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
192.168.56.99
[grafana_servers]
192.168.56.99
# node_exporter and blackbox_exporter servers
[monitored_servers]
192.168.56.98
192.168.56.99
192.168.56.100
192.168.56.101
192.168.56.102
192.168.56.103
[alertmanager_servers]
192.168.56.99
部署任务
确认配置
确认 tidb-ansible/inventory.ini 文件中 ansible_user = tidb
## Connection
# ssh via normal user
ansible_user = tidb
确认 ssh 互信设置成功
# su - tidb
$ ansible -i inventory.ini all -m shell -a 'whoami'
确认 sudo 免密设置成功
$ ansible -i inventory.ini all -m shell -a 'whoami' -b
执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机
$ ansible-playbook local_prepare.yml
初始化系统环境,修改内核参数
$ ansible-playbook bootstrap.yml
如果有校验出错的,都会报错,如下为内存设置的不够大,提示的错误
TASK [check_system_optional : Preflight check - Check TiDB server's RAM] **************************************************************************
fatal: [192.168.56.99]: FAILED! => changed=false
msg: This machine does not have sufficient RAM to run TiDB, at least 16000 MB.
fatal: [192.168.56.98]: FAILED! => changed=false
msg: This machine does not have sufficient RAM to run TiDB, at least 16000 MB.
fatal: [192.168.56.100]: FAILED! => changed=false
msg: This machine does not have sufficient RAM to run TiDB, at least 16000 MB.
NO MORE HOSTS LEFT ********************************************************************************************************************************
to retry, use: --limit @/home/tidb/tidb-ansible/retry_files/bootstrap.retry
PLAY RECAP ****************************************************************************************************************************************
192.168.56.100 : ok=32 changed=9 unreachable=0 failed=1
192.168.56.101 : ok=32 changed=9 unreachable=0 failed=0
192.168.56.102 : ok=32 changed=9 unreachable=0 failed=0
192.168.56.103 : ok=32 changed=9 unreachable=0 failed=0
192.168.56.98 : ok=32 changed=9 unreachable=0 failed=1
192.168.56.99 : ok=32 changed=9 unreachable=0 failed=1
localhost : ok=7 changed=4 unreachable=0 failed=0
ERROR MESSAGE SUMMARY *****************************************************************************************************************************
[192.168.56.99]: Ansible Failed! ==>
changed=false
msg: This machine does not have sufficient RAM to run TiDB, at least 16000 MB.
[192.168.56.98]: Ansible Failed! ==>
changed=false
msg: This machine does not have sufficient RAM to run TiDB, at least 16000 MB.
[192.168.56.100]: Ansible Failed! ==>
changed=false
msg: This machine does not have sufficient RAM to run TiDB, at least 16000 MB.
Ask TiDB User Group for help:
It seems that you have encountered some problem. Please describe your operation steps and provide error information as much as possible on https://asktug.com (in Chinese) or https://stackoverflow.com/questions/tagged/tidb (in English). We will do our best to help solve your problem. Thanks. :-)
通过之后就可以部署
部署 TiDB 集群软件
$ ansible-playbook deploy.yml
启动 TiDB 集群
$ ansible-playbook start.yml
验证 TiDB 集群
使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口。
$ mysql -u root -h 172.16.10.1 -P 4000
通过浏览器访问监控平台。
地址:http://192.168.56.99:3000 默认帐号密码是:admin/admin
参考:
https://pingcap.com/docs-cn/dev/how-to/deploy/hardware-recommendations/
https://pingcap.com/docs-cn/dev/how-to/deploy/orchestrated/ansible/