大数据归档-冷热数据分离

1. 什么是TokuDB?

TokuDB 是一个支持事务的“新”引擎,有着出色的数据压缩功能,由美国 TokuTek 公司(现在已经被 Percona 公司收购)研发。拥有出色的数据压缩功能,如果您的数据写多读少,而且数据量比较大,强烈建议您使用TokuDB,以节省空间成本,并大幅度降低存储使用量和IOPS开销,不过相应的会增加 CPU 的压力。

1.1 TokuDB的特性

  • 高压缩比,高写入性能
  • 在线创建索引和字段
  • 支持事务
  • 支持主从同步

2. TokuDB安装步骤

2.1 准备两台mysql数据库

在之前的博客中单独安装过percona数据库,我们在这篇博客中不再重新安装数据库。安装Percona数据库教程链接在本篇博客中的数据归档也是主从复制的方式,所以准备好两台mysql服务器节点。

2.2 安装jemalloc库

yum install -y jemalloc

2.3 修改my.cnf

vi /etc/my.cnf

修改my.cnf文件添加以下内容

[mysqld_safe]
malloc-lib=/usr/lib64/libjemalloc.so.1

修改完之后重新启动mysql

systemctl restart mysqld

2.4 关闭 Transparent huge pages

为了保证TokuDB的写入性能,我们需要关闭linux系统的大页内存管理,默认情况下linux的大页内存管理是在系统启动时预先分配内存,系统运行时不再改变了。

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

2.5 安装tokudb

版本必须和Percona的版本一致,我们前面安装的是Percona5.7,所以此处也需要安装toku5.7,否则提示版本冲突。

yum install -y Percona-Server-tokudb-57.x86_64

3. TokuDB引擎启动

输入Mysql的root帐号密码,完成启动。

ps_tokudb_admin --enable -uroot -p 

启动完成之后重启一下mysql

systemctl restart mysqld

重启之后再激活一次tokudb,重新执行一下命令

ps_tokudb_admin --enable -uroot -p 

4. 查看TokuDB引擎是否安装成功

mysql -u root -p

进入mysql控制台,执行show engines;

show engines;

在这里插入图片描述

5. 使用TokuDB引擎

如果是sql语句建表,只需要在语句的结尾加上ENGINE = TokuDB就可以

CREATE TABLE student(
   .........
) ENGINE = TokuDB;

有些人习惯用navicat来创建表,这个对tokuDB引擎行不通的,通过navicat指定tokuDB引擎也不会好用

6. 归档库的双击热备

我们这篇博客选用两个Percona数据库节点组成Replication集群,这两个节点配置成双向同步,因为Replication集群的主从同步是单向的,如果配置成单向的主从同步,主库挂掉以后,我们可以像从库写入数据,但是主库恢复之后主库是不会像从库那同步数据的,所以两个节点的数据不一致,如果我们配置成双向同步,无论哪一个节点宕机了,在上线的时候他都会从其他的节点同步数据。这就可以保证每一个节点的数据是一致的。当然这个一致性是弱一致性,跟PXC集群的强一致性有本质区别的。

下边的图片是一个冷数据备份的数据库集群方案,但是我们由于资源有限,只搭建一台的Haproxy+2台的数据库节点,图中画蓝色线的模块。
在这里插入图片描述

7. 配置Replication集群

7.1 Replication集群同步原理

当我们在Master节点写入数据,Master会把这次操作会记录到binlog日志里边,Slave节点会有专门的线程去请求Master发送binlog日志,然后Slave节点上的线程会把收到的Master日志记录在本地realy_log日志文件中,slave节点通过执行realy_log日志来实现数据的同步,最后把执行过的操作写到本地的binlog日志里
在这里插入图片描述
通过图片我们能总结出Replication集群的数据同步是单向的,我们在Master上写入数据,在slave上可以同步到这些数据,但是反过来却不行,所以要实现双向同步,两个数据库节点互为主从关系才行
在这里插入图片描述

7.2 创建同步账户

因为slave节点要从master节点同步数据,必须要登录Master节点,之前我们创建的admin账户和root账户的权限过大,由于我们只做同步数据,我们再给两个节点的数据库都创建上一个同步数据的账户

CREATE USER 'backup'@'%' IDENTIFIED BY 'Abc_123456';
GRANT super, reload, replication slave ON *.* TO 'backup'@'%';
FLUSH  PRIVILEGES;

在这里插入图片描述

7.3 修改配置文件

由于mysql数据库默认没有开启binlog日志,我们需要设置一下开启binlog

vi /etc/my.cnf

两个节点的serverid需要不一样

server_id = 111
log_bin = mysql_bin
relay_log = relay_bin
server_id = 113
log_bin = mysql_bin
relay_log = relay_bin

修改完之后重启mysql

systemctl restart mysqld

7.4 配置主从同步

因为我们要配置双向同步,我们要配置两变主从同步

7.4.1 A节点为MasterB节点为Slave

在这里插入图片描述

我们在B节点的mysql上关闭主从同步的服务

stop slave;

然后再指定要同步的Master节点

change master to master_host="192.168.1.111",master_port=3306,master_user="backup",master_password="Abc_123456";

启动同步服务

start slave;

查看主从同步状态信息

show slave status;

Slave_IO_Running和Slave_SQL_RUNNING都是YES时配置成功
在这里插入图片描述

7.4.3 B节点为MasterA节点为Slave

因为是双向同步,接下里我们要以B节点为Master,A节点作为slave设置主从同步,我们需要在A节点上执行刚才的所有操作,具体步骤就不在下边描述
在这里插入图片描述

7.5 创建归档表

因为是双向同步,我们在哪一个节点创建归档表,另一个节点都会同步到数据

CREATE DATABASE test;
USE test;
CREATE TABLE t_purchase_201907 (
	id INT UNSIGNED PRIMARY KEY,
	purchase_price DECIMAL(10,2) NOT NULL,
	purchase_num INT UNSIGNED NOT NULL,
	purchase_sum DECIMAL (10,2) NOT NULL,
	purchase_buyer INT UNSIGNED NOT NULL,
	purchase_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	company_id INT UNSIGNED NOT NULL,
	goods_id INT UNSIGNED NOT NULL,
	KEY idx_company_id(company_id),
	KEY idx_goods_id(goods_id)
)engine=TokuDB;

在这里插入图片描述
在这里插入图片描述
这样我们就创建好了两个mysql节点相互同步

7.6 搭建haproxy

在之前的博客中博主搭建过haproxy,在这篇文章就不再重复搭建,不会搭建的伙伴可以看博主往期博客,这篇博客只贴出haproxy的配置文件

global
         log         127.0.0.1 local2
         chroot      /var/lib/haproxy
         pidfile     /var/run/haproxy.pid
         maxconn     4000
         user        haproxy
         group       haproxy
         daemon
         # turn on stats unix socket
         stats socket /var/lib/haproxy/stats

     defaults
         mode                    http
         log                     global
         option                  httplog
         option                  dontlognull
         option http-server-close
         option forwardfor       except 127.0.0.0/8
         option                  redispatch
         retries                 3
         timeout http-request    10s
         timeout queue           1m
         timeout connect         10s
         timeout client          1m
         timeout server          1m
         timeout http-keep-alive 10s
         timeout check           10s
         maxconn                 3000

     listen   admin_stats
         bind    0.0.0.0:4001  #监控界面访问的ip和端口
         mode  http            #访问协议
         stats uri       /dbs  #URI相对地址
         stats realm  Global\ statistics   #统计报告格式
         stats auth    admin:abc123456  #登录账号信息
     listen   proxy-mysql
         bind    0.0.0.0:3306
         mode  tcp
         balance  roundrobin
         option  tcplog       #日志格式
         server   backup111 192.168.1.111:3306  check  port  3306 weight 1 maxconn  2000
         server   backup113 192.168.1.113:3306  check  port  3306 weight 1 maxconn  2000

