TiDB Ansible方式部署集群

一.在控制机上安装系统依赖包
1. 以root 用户进行登录
CentS 7 系统 执行
yum -y install epel-release git curl sshpass && \
yum -y install python2-pip
Ubuntu 执行
apt-get -y install git curl sshpass python-pip
 
二.在控制机上创建tidb用户并 生成ssh key
1. 以 root 用户 登录控制机 并创建用户
useradd  -m -d /home/tidb tidb
2. 设置tidb 用户密码
passwd tidb
3. 配置 tidb 用户 sudo 免密码
visudo
 
# 然后在最后一行加上
tidb ALL=(ALL) NOPASSWD: ALL
4. 生产 SSH key
#  执行 su 命令,从 root 用户切换到 tidb 用户下。
su - tidb
ssh-keygen -t rsa
 
# 提示 Enter passphrase 时直接回车即可。执行成功后,
# SSH 私钥文件为 /home/tidb/.ssh/id_rsa,SSH 公钥文件为 /home/tidb/.ssh/id_rsa.pub。
 
三. 在控制机上下载TIDB ansible
1. 以 tidb 用户登录中控机并进入 /home/tidb 目录, 必须要在该目录 不然可能会出现无权限的问题。使用以下命令从 TiDB Ansible 项目上下载 TiDB Ansible 4.0 相应 TAG 版本,默认的文件夹名称为 tidb-ansible。
git clone -b $tag https://github.com/pingcap/tidb-ansible.git
 
#  $tag 就是对应的版本号
 
四.在控制机上安装TIDB ansible及依赖
1. 以tidb 用户登录 控制机 在控制机上安装 TIDB ansible及依赖
cd /home/tidb/tidb-ansible && \
sudo pip install -r ./requirements.txt
2. 查看 ansible 版本
ansible --version
 
ansible 2.7.11
 
五.在控制机上配置 部署机器SSH互信
1.以 tidb 用户登录控制器机 然后将需要部署的机器IP添加到 hosts.ini 文件的 [servers] 区块下
cd /home/tidb/tidb-ansible && \
vi hosts.ini
[servers]
172.16.5.52
172.16.4.29
172.16.4.56
172.16.4.30
172.16.4.224
172.16.5.208
 
[all:vars]
username = tidb
ntp_server = pool.ntp.org
2. 执行下面命令 将 需要部署的目标机器上 创建tidb 用户 并配置互信和sudo规则
ansible-playbook -i hosts.ini create_users.yml -u root -k
3. 手工互信方法
1. 以root 用户登录依次登录到目标机器中 创建 tidb 用户
    useradd tidb && \
    passwd tidb
2.配置sudo 免密码
    执行 visudo 在最后一行输入 tidb ALL=(ALL) NOPASSWD: ALL
3. 在以 root 用户登录 控制机 部署互信
    ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.5.52
    # IP 需要修改为你的目标机器IP地址
4. 通过ssh 链接进行测试
 
六.在目标机器上安装ntp服务
1. 以 tidb 用户 登录控制机 执行一下命令 将目标机器上部署 ntp服务
cd /home/tidb/tidb-ansible && \
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
2. 执行下面命令, 检测 ntp 服务是否正常运行
1. sudo systemctl status ntpd.service
# 如果输出runing 表示正常运行
2. ntpstat
# 如果输出 synchronised to NTP server  表示正常同步
 
七.在目标机器上配置CPUfrep 调解模式
1. 执行 cpupower 命令 查看系统支持模式
1. cpupower frequency-info --governors
    analyzing CPU 0:
      available cpufreq governors: performance powersave
    # 如果返回 Not Available 则直接跳过 第七步
2. cpupower frequency-info --policy
    analyzing CPU 0:
      current policy: frequency should be within 1.20 GHz and 3.20 GHz.
                      The governor "powersave" may decide which speed to use
                      within this range.
3. 修改 模式
cpupower frequency-set --governor performance
2. 也可以在控制机器上批量修改, 前提是 目标前期满足 七.1.1 的条件
ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b
 
