TiDB 安装相关

                                                                   TiDB 安装小记

官网文档: 

https://docs.pingcap.com/zh/tidb/stable/online-deployment-using-ansible

一、Linux 下安装TiDB中控机

Tispark

1.准备机器 


2.在中控机安装系统依赖包

本次使用192.168.2.2 Linux虚拟机作为中控机,root用户

yum -y install epel-release git curl sshpass

yum -y install python-pip

3.在中控机上创建tidb用户,并生成ssh key

以root用户登录中控机,执行以下命令创建tidb用户

useradd -m -d /home/tidb tidb

设置tidb用户密码

passwd tidb

配置tidb用户 sudo 免密码,将tidb ALL=(ALL) NOPASSWD: ALL添加到文件末尾即可。

vim /etc/sudoers

tidb ALL=(ALL) NOPASSWD: ALL

权限问题使用$\color{red}{:wq!}$保存

生成 ssh key: 执行 su 命令从root 用户切换到 tidb 用户下。

su - tidb

创建 tidb 用户 ssh key, 提示Enter passphrase 时直接回车即可。执行成功后,ssh 私钥文件为 /home/tidb/.ssh/id_rsa, ssh 公钥文件为/home/tidb/.ssh/id_rsa.pub。

ssh-keygen -t rsa


4.在中控机器上下载TiDB-Ansible

以tidb 用户登录中控机并进入 /home/tidb 目录。使用以下命令从 Github TiDB-Ansible 项目上下载TiDB-Ansible 相应分支,默认的文件夹名称为tidb-ansible。

下载2.0 (v2.0.11)版本:

git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git

建议(v4.0.0-rc版本):

git  clone -b v4.0.0-rc https://github.com/pingcap/tidb-ansible.git

注:请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,下载到 /root 下,可能会遇到权限问题。

5.在中控机器上安装 Ansible 及其依赖

以tidb用户登录中控机,请务必按以下方式通过 pip 安装Ansible 及其相关依赖的指定版本,否则会有兼容问题。安装完成后,可通过ansible --versoin查看 Ansible 版本。目前 release-2.0、release-2.1 及 master 版本兼容 Ansible 2.4 及 Ansible 2.5 版本,Ansible 及相关依赖版本记录在 tidb-ansible/requirements.txt 文件中。

cd /home/tidb/tidb-ansible

sudo pip install -r ./requirements.txt

ansible–version

(如果查看版本出错,则切换使用root执行升级):



pip install --upgrade pip

pip install --upgrade setuptools

升级后正常查看版本信息:


6.在中控机上配置部署机器 ssh 互信及 sudo 规则

以 tidb 用户登录中控机,将你的部署目标机器IP 添加到hosts.ini 文件 [servers] 区块下。

查看文件内容:

cd /home/tidb/tidb-ansible/

cat hosts.ini


执行以下命令,按提示输入部署目标机器root用户密码。该步骤将在部署目标机器上创建tidb用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。(输入的密码为目标机器的密码,目标机器密码不同可以分次输入执行命令)

ansible-playbook -i hosts.ini create_users.yml -u root -k

存在节点报错的问题时:


解决:1、重新生成rsa:$\color{red}{ssh-keygen-t rsa }$   (或者检查网络连接与ip地址)

2、vim ~/.ssh/known_hosts,删除对应ip的相关rsa的信息即可


7.在部署目标机器上安装 NTP 服务

该步骤将在部署目标机器上使用系统自带软件源联网安装并启动 NTP 服务,服务使用安装包默认的 NTP server 列表,见配置文件 /etc/ntp.conf 中 server 参数,如果使用默认的 NTP server,你的机器需要连接外网。为了让 NTP 尽快开始同步,启动 NTP 服务前,系统会 ntpdate hosts.ini 文件中的 ntp_server 一次,默认为 pool.ntp.org,也可替换为你的 NTP server。


使用以下命令可使 NTP 服务尽快开始同步

sudo systemctl stop ntpd.service

sudo ntpdate pool.ntp.org

sudo systemctl start ntpd.service

ntpstat

8.在部署目标机器上配置 CPUfreq 调节器模式

为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为performanc模式。

你可以通过 cpupower 命令查看系统支持的调节器模式:

 [tidb@centos7_05 tidb-ansible]$ cpupower frequency-info --governors