修改完haproxy.cfg文件启动haproxy

service haproxy start

我们登陆haproxy的监控画面,说明搭建成功
在这里插入图片描述

7.7 创建进货表

我们在以前搭建的haproxy+pxc三节点集群的数据库集群中创建进货表,注意这里是三节点的pxc集群,不是在上边创建的haproxy+2个节点的mysql,这个集群是在以前的博客中创建的,不懂的同学可以看往期博客。
我们在系统表中创建一个test数据库,创建一个进货表,注意这里创建进货表时没指定tokuDB引擎。这个进货表不是按照时间分表的,所以不用像上边创建的归档表一样表名称还要包含年份和月份

CREATE DATABASE test;
USE test;
CREATE TABLE t_purchase (
  	id INT UNSIGNED PRIMARY KEY,
  	purchase_price DECIMAL(10,2) NOT NULL,
  	purchase_num INT UNSIGNED NOT NULL,
  	purchase_sum DECIMAL (10,2) NOT NULL,
  	purchase_buyer INT UNSIGNED NOT NULL,
  	purchase_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  	company_id INT UNSIGNED NOT NULL,
  	goods_id INT UNSIGNED NOT NULL,
  	KEY idx_company_id(company_id),
  	KEY idx_goods_id(goods_id)
  )

7.8 准备测试数据

在haproxy+pxc三节点的mysql集群中创建归档数据,可以使用函数或者存储过程批量创建,创建方法自行百度。
我创建了140000条的数据
在这里插入图片描述

7.9 安装归档工具

Percona公司为我们提供了一套非常便捷的工具包Percona-Toolkit,这个工具包包含了用于数据归档的pt-archiver,用这个归档工具我们可以轻松的完成数据的归档。

pt-archiver的用途

  1. 导出线上数据,到线下数据作处理
  2. 清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器

7.9.1 安装依赖包

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

7.9.2 安装percona toolkit的包

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

7.9.3 查看可以安装的包

yum list | grep percona-toolkit

在这里插入图片描述

7.9.4 安装percona-toolkit工具包

yum install percona-toolkit

查看pt-archiver的版本,如下图所示,安装成功

pt-archiver --version

在这里插入图片描述

7.10 归档数据

pt-archiver 
--source h=192.168.1.27,P=3306,u=admin,p=Abc_123456,D=test,t=t_purchase 
--dest h=192.168.1.114,P=3306,u=admin,p=Abc_123456,D=test,t=t_purchase_201907 
--no-check-charset --where 'purchase_date<"2019-08-01 0:0:0"' 
--progress 5000 --bulk-delete --bulk-insert --limit=10000 --statistics

–source h=192.168.1.27, P=3306, u=admin, p=Abc_123456, D=test, t=t_purchase 代表的是取哪个服务器的哪个数据库的哪张表的
–dest h=192.168.1.114, P=3306, u=admin, p=Abc_123456, D=test, t=t_purchase_201907 代表的是归档库的连接信息
–no-check-charset 代表的是归档过程中我们不检查数据的字符集
–where ‘purchase_date<“2019-08-01 0:0:0”’ 归档数据的判断条件
–progress 5000 每归档5000条数据往控制台打印一下状态信息
–bulk-delete 批量的删除归档数据
–bulk-insert 批量的新增归档数据
–limit=10000 批量一万条数据进行一次归档
–statistics 打印归档的统计信息
在这里插入图片描述

7.11 验证归档数据

我们先查看以下192.168.1.27这个节点是不是已经没有了数据
我们看到这个节点已经没有了数据
在这里插入图片描述
再看看192.168.1.114这个节点,数据归档成功
在这里插入图片描述

7.12 总结

使用TokuDB引擎保存归档数据,拥有高速写入特性
使用双机热备方案搭建归档库,具备高可用性
使用pt-archiver执行归档数据,简便易行

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值