八.在目标机器上添加磁盘
使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 Ansible 安装时检测无法通过;noatime 是可选建议参数。
注意:
如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。 以 /dev/nvme0n1 数据盘为例,具体操作步骤如下:
1. 查看数据盘
fdisk -l
 
Disk /dev/nvme0n1: 1000 GB # 如果没有这个直接跳过第八步
2. 创建分区表
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
3.格式化文件系统
mkfs.ext4 /dev/nvme0n1p1
4.查看数据盘分区uuid
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
└─nvme0n1p1 ext4         c51eb23b-195c-4061-92a9-3fad812cc12f
5.编辑/etc/fstab, 添加nodelalloc 挂载参数
vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
6.挂载数据盘
mkdir /data1 && \
mount -a
7. 执行mount -t ext4 返回参数中包含 mount -t ext4 表示 已经生效
mount -t ext4
/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
 
九.编辑 inventory.ini 文件,分配机器资源
  • 至少需部署 3 个 TiKV 实例。
  • 不要将 TiKV 实例与 TiDB 或 PD 实例混合部署在同一台机器上。
  • 将第一台 TiDB 机器同时用作监控机。
请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认的 22 端口,
需添加 ansible_port 变量,如 TiDB1 ansible_host=172.16.10.1 ansible_port=5555
如果是 ARM 架构的机器,需要将 cpu_architecture 改为 arm64。
1. 编辑 /tidb-tidb-ansible/inventory.ini文件, 我的是按照单机多实例进行配置的
Name
Host 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-1, TiKV1-2
node5
172.16.10.5
TiKV2-1, TiKV2-2
node6
172.16.10.6
TiKV3-1, TiKV3-2
[tidb@CentOS76_VM tidb-ansible]$ vim inventory.ini 
## TiDB Cluster Part
[tidb_servers]
172.16.5.52
172.16.4.29
 
[tikv_servers]
TiKV1-1 ansible_host=172.16.4.30 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv1"
TiKV1-2 ansible_host=172.16.4.30 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv1"
TiKV2-1 ansible_host=172.16.4.224 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv2"
TiKV2-2 ansible_host=172.16.4.224 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv2"
TiKV3-1 ansible_host=172.16.5.208 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv3"
TiKV3-2 ansible_host=172.16.5.208 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv3"
 
[pd_servers]
172.16.5.52
172.16.4.29
172.16.4.56
 
[spark_master]
[spark_slaves]
 
[lightning_server]
 
[importer_server]
 
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
172.16.5.52
 
[grafana_servers]
172.16.5.52
 
# node_exporter and blackbox_exporter servers
[monitored_servers]
172.16.5.52
172.16.4.29
172.16.4.56
172.16.4.30
172.16.4.224
172.16.5.208
 
[alertmanager_servers]
 
[kafka_exporter_servers]
 
## Binlog Part
[pump_servers]
 
[drainer_servers]
 
## For TiFlash Part, please contact us for beta-testing and user manual
[tiflash_servers]
 
## Group variables
# 注意:为使 TiKV 的 labels 设置生效,部署集群时必须设置 PD 的 location_labels 参数。
[pd_servers:vars]
location_labels = ["host"]

 

2. 参数调整注意事项
1.多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 block-cache-size 下面的 capacity 参数:
    storage:
      block-cache:
        capacity: "1GB"
        TiKV 实例数量指每个服务器上 TiKV 的进程数量。
        推荐设置:capacity = MEM_TOTAL * 0.5 / TiKV 实例数量
2.多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数:
    readpool:
      coprocessor:
        # Notice: if CPU_NUM > 8, default thread pool size for coprocessors
        # will be set to CPU_NUM * 0.8.
        # high-concurrency: 8
        # normal-concurrency: 8
        # low-concurrency: 8
        推荐设置:TiKV 实例数量 * 参数值 = CPU 核心数量 * 0.8
3.如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 conf/tikv.yml 中的 capacity 参数:
    raftstore:
      capacity: 0
    推荐配置:capacity = 磁盘总容量 / TiKV 实例数量
    例如:capacity: "100GB"
 