analyzing CPU 0:

  available cpufreq governors: performance powersave


本例中系统支持设置 performance 和 powersave 模式。如果返回 “Not Available”,表示当前系统不支持配置 CPUfreq,跳过该步骤即可。

你可以通过cpupower 命令查看系统当前的 CPUfreq 调节器模式:

本例中当前配置是 powersave 模式,你可以通过以下命令设置为 performance 模式。你也可以通过以下命令在部署目标机器上批量设置:

 $ ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b

9.分配机器资源,编辑 inventory.ini 文件

tidb用户登录中控机,inventory.ini 文件路径为/home/tidb/tidb-ansible/inventory.ini。

执行:

标准 TiDB 集群需要 6 台机器:

2 个 TiDB 节点

3 个 PD 节点

3 个 TiKV 节点,第一台 TiDB 机器同时用作监控机

默认情况下,单台机器上只需部署一个 TiKV 实例。如果你的 TiKV 部署机器 CPU 及内存配置是部署建议的两倍或以上,并且拥有两块 SSD 硬盘或单块容量超 2T 的 SSD 硬盘,可以考虑部署两实例,但不建议部署两个以上实例。

单机单 TiKV 实例集群拓扑:

 

部署TiDB Lightning

Lightning :


10.部署目录调整

部署目录通过 deploy_dir 变量控制,默认全局变量已设置为/home/tidb/deploy,对所有服务生效。如数据盘挂载目录为 /data,可设置为 /data/deploy,样例如下:

11.部署任务

ansible-playbook 执行 Playbook 时默认并发为 5,部署目标机器较多时可添加 -f 参数指定并发,如ansible-playbook deploy.yml -f 10

①确认 tidb-ansible/inventory.ini 文件中 ansible_user = tidb,本例使用tidb用户作为服务运行用户,配置如下:


ansible_user 不要设置成 root 用户,tidb-ansible 限制了服务以普通用户运行。执行以下命令如果所有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


③初始化系统环境,修改内核参数

ansible-playbook bootstrap.yml


TiDB报CPU内核问题:


查看CPU:

uname-ra


1)CPU3.1版本过低,升级CPU内核:

1、导入ELRepo软件仓库的公共秘钥

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

2、安装ELRepo软件仓库的yum源

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

3、安装主线内核(ml=mainline)4.14.11

yum --enablerepo=elrepo-kernel install kernel-ml

4、查看系统可用内核,并设置启动项

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

5、机器上存在 3个内核,我们要使用5.5.8 这个版本,可以通过 


grub2-set-default 0 

6、生成 grub 配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

7、重启系统,并验证

reboot

uname -ra

2) 或者修改CPU参数,修改为CPU实际值


roles/check_system_optional/defaults/main.yml


初始化:

ansible-playbook bootstrap.yml --extra-vars "dev_mode=True"

④部署 TiDB 集群软件

ansible-playbook deploy.yml


解决:

1、每台 节点修改主机名

sudo hostnamectl set-hostname newhostname

2、查看主机名

Hostnamectl

重新deploy


解决:关闭除了中控机外的所有节点的缓存分区:

第一步 切换到root用户 ,关闭swap分区:

swapoff -a

第二步修改配置文件- /etc/fstab

vim /etc/fstab

删除swap相关行/mnt/swap swap swap defaults 0 0

(或/dev/mapper/centos-swap swap   swap defaults 0 0)这一行或者注释掉这一行

第三步确认swap已经关闭

free -m


若swap行都显示 0 则表示关闭成功

第四步调整 swappiness 参数

echo 0 > /proc/sys/vm/swappiness #临时生效

vim /etc/sysctl.conf # 永久生效

#修改 vm.swappiness 的修改为 0(0则不用修改)


vm.swappiness=0

使配置生效:

sysctl -p

再次deploy,成功,尾部日志:


⑤启动 TiDB 集群ansible-playbook start.yml

[tidb@localhosttidb-ansible]$ ansible-playbook start.yml

……


12、测试集群

1、测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口。

使用MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口,地址是TiDB的存储节点地址。

mysql -u root -h 192.168.2.144 -P 4000

也可以直接在中控机执行该命令,在192.168.2.2 shell:


创建数据库用户及授权:(zoner 为用户名、密码)

CREATE USER 'zoner'@'%' IDENTIFIED BY 'zoner';

GRANT ALL PRIVILEGES ON *.* TO 'zoner'@'%' WITH GRANT OPTION;

2、通过浏览器访问监控平台。

地址:http://192.168.2.144:3000默认帐号密码是:admin/admin


http://localhost:9090 访问 TiDB 的 Prometheus 管理界面。



其他:

# 停止集群

 ansible-playbook stop.yml

 

升级

https://docs.pingcap.com/zh/tidb/stable/upgrade-tidb-using-ansible

测试

参考文档:https://blog.csdn.net/Itissohardtog/article/details/103355748

SQL执行,不允许字段存在null值:

sql: Scan error on column index 3: unsupported Scan, storing driver.Value type into type *string

三方客户端工具连接tidb(本例无密码):


13、数据迁移测试

1.安装mydumper  TiDB工具集,MySQL迁移到tidb示例:

# 下载 tool 压缩包

wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz

wgethttp://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.sha256

# 检查文件完整性,返回 ok 则正确

sha256sum -ctidb-enterprise-tools-latest-linux-amd64.sha256

# 解开压缩包

tar -xzf tidb-enterprise-tools-latest-linux-amd64.tar.gz

cd tidb-enterprise-tools-latest-linux-amd64

2.从 MySQL 导出数据

cd tidb-enterprise-tools-latest-linux-amd64

./bin/mydumper -h 192.168.2.137 -P 3306 -u root -p123456  -t 16 -F 64 -B test -Tperson  --skip-tz-utc -o /usr/local/data

说明:

(test库的person表 导出到/usr/local/data)

-h host

-P port

-u username

-p password

-t 线程数

-F chunk 64MB

-B 数据库

-T 表名,多个用,隔开

--skip-tz-utc 添加这个参数忽略掉 MySQL 与导数据的机器之间时区设置不一致的情况,禁止自动转换。

查看导出的数据:

. /bin /myloader -h 192.168.2.144 -u root -P 4000 -t 32 -d/usr/local/data/

 Tidb lightning

安装:

TiDB Lightning 的版本应与集群相同。最低版本要求是 2.0.9,但建议使用最新的稳定版本 3.0。

参考https://www.bookstack.cn/read/TiDB-4.0/get-started-with-tidb-lightning.md

wgethttps://download.pingcap.org/tidb-toolkit-v3.0.0-linux-amd64.tar.gz

wget https://download.pingcap.org/tidb-toolkit-v3.0.0-linux-amd64.sha256

sha256sum -c https://download.pingcap.org/tidb-toolkit-v3.0.0-linux-amd64.sha256

# 解开压缩包

tar -xzf https://download.pingcap.org/tidb-toolkit-v3.0.0-linux-amd64.tar.gz

新增启动文件和文件内容:

文件名称:tikv-import.toml

# TiKV Importer 配置文件模版

 #日志文件。

 log-file ="tikv-importer.log"

 #日志等级:trace、debug、info、warn、error、off。

 log-level ="info"

 [server]

 # tikv-importer监听的地址,tidb-lightning需要连到这个地址进行数据写入。

 addr ="192.168.2.2:8287"

 [import]

 #存储引擎文档(engine file) 的文件夹路径。

 import-dir ="/home/tidb/deploy/data.import/"



新增tidb-lightning.toml文件,内容:

[lightning]

level = "info"

file="tidb-lightning.log"

[tikv-importer]

addr="192.168.2.2:8287"

[mydumper]

#存放mydumper导出的数据存放目录

data-source-dir="/home/tidb/deploy/mydumper"

[tidb]

host="192.168.2.144"

port=4000

user="root"

password=""

status-port=10080


进入lightning bin目录,运行 tikv-importer:

sudo  nohup ./tikv-importer-C tikv-importer.toml > nohup.out 2>&1


查看tikv-importer.log


进入lightning bin目录,启动 tidb-lightning

nohup ./tidb-lightning -config tidb-lightning.toml >nohup.out 2>&1

查看tidb-lightning.log日志


或访问http://192.168.2.144:10080/

另,如何正确结束 tikv-importer 进程:

根据部署方式,选择相应操作结束进程

     使用 TiDB Ansible 部署:在 Importer 的服务器上运行 scripts/stop_importer.sh。

    手动部署:如果 tikv-importer 正在前台运行,可直接按 Ctrl+C 退出。否则,可通过 ps aux | grep tikv-importer 获取进程ID,然后通过 kill «pid» 结束进程。

如何正确结束 tidb-lightning 进程

根据部署方式,选择相应操作结束进程

    使用TiDB Ansible 部署:在 Lightning 的服务器上运行 scripts/stop_lightning.sh。

    手动部署:如果 tidb-lightning 正在前台运行,可直接按 Ctrl+C 退出。否则,可通过 ps aux | grep tidb-lightning 获取进程ID,然后通过 kill -2 «pid» 结束进程。

grafana:

SQL计划 查询

-- EXPLAIN

    SELECTDISTINCT

        a.fid,

        DATE_FORMAT(i.CFBIZDATE,'%Y-%m-%d')发票日期,

        i.CFINVOICETYPECODE发票代码,

        i.CFINVOCIENO发票号码,

        CASEi.CFINVOICETYPEID

            WHEN'bnwAAAACXF4QcaE3' THEN '增值税专用发票'

            WHEN'bnwAAAACXF8QcaE3' THEN '增值税普通发票'

            WHEN'bnwAAAACXGAQcaE3' THEN '其他发票'

            WHEN'bnwAAAACXGEQcaE3' THEN '无发票'

            WHEN'bnwAAAIBUqQQcaE3' THEN '增值税电子普通发票'

        ENDAS发票类型,

      t6.fname_l2申请公司,

      ROUND(i.CFAMT-i.CFTAXAMT,2)不含税额,

      i.CFRATE税率,

      ROUND(i.CFTAXAMT,2)税额,

      ROUND(i.CFAMT,2)发票金额,

        i.CFCHECKCODE校验码,

       ROUND(i.CFCURUSERAMOUNT,2)本次使用金额,

       i.CFISFIRSTUSE使用次数,

      t4.fname_l2报账人,

      t5.fname_l2部门,

      t7.fname_l2预算承担部门,

      e.fname_l2预算科目,

            CAST(t8.fname_l2AS CHAR)产品线,

      a.fnumber单据编号,

            DATE_FORMAT(a.fbizdate,'%Y-%m-%d')申请日期,

             CASE a.CFSUBMITAREAID

                WHEN'bnwAAAACXFsQcaE3' THEN '北京'

                WHEN'bnwAAAACXFwQcaE3' THEN '上海'

                WHEN'bnwAAAACXF0QcaE3' THEN '广东'

                WHEN'bnwAAAAtBxgQcaE3' THEN '西安'

            ENDAS属地,

        tv.FPERSONEMPNAME_l2审批人,

            DATE_FORMAT(tv.FLASTSTATETIME,'%Y-%m-%d %H:%:i%s')最后审批时间

  FROMT_BC_BizAccountBill a

 INNERJOIN T_BC_BizAccountBCE b ON a.fid = b.fbillid

 INNERJOIN T_BD_SettlementType c ON c.fid = b.FpayMode

  LEFTJOIN ct_bc_inventry i ON a.FID = i.FPARENTID

  LEFTJOIN T_BC_bizAccountBillentry f ON a.fid = f.fbillid

  LEFTJOIN T_BC_ExpenseType e ON e.fid = f.fexpensetypeid

  LEFTJOIN t_bd_bank d ON d.fid = b.CFOpenBankID

  LEFTJOIN t_bd_person t4 ON t4.fid = a.fapplierid

  LEFTJOIN T_ORG_BaseUnit t5 ON t5.fid = a.forgunitid

  LEFTJOIN T_ORG_BaseUnit t6 ON t6.fid = a.fcompanyid

  LEFTJOIN T_ORG_BaseUnit t7 ON t7.fid = f.fcostcenterid

  LEFTJOIN T_BD_GeneralAsstActType t8 ON t8.fid = f.cfproducttypid

  LEFTJOIN t_Wfr_Assigndetail_V tv ON tv.FBIZOBJID=a.FID

 WHERE

--  a.fstate not in (10, 20, 27, 40) and

        --and date_format(a.fbizdate, '%Y') = '2020'

      i.CFINVOICETYPECODE IS NOT NULL

