天天看点

zabbix监控(续)——TIDB

一 TiDB 简介

TiDB 是 PingCAP 公司基于 Google Spanner / F1 论文实现的开源分布式 NewSQL 数据库。

TiDB 具备如下 NewSQL 核心特性:

• SQL 支持( TiDB 是 MySQL 兼容的)

• 水平线性弹性扩展

• 分布式事务

• 跨数据中心数据强一致性保证

• 故障自恢复的高可用

TiDB 的设计目标是 100% 的 OLTP 场景和 80% 的 OLAP 场景。

TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 Sharding 方案。同时

它也让开发运维人员不用关注数据库 Scale 的细节问题,专注于业务开发,极大的提升研发的生产力1

1 TiDB 整体架构

zabbix监控(续)——TIDB

2  TiDB 集群主要分为三个组件:

TiDB Server

TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与

TiKV 交互获取数据,最终返回结果。 TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水

平扩展,可以通过负载均衡组件(如 LVS 、 HAProxy 或 F5 )对外提供统一的接入地址。

PD Server

Placement Driver ( 简称 PD) 是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key

存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、 Raft group leader 的迁移等);三

是分配全局唯一且递增的事务 ID 。

PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。

TiKV Server

TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本

单位是 Region ,每个 Region 负责存储一个 Key Range (从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV

节点会负责多个 Region 。 TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管

理,不同节点上的多个 Region 构成一个 Raft Group ,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这

里也是以 Region 为单位进行调度。

二 tidb集群部署

架构图

zabbix监控(续)——TIDB

准备环境

符合下列要求的一台中控机

– Python 2.6 或 Python 2.7

– Python Jinja2 2.7.2 和 MarkupSafe 0.11 安装包。

符合下列要求的目标节点若干

机器 4 台以上。 TiKV 至少 3 个实例,而且不要将 TiKV 与 TiDB 或 PD 模块部署在同一台机器上。

操作系统:

* CentOS 7.0 及以上版本

* X86_64 架构 (AMD64)

* 内核版本 3.10 及以上

* Ext4 文件系统

机器之间互通网络。部署时关闭防火墙和 iptables ,部署完成后再开启。

所有机器的时间和时区设置一致,有 NTP 服务可以同步正确时间。

一个可从中控机登录的远程用户帐号,以通过 SSH 连接托管节点。普通用户帐号需要有 sudo 权限。

Python 2.6 或 Python 2.7

 在中控机上安装 Ansible

yum install epel-release
yum update
yum install ansible
           

下载 TiDB-Ansible 至中控机

编辑 tidb-ansible-master 文件夹中的 inventory.ini 文件:

zabbix监控(续)——TIDB

 部署 TiDB 集群

编辑 inventory.ini 文件;

## Connection
# ssh via root:
# ansible_user = root
# ansible_become = true
# ansible_become_user = tidb
# ssh via normal user
ansible_user = tidb
           

 连网下载 TiDB 、 TiKV 和 PD binaries :

ansible-playbook local_prepare.yml
           

连网下载 TiDB 、 TiKV 和 PD binaries :

ansible-playbook local_prepare.yml
           

初始化目标机器的系统环境,修改内核参数:

ansible-playbook bootstrap.yml -k -K
           

如果连接至托管节点需要密码,需添加 -k (小写)参数。这同样适用于其他 playbooks 。

如果 sudo 到 root 权限需要密码,需添加 -K (大写)参数。

部署 TiDB 集群:

ansible-playbook deploy.yml -k
           

启动 TiDB 集群:

ansible-playbook start.yml -k
           

使用 MySQL 客户端连接至 TiDB 集群:

mysql -u root -h 172.16.10.1 -P 4000
           

创建、查看和删除数据库

使用 CREATE DATABASE 语句创建数据库。
CREATE DATABASE db_name [options];

使用 SHOW DATABASES 语句查看数据库:
SHOW DATABASES;

使用 DROP DATABASE 语句删除数据库:
DROP DATABASE samp_db;


           

创建、查看和删除索引

对于值不唯一的列,可使用 CREATE INDEX 或 ALTER TABLE 语句。
CREATE INDEX person_num ON person (number);

对于值唯一的列,可以创建唯一索引
CREATE UNIQUE INDEX person_num ON person (number);

使用 SHOW INDEX 语句查看表内所有索引:
SHOW INDEX from person;

删除索引
DROP INDEX person_num ON person;
ALTER TABLE person DROP INDEX person_num;

           

增删改查数据

使用 INSERT 语句向表内插入数据。
INSERT INTO person VALUES("1","tom","20170912");

使用 SELECT 语句检索表内数据
ELECT * FROM person;
+--------+------+------------+
| number | name | birthday
|
+--------+------+------------+
|
1 | tom | 2017-09-12 |
+--------+------+------------+

使用 UPDATE 语句修改表内数据
UPDATE person SET birthday='20171010' WHERE name='tom';
SELECT * FROM person;
+--------+------+------------+
| number | name | birthday
|
+--------+------+------------+
|
1 | tom | 2017-10-10 |
+--------+------+------------+

使用 DELETE 语句删除表内数据:
DELETE FROM person WHERE number=1;
SELECT * FROM person;
Empty set (0.00 sec)
           

创建、授权和删除用户

使用 CREATE USER 语句创建一个用户 tiuser ,密码为 123456 :
CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456';

授权用户 tiuser 可检索数据库 samp_db 内的表:
GRANT SELECT ON samp_db .* TO 'tiuser'@'localhost';

查询用户 tiuser 的权限:
SHOW GRANTS for [email protected];

删除用户 tiuser :
DROP USER 'tiuser'@'localhost';
           

三 单点部署

解压tidb包:

tar zxf tidb-latest-linux-amd64.tar.gz 
cd tidb-v5.0.1-linux-amd64/
           

后台执行pd_server:

zabbix监控(续)——TIDB

查看端口:

netstat -antlp |grep :2379
netstat -antlp |grep :2380
           

运行tidb:

zabbix监控(续)——TIDB

授予用户权限:

create database zabbix character set utf8 collate utf8_bin;
CREATE USER 'zabbix'@'%' IDENTIFIED BY 'westos';
grant all privileges on *.* to 'zabbix'@'%';
           

数据库备份及迁移:

mysqldump -uroot -pwestos zabbix >/mnt/zabbix.sql
cd /mnt/
ls

mysql -h 172.25.3.6 -P 4000 -uroot
use zabbix;
set tidb_batch_insert=1;
source /mnt/zabbix.sql;
           

修改server数据传输端口:

cd /etc/zabbix/
vim /etc/zabbix/zabbix_server.conf

DBPort=4000  ##修改端口为4000
           
zabbix监控(续)——TIDB

修改监控网站访问ip及端口:

cd /etc/zabbix/web/

vim zabbix.conf.php 
$DB['TYPE'] = 'MYSQL'; 
$DB['SERVER'] = '172.25.7.1'; ##修改远程主机 
$DB['PORT'] = '4000'; ##修改端口 
$DB['DATABASE'] = 'zabbix'; 
$DB['USER'] = 'zabbix'; 
$DB['PASSWORD'] = 'westos';

           
zabbix监控(续)——TIDB

重启服务:

systemctl restart  zabbix-server.service 
systemctl restart  zabbix-agent.service