安装机器

环境参数:4cpu 内存8G 磁盘大小250G
10.19.*.140  主
10.19.*.141  从磁盘类型判断:rota为1则表示磁盘可旋转,那么就是HDD;如果返回0,则表示磁盘不可以旋转,那么就有可能是SSD。
lsblk -d -o name,rota 执行结果如下:sda为SSD fd0和sr0为HDD
name rota
fd0 1
sda 0
sr0 1

docker启动安装

启动主服务
docker search pika
docker pull pikadb/pika  --拉镜像
vi pika.conf  --进入配置文件修改后台启动daemonize为yes
docker run -it -d  -p 9876:9221 pikadb/pika  --后台启动
docker exec -it containerid bash  --进入容器
./bin/pika -c conf/pika.conf   --进入文件启动pika(启动命令)启动从服务与主操作基本相同相同,不同点
1.修改启动端口 9877:9221
2.配置主从,进入pika.conf配置文件 进行修改 slaveof ip port相关启动命令docker ps --查看进程docker start 9fe26a76668bdocker stop 9fe26a76668bdocker restart 9fe26a76668bdocker kill -s kill 9fe26a76668b 强制杀死docker rename containerid newname 重命名容器docker inspect 9fe26a76668b 查看容器ip

pika文件存储

内存加磁盘
磁盘文件删除后,要执行flushall才会重建文件

pika docker启动问题处理 

问题1:启动不生效docker容器启动的同时内部也要启动docker run -it -d  -p 9876:9221 pikadb/pika  --后台启动docker exec -it containerid bash  --进入容器./bin/pika -c conf/pika.conf   --进入文件启动pika(启动命令)问题2:前台启动可修改配置文件daemonize为no再启动可查看主从连接情况问题3:重启主之后,从的连不上docker启动时每次启动时iP会修改,所以主启动时要指定ip启动,或是在容器内杀掉进程后启动不会改变ipps -ef|grep pikakill -9 47./bin/pika -c conf/pika.conf 

磁盘使用量估算原理

查看文件大小时可执行命令:
echo info | /usr/local/redis/bin/redis-cli -p 9221 | grep db_size_human
由公式key+value+attach=C求取attach值得出以下估算公式
string 容量估算 = key 个数 * (key 字节数 + value 字节数 + attach (30字节))
String key value 净存量(M) 实际存量(M) attach(实-净)(M) 单条attach(B)
10w 13 0 1.269 3.809 2.54 26.63
- 13 13 2.539 5.079 2.558 26.82
- 65 0 6.1988 8.888 2.69 28.21
- 65 65 12.695 15.603 2.908 30.49
20w 13 0 2.539 7.618 5.079 26.63
- 13 13 5.078 10.158 5.08 26.63
- 65 0 12.695 17.777 5.082 26.64
- 65 65 25.391 30.475 5.084 27.93
由公式Key+n(field+value+attach)=C求取attach值hash 容量估算 =key个数 * [key字节数 + n * (field字节数 + value字节数 + attach(45字节))]
hash key(B) field(B) value(B) 净存量(M) 实际存量(M) 单条attach(B)
10w 13 0 0 1.269 7.228  
- 13 2*14 0 4.003 12.5 45.04
- 13 2*14 13*2 6.543 15.042 45.36
20w 13 0 0 2.539 14.456  
- 13 2*14 0 8.006 25 45.04
- 13 2*14 13*2 13.086 30.114 45.44
50w 13 0 0 6.348 36.140  
- 13 2*14 0 20.0195 62.5 45.04
- 13 2*14 13*2 32.715 75.221 45.37
list与set类型观察总attach会发现attach是附着在value上的,根据规律得出单条attach的值
list 容量估算 =key字节数 + n * (value字节数 + attach(33字节))
list key value 净存量(B) 实际存量(B) 总attach(实-净)(B) 单条attach(B)
- 13 100000*13 1300013 4601047 3301034 33
- 13 200000*13 2600013 9202027 6602014 33
- 13 300000*13 3900013 13803014 9903001 33
set 容量估算 =key字节数 + n * (value字节数 + attach(25字节))
set key value 净存量(B) 实际存量(B) 总attach(实-净)(B) 单条attach(B)
- 13 100000*13 1300013 3800852 2500839 25
- 13 200000*13 2600013 7601664 5001651 25
- 13 300000*13 3900013 11402476 7502463 25
- 100000*13 0 1300000 7201512 5901512  
- 200000*13 0 2600000 14403031 118030031  

pika超时机制