十.inventory.ini 的相关变量
变量
含义
cluster_name
集群名称,可调整
cpu_architecture
CPU 体系架构,默认为 amd64,可选 arm64
tidb_version
TiDB 版本,TiDB Ansible 各分支默认已配置
process_supervision
进程监管方式,默认为 systemd,可选 supervise
timezone
新安装 TiDB 集群第一次启动 bootstrap(初始化)时,将 TiDB 全局默认时区设置为该值。TiDB 使用的时区后续可通过 time_zone 全局变量和 session 变量来修改,参考时区支持。默认为 Asia/Shanghai,可选值参考 timzone 列表
enable_firewalld
开启防火墙,默认不开启,如需开启,请将部署建议-网络要求 中的端口加入白名单
enable_ntpd
检测部署目标机器 NTP 服务,默认为 True,请勿关闭
set_hostname
根据 IP 修改部署目标机器主机名,默认为 False
enable_binlog
是否部署 Pump 并开启 binlog,默认为 False,依赖 Kafka 集群,参见 zookeeper_addrs 变量
zookeeper_addrs
binlog Kafka 集群的 zookeeper 地址
deploy_without_tidb
KV 模式,不部署 TiDB 服务,仅部署 PD、TiKV 及监控服务,请将 inventory.ini 文件中 tidb_servers 主机组 IP 设置为空。
alertmanager_target
可选:如果你已单独部署 alertmanager,可配置该变量,格式:alertmanager_host:alertmanager_port
grafana_admin_user
Grafana 管理员帐号用户名,默认为 admin
grafana_admin_password
Grafana 管理员帐号密码,默认为 admin,用于 Ansible 导入 Dashboard 和创建 API Key,如后期通过 grafana web 修改了密码,请更新此变量
collect_log_recent_hours
采集日志时,采集最近几个小时的日志,默认为 2 小时
enable_bandwidth_limit
在中控机上从部署目标机器拉取诊断数据时,是否限速,默认为 True,与 collect_bandwidth_limit 变量结合使用
collect_bandwidth_limit
在中控机上从部署目标机器拉取诊断数据时限速多少,单位: Kbit/s,默认 10000,即 10Mb/s,如果是单机多 TiKV 实例部署方式,需除以单机实例个数
prometheus_storage_retention
Prometheus 监控数据的保留时间(默认为 30 天);2.1.7、3.0 以及之后的 tidb-ansible 版本中,group_vars/monitoring_servers.yml 文件里新增的配置
 
十一.部署TIDB 集群
ansible-playbook 执行 Playbook 时,默认并发为 5。部署目标机器较多时,
可添加 -f 参数指定并发数,例如 ansible-playbook deploy.yml -f 10
1. 以 tidb 用户登录控制机 在 tidb-ansible/inventory.ini 文件中,确认 ansible_user = tidb
## Connection
# ssh via normal user
ansible_user = tidb
# 因为 TIDB 限制了服务以普通用户运行
 
1. ansible -i inventory.ini all -m shell -a 'whoami'
# 返回tidb 表示互信配置成功
2.ansible -i inventory.ini all -m shell -a 'whoami' -b
# 返回tidb 表示sudo免密配置成功
2.执行 local_prepare.yml playbook,联网下载 TiDB binary 至中控机
ansible-playbook local_prepare.yml
3.初始化环境, 修改内核参数
ansible-playbook bootstrap.yml
4.部署 TIDB 集群
ansible-playbook deploy.yml
5.启动TIDB集群
ansible-playbook start.yml
 
测试集群
TiDB 兼容 MySQL,因此可使用 MySQL 客户端直接连接 TiDB。推荐配置负载均衡以提供统一的 SQL 接口。
1. 使用 MySQL 客户端连接 TiDB 集群。TiDB 服务的默认端口为 4000。
mysql -u root -h 172.16.10.1 -P 4000
2. 通过浏览器访问监控平台。

有道云地址>>

posted @ 2020-07-31 18:00  NzoyX  阅读(428)  评论(0编辑  收藏  举报