大数据归档-冷热数据分离
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的配置文件
globallog 127.0.0.1 local2chroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 4000user haproxygroup haproxydaemon# turn on stats unix socketstats socket /var/lib/haproxy/statsdefaultsmode httplog globaloption httplogoption dontlognulloption http-server-closeoption forwardfor except 127.0.0.0/8option redispatchretries 3timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 1mtimeout server 1mtimeout http-keep-alive 10stimeout check 10smaxconn 3000listen admin_statsbind 0.0.0.0:4001 #监控界面访问的ip和端口mode http #访问协议stats uri /dbs #URI相对地址stats realm Global\ statistics #统计报告格式stats auth admin:abc123456 #登录账号信息listen proxy-mysqlbind 0.0.0.0:3306mode tcpbalance roundrobinoption tcplog #日志格式server backup111 192.168.1.111:3306 check port 3306 weight 1 maxconn 2000server 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的用途
- 导出线上数据,到线下数据作处理
- 清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器
7.9.1 安装依赖包
yum install perl-DBIyum install perl-DBD-MySQLyum install perl-Time-HiResyum 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执行归档数据,简便易行
大数据归档-冷热数据分离相关推荐
- 文件服务器冷热数据划分,游戏服务器冷热数据分离方案
冷热数据分离 当前场景: gamserver启动时,会将所有数据加载到内存中,提高读取数据的性能.但是有很多数据很可能是不常用甚至再也用不到的数据,将这些数据加载到内存中需要占用更多的内存,极大的浪费 ...
- 数据治理-数据生命周期管理-大数据归档与销毁
数据归档 在大数据时代,存储成本显著降低的情况,企业希望在技术方案的能力范围之内尽量存储更多的数据.但大数据时代同样带来了数据的急剧增长,因此数据归档仍然是数据管理必须考虑的问题.与传统的数据备份和数 ...
- 重磅!Micro Focus在Radicati年度数据归档市场象限中被评为行业领导者
近日,Radicati Group Inc.发布了2020年数据归档市场象限分析报告.报告中评估了几个顶级供应商的数据归档解决方案,被评估的企业被归类于不同的象限中.其评估的四个象限包括Mature ...
- mysql 冷热数据分离_elasticsearch冷热数据读写分离
Elasticsearch5.5冷热数据读写分离 前言 冷数据索引:查询频率低,基本无写入,一般为当天或最近2天以前的数据索引 热数据索引:查询频率高,写入压力大,一般为当天数据索引 当前系统日志每日 ...
- 云上如何做冷热数据分离
目录(?)[-] 前言 如何区分冷热数据 冷数据的特点 冷数据的处理 场景一极低频度的查询 冷数据备份 使用冷数据 场景二需要经常查询 方案一冷热RDS 方案二冷数据转存RDS PostgreSQL版 ...
- 冷热分离和直接使用大数据库_基于 MySQL 的热数据与冷数据分离设计与实现
作为一家提供商业气象数据服务的创业公司,我们一直都有一项「欠交的作业」没有完成,那就是合理的数据规划和数据治理规范.对于早期的初创公司而言,可能很难从一开始就能构想到需要对数据存储进行合理的规划并制定 ...
- 冷热分离和直接使用大数据库_「系统架构」如何通过分离冷热数据提升系统性能?...
前言 在IT圈,根据被访问频率的不同,数据通常被分为冷数据和热数据.冷数据是指离线类的或不经常访问的数据,热数据是指在线类的或需要被计算节点频繁访问的数据. 任何热数据,随着时间的推移,最终也会慢慢变 ...
- ELK ILM 策略实现冷热数据分离 持续更新
前言:当ELK平台运行的时间越来越长,对服务器磁盘占用空间就会越来越大,传统的清理index索引数据是脚本+计划任务,虽然能够解决定时清理数据的需求,当索引越来越多,每次都要去修改脚本并不方面.ELK ...
- MySQL基于冷热数据分离优化的LRU刷盘策略
MySQL基于冷热数据分离优化的LRU刷盘策略 前言 对于计算机刷盘这个概念相信大家都非常熟悉了,刷盘策略,其实在操作系统层面来说的话就是页面置换算法. 不知道各位朋友们还记得页面置换算法有哪些吗? ...
最新文章
- Boost.MultiIndex 双向映射示例
- 详解Python垃圾回收机制
- IETF:QUIC Version 1 (RFC 9000) 作为标准化版本现已发布
- windows2003 apache php mysql_Windows 2003搭建Apache PHP MySQL环境经验分享
- 最大乘积(记忆化搜索)
- 计算机右键菜单太多,电脑点击右键太多选项怎么办
- 【JavaScript】图片组无缝轮播的网页编写方法
- python字典的常用方法_python操作字典类型的常用方法
- 爬虫-爬取感兴趣图片(python code 直接运行)
- iOS 使用NJKWebViewProgress做webview进度条(加载网页时获取加载进度)
- Redis简介、安装、配置、启用学习笔记
- 华为认证 HCNACloud 云计算题库
- 如何在阿里云国际上设置邮箱主机
- 更新pip版本的方法
- 小米笔记本Pro黑苹果10.15.2不需要外焊USB接蓝牙,完美支持airdrop、接力、随航
- OA软件详细功能模块列表
- npm install 报错(npm ERR! errno 1)
- MPI点对点通信函数与通信模式
- 解决 Ubuntu 22.04 Fractional Scaling 画面伸缩后应用程序模糊
- vux组件库更换主题颜色的方法
热门文章
- “AI安全”风起云涌,拿下A轮融资的瑞莱智慧如何与群雄共舞?
- 【CozeTalk】关于“富人思维”
- DANet(双重注意力融合网络)与CBAM
- html转换为pdf的笔顺,2018年新部编二年级下册语文写字表字帖(附笔顺).pdf
- OSPF vlink
- 汉字转换拼音 java_java 汉字转换拼音
- 计算机界面没磁盘驱动器,请将磁盘插入驱动器,电脑提示驱动器中没有磁盘怎么办...
- qt5应用程序打包发布和qt5的mysql驱动编译
- php手册下载后打开没有内容,word保存后内容不见了怎么办
- 微信小程序详解 php,微信小程序canvas基础详解