--  and a.FAMOUNTAPPROVED > 0

ORDER BY 单据编号,最后审批时间


-- LIMIT 100

 ;

-- EXPLAIN

    SELECTDISTINCT

        a.fid,

        DATE_FORMAT(i.CFBIZDATE,'%Y-%m-%d')发票日期,

        i.CFINVOICETYPECODE发票代码,

        i.CFINVOCIENO发票号码,

        CASEi.CFINVOICETYPEID

            WHEN'bnwAAAACXF4QcaE3' THEN '增值税专用发票'

            WHEN'bnwAAAACXF8QcaE3' THEN '增值税普通发票'

            WHEN'bnwAAAACXGAQcaE3' THEN '其他发票'

            WHEN'bnwAAAACXGEQcaE3' THEN '无发票'

            WHEN'bnwAAAIBUqQQcaE3' THEN '增值税电子普通发票'

        ENDAS发票类型,

      t6.fname_l2申请公司,

      ROUND(i.CFAMT-i.CFTAXAMT,2)不含税额,

      i.CFRATE税率,

      ROUND(i.CFTAXAMT,2)税额,

      ROUND(i.CFAMT,2)发票金额,

        i.CFCHECKCODE校验码,

       ROUND(i.CFCURUSERAMOUNT,2)本次使用金额,

       i.CFISFIRSTUSE使用次数,

      t4.fname_l2报账人,

      t5.fname_l2部门,

      t7.fname_l2预算承担部门,

      e.fname_l2预算科目,

            CAST(t8.fname_l2AS CHAR)产品线,

      a.fnumber单据编号,

            DATE_FORMAT(a.fbizdate,'%Y-%m-%d')申请日期,

             CASE a.CFSUBMITAREAID

                WHEN'bnwAAAACXFsQcaE3' THEN '北京'

                WHEN'bnwAAAACXFwQcaE3' THEN '上海'

                WHEN'bnwAAAACXF0QcaE3' THEN '广东'

                WHEN'bnwAAAAtBxgQcaE3' THEN '西安'

            ENDAS属地,

        tv.FPERSONEMPNAME_l2审批人,

        sh.USE_ORG_NAME,

        sh.USE_ORG_ADDR,

            DATE_FORMAT(tv.FLASTSTATETIME,'%Y-%m-%d %H:%:i%s')最后审批时间

  FROMT_BC_BizAccountBill a

 INNERJOIN T_BC_BizAccountBCE b ON a.fid = b.fbillid

 INNERJOIN T_BD_SettlementType c ON c.fid = b.FpayMode

  LEFTJOIN ct_bc_inventry i ON a.FID = i.FPARENTID

  LEFTJOIN T_BC_bizAccountBillentry f ON a.fid = f.fbillid

  LEFTJOIN T_BC_ExpenseType e ON e.fid = f.fexpensetypeid

  LEFTJOIN t_bd_bank d ON d.fid = b.CFOpenBankID

  LEFTJOIN t_bd_person t4 ON t4.fid = a.fapplierid

  LEFTJOIN T_ORG_BaseUnit t5 ON t5.fid = a.forgunitid

  LEFTJOIN T_ORG_BaseUnit t6 ON t6.fid = a.fcompanyid

  LEFTJOIN T_ORG_BaseUnit t7 ON t7.fid = f.fcostcenterid

  LEFTJOIN T_BD_GeneralAsstActType t8 ON t8.fid = f.cfproducttypid

  LEFTJOIN t_Wfr_Assigndetail_V tv ON tv.FBIZOBJID=a.FID

    LEFTJOIN share_equ sh ON sh.varid = t4.rel_id --1100w 100+字段大表

 WHERE

--  a.fstate not in (10, 20, 27, 40) and

        --and date_format(a.fbizdate, '%Y') = '2020'

      i.CFINVOICETYPECODE IS NOT NULL

--  and a.FAMOUNTAPPROVED > 0

ORDER BY 单据编号,最后审批时间

-- LIMIT 100

 ;

[tidb@localhost

tidb-toolkit-v3.0.0-linux-amd64]$ bin/tidb-lightning-ctl  -switch-mode = normal

你可能感兴趣的:(TiDB 安装相关)