当前位置 : 主页 > 网络编程 > 其它编程 >

TiDB:初探

来源:互联网 收集:自由互联 发布时间:2023-07-02
1 资源规划硬件要求:https://pingcap.com/docs-cn/v3.0/how-to/deploy/hardware-recommendatio 1 资源规划 硬件要求: https://pingcap.com/docs-cn/v3.0/how-to/deploy/hardware-recommendations/ 生产系统最低配置: 3 个PD、
1 资源规划硬件要求:https://pingcap.com/docs-cn/v3.0/how-to/deploy/hardware-recommendatio

1 资源规划

硬件要求:

https://pingcap.com/docs-cn/v3.0/how-to/deploy/hardware-recommendations/

生产系统最低配置:

3 个PD、2 个TiDB、3 个TiKV

  • PD 本身是一个分布式系统,由多个节点构成一个整体,并且同时有且只有一个主节点对外提供服务。各个节点之间通过选举算法来确定主节点,选举算法要求节点个数是奇数个 (2n+1) ,1 个节点的风险比较高,所以这里使用 3 个节点。

  • TiDB 是无状态的,现有集群的 TiDB 服务压力大的话,可以在其他节点直接增加 TiDB 服务,无需多余的配置。我们选择使用两个 TiDB,可以做 HA 和负载均衡。

  • TiKV 分布式存储,推荐使用奇数(2n+1)个备份,挂掉n个备份之后数据仍然可用。这里使用3节点、设置3个备份 (默认值)。

测试环境服务器:

TiDB:

(官方建议:16核+32GB+SAS万兆网卡(2块最佳)2节点 )

10.99.99.164

10.99.99.165

PD:

(官方建议:4核+8GB+SSD万兆网卡(2块最佳)3节点 )

10.99.99.164

10.99.99.165

10.99.99.166

TiKV:

(官方建议:16核+32GB+SSD万兆网卡(2块最佳)3节点 )

10.99.99.170

10.99.99.171

10.99.99.172

监控:

(官方建议:8核+16GB+SAS千兆网卡1节点 )

10.99.99.166

2 Ansible部署集群

具体步骤安装下面的文档一步一步来即可。

https://pingcap.com/docs-cn/v3.0/how-to/deploy/orchestrated/ansible/

3 安装过程中一些需要注意的点

依赖相关问题 :

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

以 tidb 用户登录中控机,请务必按以下方式通过 pip 安装 Ansible 及其相关依赖的指定版本,否则会有兼容问题。