现象1:key设置过期时间,删除数据后,会发现文件中的数据没有删除掉,再存入新的相同的key也可以存入
现象2:相同的key在硬盘中不会覆盖,可以获取到最新的原因:数据在存储时在数据末尾加上了用于记录的时间戳,如果时间戳里记录的时间比当前时间要小,说明数据已经过去,这时候就不会返回给上层,但是实际的数据可能还存db层。引发问题:如何清理过期数据?
解决方法:手动删除使用compact会统一删除过期数据compact介绍:
1.自动全量的compact:通过配置的参数每天定时触发一次自动全量compact,特别适合存在多数据结构。参数结构:“启动时间(小时)-结束时间(小时)、磁盘空间空余空间百分比”,例如需要配置一个每天在凌晨,同时该任务仅仅在磁盘空余时间不低于30%的时候执行,那么应配置为:03-04/30,该参数默认为空
2.自动全量compact,和compact-cron区别为,compact-cron每天仅在指定时间段执行,而compact循环执行,例如需要配置一个每4个小时执行一次的自动compact任务,同时该任务仅仅在磁盘空余空间应配置为:4/30该默认参数为空
3.compact期间可能会额外占用磁盘空间, 连接数不会增加,约要预留db大小的20%给compact底层会在某些时候触发局部compact, 也可以在Pika端执行compact命令手动触发全局compact(同一个Key的记录,以Sequence Number最大的那个为准)

主从数据同步时间测试

前提:服务器上本地运行(为了防止有网络传输影响)
主输入10w数据完成开始,到从服务读取到主服务输入的最后一个数据的时间差1548667123413-1548667123409=4ms此数据不一定代表主从同步的时间,待进一步验证for (int i=0;i<100000;i++){String s=StringUtils.leftPad(i+"",12,"0");String key = "y"+s;masterRedisPoolFactory.setValue(key,key);}System.out.println(System.currentTimeMillis());while(true){String s=slaveRedisPoolFactory.getValue("y0000000100000");if (s!=null){break;}}System.out.println(System.currentTimeMillis());

百万数据遍历时间测试

前提:服务器上本地运行(为了防止有网络传输影响)
遍历数据使用的scan命令,每次查询10万条数据,共查询100万,执行10次,平均遍历速度100万/467msLong start = System.currentTimeMillis();Jedis jedis=slaveRedisPoolFactory.getJedis();ScanParams scanParams = new ScanParams();scanParams.count(100000);//每10万条查询Long startTime = System.currentTimeMillis();List<String> retList = new ArrayList<String>();//存放遍历出来的数据String scanRet = "0";do {ScanResult<String> ret = jedis.scan(scanRet,scanParams);scanRet = ret.getStringCursor();// 返回用于下次遍历的游标retList.addAll(ret.getResult());// 返回结果} while (!scanRet.equals("1000000"));Long endTime = System.currentTimeMillis();log.info("retList size:[{}],using time is:[{}]ms",retList.size(),(endTime - startTime));

线上问题(暂未验证)

问题1.Get child directory when try to do db sync failed线上报这个错,slave同步不了
answer:这个过程就是pika全量同步并转换为增量同步的过程:是把dump目录整个拷到slave替换掉db目录,然后启动从库,查看info文件,记录里面的同步位置,然后通过slaveof指定该位置同步问题2.Pika对一个Key反复写入确实可能会导致硬盘占用持续增长问题3.写入量很大,然后一段时间之后卡死,server直接hang死 ,重启后 rocksdb进程仍占99.9%cpu?
iostat -mxt 1 (磁盘为SSD盘)查看await的值(一般达到10已经为上限)
这个问题可以这样解释:写入数据的速度大于rocksdb的memtable的刷盘速度,IO吃不消
而没有及时刷盘的memtable不断的积压,最终达到了写保护的阈值,造成写入hang死。然后这个时候仍然有很多memtable没刷盘,此时实例被重启,然后启动的时候rocksdb需要通过WAL来处理这些数据,然后就是现在看到的样子,但现在磁盘还是吃不消的样子,所以这个意外重启的恢复估计还要跑一阵一台机器一般3~10个pika吧,看压力,动态调整,这个机器吃不消就挪到其它机器上几个实例这样

