必备条件1:四台centos7.3版本,此版本最稳定
必备条件2:固定虚拟机ip,在Nginx之负载均衡有介绍
必备条件3:宿主机内存超过32G
在中控机上安装系统依赖包
以 root 用户登录中控机
,执行以下命令:
yum -y install epel-release git curl sshpass
yum -y install python-pip
在中控机上创建 tidb 用户,并生成 ssh key
以 root 用户登录中控机,执行以下命令
创建 tidb 用户
useradd -m -d /home/tidb tidb
设置 tidb 用户密码
passwd tidb
配置 tidb 用户 sudo 免密码,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾即可。
visudo
tidb ALL=(ALL) NOPASSWD: ALL
如图:
添加完毕 :wq保存
执行 su 命令从 root 用户切换到 tidb 用户下,生产ssh key
[root@localhost ~]# su tidb
[tidb@localhost root]$ ls
ls: 无法打开目录.: 权限不够
[tidb@localhost root]$ cd /home/
[tidb@localhost home]$ ls
tidb www wwwlogs wwwroot
[tidb@localhost home]$ cd tidb
[tidb@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tidb/.ssh/id_rsa):
Created directory '/home/tidb/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tidb/.ssh/id_rsa.
Your public key has been saved in /home/tidb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:U+9r/iOhTSGRc0xWMdYx/hBLBDsmYU0EAphLMA3pcHc [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| += o... +O*+O=.|
|. o.* E o+o++.+o|
| + o o o++ o. |
| . . ..+.. ..|
| S ... .|
| . .o |
| +.. |
| . +.. |
| ooo.. |
+----[SHA256]-----+
[tidb@localhost ~]$
以tidb身份进入/home/tidb目录
[tidb@localhost home]$ cd tidb
[tidb@localhost ~]$ git clone https://github.com/pingcap/tidb-ansible.git
正克隆到 'tidb-ansible'...
remote: Enumerating objects: 33, done.
remote: Counting objects: 100% (33/33), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 8961 (delta 15), reused 16 (delta 8), pack-reused 8928
接收对象中: 100% (8961/8961), 2.22 MiB | 594.00 KiB/s, done.
处理 delta 中: 100% (5415/5415), done.
安装 Ansible 及其依赖
[tidb@localhost ~]$ cd tidb-ansible/
[tidb@localhost tidb-ansible]$ sudo pip install -r ./requirements.txt
现在应该是这个样子:
在中控机上配置部署机器 ssh 互信及 sudo 规则
以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下。
[tidb@localhost tidb-ansible]$ vim hosts.ini
[servers]
192.168.2.101
192.168.2.102
192.168.2.103
192.168.2.104
[all:vars]
username = tidb
ntp_server = pool.ntp.org
执行以下命令,按提示输入部署目标机器 root 用户密码。该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。
ansible-playbook -i hosts.ini create_users.yml -u root -k
结果应该是这样:
[tidb@localhost tidb-ansible]$ ansible-playbook -i hosts.ini create_users.yml -u root -k
SSH password:
PLAY [all] *********************************************************************
TASK [create user] *************************************************************
ok: [192.168.2.102]
ok: [192.168.2.101]
ok: [192.168.2.103]
ok: [192.168.2.104]
TASK [set authorized key] ******************************************************
ok: [192.168.2.102]
ok: [192.168.2.103]
ok: [192.168.2.104]
ok: [192.168.2.101]
TASK [update sudoers file] *****************************************************
ok: [192.168.2.102]
ok: [192.168.2.103]
ok: [192.168.2.104]
ok: [192.168.2.101]
PLAY RECAP *********************************************************************
192.168.2.101 : ok=3 changed=0 unreachable=0 failed=0
192.168.2.102 : ok=3 changed=0 unreachable=0 failed=0
192.168.2.103 : ok=3 changed=0 unreachable=0 failed=0
192.168.2.104 : ok=3 changed=0 unreachable=0 failed=0
Congrats! All goes well. :-)
分配机器资源,编辑 inventory.ini 文件
## TiDB Cluster Part
[tidb_servers]
192.168.2.101
[tikv_servers]
192.168.2.102
192.168.2.103
192.168.2.104
[pd_servers]
192.168.2.102
192.168.2.103
192.168.2.104
[spark_master]
[spark_slaves]
[lightning_server]
[importer_server]
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
192.168.2.101
[grafana_servers]
192.168.2.101
# node_exporter and blackbox_exporter servers
[monitored_servers]
192.168.2.101
192.168.2.102
192.168.2.103
192.168.2.104
[alertmanager_servers]
192.168.2.101
标准 TiDB 集群需要 6 台机器:
2 个 TiDB 节点
3 个 PD 节点
3 个 TiKV 节点,第一台 TiDB 机器同时用作监控机
但我们就四台,所以PD和tikv交叉使用,再多我的Mac也承受不起生命之重
执行以下命令如果所有 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
现在应该如图:
执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机:
ansible-playbook local_prepare.yml
如图(这步比较慢,如果怕与服务器断开连接可以再开个窗口使用top命令或者下载screen挂载):
初始化系统环境,修改内核参数
ansible-playbook bootstrap.yml
部署 TiDB 集群软件
ansible-playbook deploy.yml
打开端口3000与4000端口
firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --zone=public --add-port=4000/tcp --permanent
firewall-cmd --reload
启动 TiDB 集群
ansible-playbook start.yml
可能遇到的问题:
在执行部署时,可能会遇到下载缓慢的问题类似:
TASK [local : download other binary] *******************************************
FAILED - RETRYING: download other binary (4 retries left).
FAILED - RETRYING: download other binary (3 retries left).
FAILED - RETRYING: download other binary (2 retries left).
FAILED - RETRYING: download other binary (1 retries left).
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: SSLError: ('The read operation timed out',)
failed: [localhost] (item={u'url': u'https://github.com/prometheus/prometheus/releases/download/v2.2.1/prometheus-2.2.1.linux-amd64.tar.gz', u'version': u'2.2.1', u'name': u'prometheus'}) => {"attempts": 4, "changed": false, "item": {"name": "prometheus", "url": "https://github.com/prometheus/prometheus/releases/download/v2.2.1/prometheus-2.2.1.linux-amd64.tar.gz", "version": "2.2.1"}, "msg": "failed to create temporary content file: ('The read operation timed out',)"}
这个时候不要犹豫,快开启我们程序员的科学上网方式: