CentOS 装 TiDB

TiDB Ansible 部署方案

Ansible 是一款自动化运维工具,TiDB-Ansible 是 PingCAP 基于 Ansible playbook 功能编写的集群部署工具。使用 TiDB-Ansible 可以快速部署一个完整的 TiDB 集群。

一.中控机:用于下载tidb并自动布署出整个集群,中控机不在集群中,安装centos 7最小安装

1.以 root 用户登录中控机
[root@tidb ~]# yum -y install epel-release git curl sshpass
[root@tidb ~]# yum -y install python-pip

2.在中控机上创建 tidb 用户,并生成 ssh key,用于实现集群机器免密码登陆
[root@tidb ~]# useradd -m -d /home/tidb tidb
[root@tidb ~]# passwd tidb

3.配置 tidb 用户 sudo 免密码,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾即可。
[root@tidb ~]# visudo
 tidb ALL=(ALL) NOPASSWD: ALL

4.从 root 用户切换到 tidb 用户下,创建 tidb 用户 ssh key, 提示 Enter passphrase 时直接回车即可。执行成功后,ssh 私钥文件为 /home/tidb/.ssh/id_rsa, ssh 公钥文件为 /home/tidb/.ssh/id_rsa.pub
[root@tidb ~]# su - tidb
[user@tidb ~]$ ssh-keygen -t rsa
..
Enter passphrase (empty for no passphrase):   //直接回车
Enter same passphrase again:                  //直接回车
...
+---[RSA 2048]----+
|=+o+.o.          |
|o=o+o.oo         |
| .O.=.=          |
| . B.B +         |
|o B * B S        |
| * + * +         |
|  o + .          |
| o  E+ .         |
|o   ..+o.        |
+----[SHA256]-----+

4.在中控机器上下载 TiDB-Ansible
以 tidb 用户登录中控机并进入 /home/tidb 目录。下载 2.0 GA 版本:
[user@tidb ~]$ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git
注:请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不要下载到 /root 下,否则会遇到权限问题。

5.在中控机器上安装 Ansible 及其依赖
[user@tidb ~]$ cd /home/tidb/tidb-ansible
[user@tidb ~]$ sudo pip install -r ./requirements.txt
[user@tidb ~]$ ansible --version
    ansible 2.5.0

6.在中控机上配置部署机器 ssh 互信及 sudo 规则
以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下。
[user@tidb ~]$ cd /home/tidb/tidb-ansible
[user@tidb ~]$ vi hosts.ini
 [servers]
 172.16.10.1
 172.16.10.2
 172.16.10.3
 172.16.10.4
 172.16.10.5
 172.16.10.6

[all:vars]
 username = tidb
 ntp_server = pool.ntp.org

7.执行以下命令,按提示输入部署目标机器 root 用户密码。该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。
[user@tidb ~]$ ansible-playbook -i hosts.ini create_users.yml -u root -k   //记得输入root的密码

8.为集群机器安装NTP服务
[user@tidb ~]$ cd /home/tidb/tidb-ansible
[user@tidb ~]$ ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
注:如果无法执行,也可手动在集群机上按装服务,因自动安装后,ntp服务因冲突,有可以无法启动,还要到每台虚拟机上手动处理

9.分配机器资源,编辑 inventory.ini 文件
9.1.以 tidb 用户登录中控机,inventory.ini 文件路径为 /home/tidb/tidb-ansible/inventory.ini。
9.2.配置集群列表,方便批量部署
[user@tidb ~]$ vi /home/tidb/tidb-ansible/inventory.ini
 [tidb_servers]
 172.16.10.1
 172.16.10.2

 [pd_servers]
 172.16.10.1
 172.16.10.2
 172.16.10.3

 [tikv_servers]
 172.16.10.4
 172.16.10.5
 172.16.10.6

 [monitoring_servers]
 172.16.10.1

 [grafana_servers]
 172.16.10.1

 [monitored_servers]
 172.16.10.1
 172.16.10.2
 172.16.10.3
 172.16.10.4
 172.16.10.5
 172.16.10.6
9.3.部署目录调整,还是在inventory.ini文件里面,部署目录通过 deploy_dir 变量控制,默认全局变量已设置为 /home/tidb/deploy,对所有服务生效。如为某一服务单独设置部署目录,可在配置服务主机列表时配置主机变量,以 TiKV 节点为例,其他服务类推,请务必添加第一列别名,以免服务混布时混淆。
 ## Global variables
 [all:vars]
 deploy_dir = /data1/deploy     //也可直接设成这样,所有机器都会默认把数据放到这里,因tikv是挂载了data1,相当于放天扩展盘上
 TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy
 TiKV1-2 ansible_host=172.16.10.5 deploy_dir=/data1/deploy
 TiKV1-3 ansible_host=172.16.10.6 deploy_dir=/data1/deploy

9.4.部署时用户名:确认 tidb-ansible/inventory.ini 文件中 ansible_user = tidb,本例使用 tidb 用户作为服务运行用户,ansible_user 不要设置成 root 用户,tidb-ansbile 限制了服务以普通用户运行。
 ## Connection
 # ssh via normal user
 ansible_user = tidb

10.开始自动部署:使用tidb帐号登录
10.1.执行以下命令如果所有 server 返回 tidb 表示 ssh 互信配置成功。
[root@tidb ~]# su - tidb
[user@tidb ~]$ ansible -i inventory.ini all -m shell -a 'whoami'
10.2.执行以下命令如果所有 server 返回 root 表示 tidb 用户 sudo 免密码配置成功。
[user@tidb ~]$ ansible -i inventory.ini all -m shell -a 'whoami' -b

10.3.执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机:
[user@tidb ~]$ ansible-playbook local_prepare.yml
10.4.初始化系统环境,修改内核参数
[user@tidb ~]$ ansible-playbook bootstrap.yml

10.5.部署 TiDB 集群软件
[user@tidb ~]$ ansible-playbook deploy.yml
10.6.启动 TiDB 集群
ansible-playbook start.yml

11.测试集群
通过浏览器访问监控平台。
地址:http://172.16.10.1:3000 默认帐号密码是:admin/admin

注:安装时的报错处理
提示:Ansible FAILED! => playbook: bootstrap.yml; TASK: check_system_optional : Preflight check - Check TiDB server's CPU; message: {"changed": false, "msg": "This machine does not have sufficient CPU to run TiDB, at least 8 cores."}
处理方法:

vim  bootstrap.yml  修改该文件 并注释掉以下的内容
- name: check system
  hosts: all
  any_errors_fatal: true
  roles:
    - check_system_necessary
#    - { role: check_system_optional, when: not dev_mode }   这里注销掉

如果是非SSD 测试的话 ,最好将如下的内容注释掉 
- name: tikv_servers machine benchmark
  hosts: tikv_servers
  gather_facts: false
  roles:
#    - { role: machine_benchmark, when: not dev_mode }   这里注销掉


提示:Ansible FAILED! => playbook: deploy.yml; TASK: check_system_dynamic : Preflight check - NTP service; message: {"changed": false, "msg": "Make sure NTP service is running and ntpstat is synchronised to NTP server. See https://github.com/pingcap/docs/blob/master/op-guide/ansible-deployment.md#how-to-check-whether-the-ntp-service-is-normal ."}
处理方法:
Centos7 默认有个chronyd服务设置为开机自启动,这个服务导致ntp无法开启自启动
systemctl status chronyd              //查看服务
systemctl disable chronyd.service     //开启的话关掉它
systemctl enable ntpd.service         //把NTP 开机自启动 
ntpstat                               //查看ntp状态

提示:Ansible FAILED! => playbook: deploy.yml; TASK: check_system_dynamic : Preflight check - Check swap; message: {"changed": false, "msg": "Swap is on, for best performance, turn swap off"}
处理方法:
free -m    //查询 SWAP 分区设置
cat /etc/fstab   //查看交互分区
swapoff /mnt/swap   //交换区可能有些不一样

二.集群机器:集群先安装一台centos 7最小安装,设置后用虚拟机复制出多台

NameHost    IP    Services
node1    172.16.10.1    PD1, TiDB1
node2    172.16.10.2    PD2, TiDB2
node3    172.16.10.3    PD3
node4    172.16.10.4    TiKV1
node5    172.16.10.5    TiKV2
node6    172.16.10.6    TiKV3

集群虚拟机设置工作

所有工作在root权限下进行
1.配hostName主机名.
[root@tidb ~]# hostnamectl set-hostname xx主机名xx     //永久性的修改主机名称,重启后能保持修改后的。

2.配IP地址
2.1.centos 7?没有ipconfig?改为? ip addr
[root@tidb ~]# ip addr

2.2.默认ipv6需自已配合下静态IP

[root@tidb ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0     //(每个人不一样,自已查)

 TYPE=Ethernet

 BOOTPROTO=static

 #配置静态IP,网关,子网掩码

 IPADDR=192.168.0.88

 NETMASK=255.255.255.0

 GATEWAY=192.168.0.1

 #取消networkmanager 管理

 NM_CONTROLLED=no

 #启用IPV4

 DEFROUTE=yes

 PEERDNS=yes
 PEERROUTES=yes

 IPV4_FAILURE_FATAL=no

 NAME=eth0

 UUID=ed246b2b-cc49-4785-a675-feebf70440e7 //(每个网卡不一样,如果是虚拟机复制的话,用[root@tidb ~]# uuidgen ens33 命令生成一个新的uuid并填入)

 DEVICE=eth0

 ONBOOT=yes

 #指定DNS

 DNS1=8.8.8.8

DNS2=202.96.128.166

2.3.重启网络配置,使新IP生效
[root@tidb ~]# service network restart

3.安装NTP同步服务器时间
3.1.在 CentOS 7 系统上执行以下命令,可手工安装 NTP 服务:
[root@tidb ~]# sudo yum install ntp ntpdate
[root@tidb ~]# sudo systemctl start ntpd.service
[root@tidb ~]# sudo systemctl enable ntpd.service

3.2.执行以下命令输出 running 表示 NTP 服务正在运行:
[root@tidb ~]#  sudo systemctl status ntpd.service
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago

3.3.使用以下命令可使 NTP 服务尽快开始同步,pool.ntp.org 可替换为你的 NTP server:
[root@tidb ~]# sudo systemctl stop ntpd.service
[root@tidb ~]# sudo ntpdate pool.ntp.org
[root@tidb ~]# sudo systemctl start ntpd.service

注:安装错误时处理
[root@tidb ~]# su - root
[root@tidb ~]# yum clean all
[root@tidb ~]# yum distro-sync
[root@tidb ~]# yum update
不行的话,再试一下
[root@tidb ~]# yum install yum-utils
[root@tidb ~]# package-cleanup --dupes
[root@tidb ~]# package-cleanup --cleandupes

3.4.Centos7 默认有个chronyd服务设置为开机自启动,这个服务导致ntp无法开启自启动
[root@tidb ~]# systemctl status chronyd              //查看服务
[root@tidb ~]# systemctl disable chronyd.service     //开启的话关掉它
[root@tidb ~]# systemctl enable ntpd.service         //把NTP 开机自启动 
ntpstat                               //查看ntp状态

4.手工配置 ssh 互信及 sudo 免密码
4.1.设置帐号
[root@tidb ~]# useradd tidb
[root@tidb ~]# passwd tidb
4.2.执行以下命令,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾,即配置好 sudo 免密码。
[root@tidb ~]# visudo
 tidb ALL=(ALL) NOPASSWD: ALL

4.3.中控机与集群机进行互信,以 tidb 用户登录到中控机,执行以下命令
[tidb@中控机 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.10.1
[tidb@中控机 ~]$ ssh 172.16.10.1   //不需要输入密码并登录成功,表示 ssh 互信配置成功。

5.关闭swap分区
[root@tidb ~]# free -m    //查询 SWAP 分区设置
[root@tidb ~]# cat /etc/fstab   //查看交互分区
[root@tidb ~]# swapoff /mnt/swap   //交换区可能有些不一样
[root@tidb ~]# vi /etc/fstab   //查看交互分区
 # /dev/mapper/centos-swap swap                    swap    defaults        0 0    //关掉交换分区

6.将linux集群虚拟机进行复制,复制出多台机器出来,修改IP地址及HostName,用于存储的三个机器需挂载存储盘

7.在部署目标机器上添加数据盘 ext4 文件系统挂载参数(只针对TiKV)
7.1.部署目标机器数据盘请格式化成 ext4 文件系统,挂载时请添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 Ansible 安装时检测无法通过,noatime 是可选建议参数。
# fdisk -l   //查看数据盘
# parted -s -a optimal /dev/硬盘名 mklabel gpt -- mkpart primary ext4 1 -1  //硬盘名为 fdisk 查出的存储盘,因各人不同
# mkfs.ext4 /dev/硬盘名

7.2.查看数据盘分区 UUID
# lsblk -f
NAME    FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1  ext4         237b634b-a565-477b-8371-6dff0c41f5ab /boot
├─sda2  swap         f414c5c0-f823-4bb1-8fdf-e531173a72ed
硬盘名 ext4         c51eb23b-195c-4061-92a9-3fad812cc12f

7.3.编辑 /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)

你可能感兴趣的:(数据库)