【中间件】pika安装及性能测试相关推荐

  1. 分布式数据库中间件 MyCat 安装及使用

    分布式数据库中间件 MyCat 安装及使用 关于 MyCat 的铺垫文章已经写了三篇了: MySQL 只能做小项目?松哥要说几句公道话! 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下! ...

  2. CentOS上安装Web性能测试工具Siege 示例

    2019独角兽企业重金招聘Python工程师标准>>> 本文记录一次在CentOS上安装Web性能测试工具Siege的步骤,并对安装过程中遇到的问题进行解决~ Siege是什么? S ...

  3. MySQL中间件Atlas安装及使用

    简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量 ...

  4. weblogic部署linux静默安装,Linux环境下Weblogic11g中间件-静默安装详解

    第一步: 安装产品 1.配置好java环境变量 java -version查看是否生效,weblogic11g要求最好用1.6以上JDK进行安装配置 2.找到安装介质执行命令:java -jar wl ...

  5. linux+rel+安装教程,pika安装教程

    快速试用 如果想快速试用pika,目前提供了Centos5,Centos6和Debian(Ubuntu16) binary版本,可以在release页面看到,具体文件是pikaX.Y.Z_xxx_bi ...

  6. StarRocks安装及性能测试 - 好记性不如烂笔头

    starRocks(dorisdb) 安装 参考官方文档 进行单机部署,FE.BE.Broker各一个. 下载程序包 cd /workspacewget -O dorisDb.tar.gz https ...

  7. pika安装以及测试

    由于需要git源码,而且安装方法就在该网址下方,就不多介绍了,注意就是需要安装好snappy,glog git地址: https://github.com/Qihoo360/pika/blob/mas ...

  8. 【狂神说Java】Redis最新超详细版教程通俗易懂1 2020-04-01:NoSQL分类,Redis Windows和Linux安装,性能测试,String,List,Set,Hash,Zset

    要讲的知识 nosql讲解 阿里巴巴架构演进 nosql数据模型· Nosql 四大分类. CAP BASE Redis 入门 Redis安装(Window & Linux服务器) 五大基本数 ...

  9. 海量数据大课学习笔记(5)-阿里云Linux服务器选配和常用中间件环境安装-小滴课堂

    文章目录 前言 第1集 云服务器配置和搭建Docker相关讲解 第2集 云服务器基础设施安装之Mysql8.0+Redis6.X安装 第3集 云服务器基础设施安装之Nacos2.x+Mysql8配置持 ...

  10. Redis学习之Redis概述与安装以及性能测试

    Redis入门 概述 Redis是什么 Redis(remote dictionary server)远程字典服务器 是一个开源的使用c语言编写.支持网络.可基于内存亦可持久化的日志型.key-val ...

最新文章

  1. K折交叉验证(StratifiedKFold与KFold比较)
  2. ajax登陆返回值判断,一个简单的ajax用户登陆返回值问题?有代码
  3. AtCoder AGC036D Negative Cycle (图论、DP)
  4. 非常实用的 Python 库,推一次火一次
  5. go编译成c语言,Go语言是怎么完成编译的
  6. java 子类继承父类_关于Java 的继承问题,子类会继承父类的哪些东西?-----转载...
  7. 一文讲透数仓临时表的用法
  8. opencv 编译静态库
  9. 配置zend studio的代码格式化文件及远程单步调试
  10. focal loss dice loss源码_扒源码:sharding loss in Pytorch
  11. ios12后,获取不到WIFI(SSID)相关信息
  12. CentOS 6系统FreeSwitch和RTMP服务 安装及演示(四)
  13. linux 查看端口
  14. mysql python用法_python-mysql基本用法
  15. Linux下安装rarlinux
  16. 【图神经网络】ChebyNet-切比雪夫多项式近似图卷积核
  17. js切换图片会闪动_js图片闪动特效可以控制间隔时间如几分钟闪动一下
  18. Visual C++网络编程经典案例详解 第9章 实用播放器 编程基础 播放mp3文件 读取文件
  19. 程序员的插画成长之路并不平坦
  20. 图形学数学基础之1D采样分布计算方法Inverse Method

热门文章

  1. Python爬取满7天赎回零费率基金:短线基金定投
  2. 脚手架的安装及配置过程
  3. QQ便签不见了怎么办?腾讯QQ便签停止运营下架后导出恢复QQ便签内容的解决办法
  4. linux 64 输入法下载,搜狗输入法 for Linux
  5. 2019牛客暑期多校训练营(第八场) Explorer (线段树分治+区间离散化)
  6. UnityVR-初识Unity-实践-制作一个工程场景
  7. 电影光盘的vob格式视频如何转换成mp4格式
  8. 渥太华大学计算机科学COOP,渥太华大学专业哪个好
  9. leetcode题解日练--2016.8.29
  10. 通过定义函数,来实现判断1-100之间奇数的目的