安装完成后,可通过 ansible --version 查看 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 ansible 2.5.0


    安装问题 1:

    执行 sudo pip install -r ./requirements.txt 由于测试服务器没有pip,需手动安装

    1 安装setuptools-2.0

      wget --no-check-certificat https://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gztar zxf setuptools-2.0.tar.gz cd setuptools-2.0python setup.py install

      2 pip 安装

      pip官网下载链接(https://pypi.python.org/pypi/pip#downloads)

        tar zxvf pip-10.0.1.tar.gz cd pip-10.0.1python setup.py install


        安装问题 2:

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

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

          $ cd home/tidb/tidb-ansible$ vi hosts.ini[servers]10.99.99.16410.99.99.16510.99.99.16610.99.99.17010.99.99.17110.99.99.172[all:vars]username = tidbntp_server = pool.ntp.org

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

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


            安装问题 3:

            遇到报错:

              msg: to use the 'ssh' connection type with passwords, you must install the sshpass program

              这是由于没有安装sshpass 包导致。中控机上安装即可。

                wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz tar -xvf sshpass.tar.gz cd sshpass-1.06 ./configure make install


                安装问题 4:

                配置文件修改:

                  vi home/tidb/tidb-ansible/inventory.ini[tidb_servers]10.99.99.16410.99.99.165[tikv_servers]10.99.99.17010.99.99.17110.99.99.172[pd_servers]10.99.99.16410.99.99.16510.99.99.166## Monitoring Part# prometheus and pushgateway servers[monitoring_servers]10.99.99.166[grafana_servers]10.99.99.166# node_exporter and blackbox_exporter servers[monitored_servers]10.99.99.16410.99.99.16510.99.99.16610.99.99.17010.99.99.17110.99.99.172[alertmanager_servers]10.99.99.166## Global variables[all:vars]deploy_dir = data/tidb/deploy

                  # 注意:部署目录调整通过 deploy_dir 变量控制

                  性能参数调整

                    vi tidb-ansible/conf/tikv.ymlstorage: block-cache: capacity: "5GB"# 推荐设置:capacity = MEM_TOTAL * 0.5 TiKV 实例数量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


                    安装问题 5:

                    执行 ansible-playbook bootstrap.yml 由于内存不足报错:

                      ERROR MESSAGE SUMMARY ****************************************************************[10.99.99.164]: Ansible Failed! => changed=False msg: This machine does not have sufficient RAM to run TiDB, at least 16000 MB.

                      free -m 确实少于16000MB

                      修改限制阈值:

                      在安装目录中找到配置文件 main.yml

                        cd /home/tidb/tidb-ansible/roles/check_system_optional/defaultsvi main.yml将tidb_min_ram值改成小于16000 MB


                        安装问题 6:

                        执行 ansible-playbook deploy.yml 报错:

                          TASK [check_system_dynamic : Preflight check - Does every node in cluster have different hostname] *******************fatal: [10.99.99.164]: FAILED! => changed=false msg: |- hostnames of all nodes in cluster: [localhost, localhost, localhost, localhost, localhost, localhost]

                          因为主机名都是localhost,要修改对应的主机名

                            hostnamectl--staticset-hostnametidb01


                            安装问题 7:

                            执行 ansible-playbook deploy.yml 报错:

                              TASK [check_system_dynamic : Preflight check - NTP service] *****************************************************************************************fatal: [10.99.99.164]: FAILED! => changed=false msg: Make sure NTP service is running and ntpstat is synchronised to NTP server. See https://github.com/pingcap/docs/blob/master/dev/how-to/deploy/orchestrated/ansible.md#how-to-check-whether-the-ntp-service-is-normal .

                              未配置NTP。用以下命令可使 NTP 服务 开始同步

                                sudo systemctl stop ntpd.servicesudo ntpdate pool.ntp.orgsudo systemctl start ntpd.servicentpstat


                                4 数据库启停

                                启动 TiDB 集群

                                  su - tidbcd home/tidb/tidb-ansibleansible-playbook start.yml

                                  输出很长,最后的状态全是ok就可以。

                                    PLAY RECAP *****************************************************************************************************************************10.99.99.164 : ok=16 changed=4 unreachable=0 failed=0 10.99.99.165 : ok=15 changed=4 unreachable=0 failed=0 10.99.99.166 : ok=33 changed=10 unreachable=0 failed=0 10.99.99.170 : ok=14 changed=3 unreachable=0 failed=0 10.99.99.171 : ok=14 changed=3 unreachable=0 failed=0 10.99.99.172 : ok=14 changed=3 unreachable=0 failed=0 localhost : ok=7 changed=4 unreachable=0 failed=0Congrats! All goes well. :-)[tidb@localhost tidb-ansible]$

                                    关闭 TiDB 集群

                                      cd home/tidb/tidb-ansibleansible-playbook stop.yml

                                      5 连接集群与监控

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

                                      使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口。

                                        mysql -u root -h 10.99.99.164 -P 4000

                                        (默认root密码为空,连接后要修改下)

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

                                        地址:

                                        http://10.99.99.166:3000

                                        默认帐号密码:

                                        admin/admin

                                        6 简单测试下性能

                                        按照官方建议,TiKV只有使用SSD以上级别的磁盘,才能发挥TiDB的性能,代码中对传统的SAS磁盘并没有做过多的优化,特别是性能较差的连安装的检查都不会通过。而我的乞丐版环境中并没有SSD,所以对比MySQL性能提升并是特别大。

                                        由于我使用TiDB的目的是补充MySQL在OLAP方面的不足,因此以下只针对对大表的插入和统计 ,分别在MySQL和TIDB中做个对比。

                                        【声明:以下未使用官方建议配置,只做研究不代表测试结果的好坏】

                                        # MySQL测试性能:

                                          CREATE TABLE T_MYSQL(ID INTEGER PRIMARY KEY, NAME VARCHAR(100));

                                            (root@localhost:mysql.sock)[trades]insert into T_MYSQL select id+(select max(id) from T_MYSQL),name from T_MYSQL;Query OK, 12582912 rows affected (1 min 28.49 sec)Records: 12582912 Duplicates: 0 Warnings: 0(root@localhost:mysql.sock)[trades]select count(*) from T_MYSQL;+----------+| count(*) |+----------+| 25165824 |+----------+1 row in set (2.93 sec)(root@localhost:mysql.sock)[trades]select NAME,count(*) from T_MYSQL group by NAME;+------+----------+| NAME | count(*) |+------+----------+| Ann | 8388608 || Ed | 8388608 || Emma | 8388608 |+------+----------+3 rows in set (17.88 sec)(root@localhost:mysql.sock)[trades]insert into T_MYSQL select id+(select max(id) from T_MYSQL),name from T_MYSQL;Query OK, 25165824 rows affected (3 min 3.78 sec)Records: 25165824 Duplicates: 0 Warnings: 0(root@localhost:mysql.sock)[trades]select count(*) from T_MYSQL;+----------+| count(*) |+----------+| 50331648 |+----------+1 row in set (5.91 sec)(root@localhost:mysql.sock)[trades]select NAME,count(*) from T_MYSQL group by NAME;+------+----------+| NAME | count(*) |+------+----------+| Ann | 16777216 || Ed | 16777216 || Emma | 16777216 |+------+----------+3 rows in set (37.81 sec)

                                            # TiDB测试性能:

                                              CREATE TABLE T_TIDB(ID INTEGER PRIMARY KEY, NAME VARCHAR(100));

                                                (root@10.99.99.164:4000)[test]insert into T_TIDB select id+(select max(id) from T_TIDB),name from T_TIDB;Query OK, 12582912 rows affected (4 min 9.68 sec)Records: 12582912 Duplicates: 0 Warnings: 0(root@10.99.99.164:4000)[test]select count(*) from T_TIDB;+----------+| count(*) |+----------+| 25165824 |+----------+1 row in set (1.34 sec)(root@10.99.99.164:4000)[test]select NAME,count(*) from T_TIDB group by NAME;+------+----------+| NAME | count(*) |+------+----------+| Ann | 8388608 || Emma | 8388608 || Ed | 8388608 |+------+----------+3 rows in set (1.81 sec)(root@10.99.99.164:4000)[test](root@10.99.99.164:4000)[test]insert into T_TIDB select id+(select max(id) from T_TIDB),name from T_TIDB;Query OK, 25165824 rows affected (8 min 23.53 sec)Records: 25165824 Duplicates: 0 Warnings: 0(root@10.99.99.164:4000)[test]select count(*) from T_TIDB;+----------+| count(*) |+----------+| 50331648 |+----------+1 row in set (2.87 sec)(root@10.99.99.164:4000)[test]select NAME,count(*) from T_TIDB group by NAME;+------+----------+| NAME | count(*) |+------+----------+| Ed | 16777216 || Emma | 16777216 || Ann | 16777216 |+------+----------+3 rows in set (3.50 sec)

                                                TiDB 的大表查询统计即使在低配磁盘上,仍然比MySQL快不少。


                                                圣诞快乐!

                                                上一篇:linux–通过VPN访问VirtualBoxguest虚拟机
                                                下一篇:没有了
                                                网友评论