借助tmpfs内存盘,提高pika数据库性能

目前还在测试阶段,稍后会放入生产环境,届时更新文章。

测试服务器采用CODIS+pika分片模式搭建,2个机器,单台2核intel16G内存

先看redis-benchmark的测试
redis-benchmark -e -q -h test-codis-pika-2 -p 19000 -l -r 100000000 -d 10000 -P 100 set __rand_int__ __rand_int__

set __rand_int__ __rand_int__: 100603.62 requests per second

redis-benchmark -e -q -h test-codis-pika-2 -p 19000 -l -r 100000000 -d 10000 -P 100 lpush aa __rand_int__

lpush aa __rand_int__: 71890.73 requests per second

这样的机器,跑出这样的结果,真是让人眼前一亮。

pika配置文件

port : 6379
thread-num : 2
thread-pool-size : 4
sync-thread-num : 2
log-path : /dev/shm/pika/log
db-path : ./db/
write-buffer-size : 33554432 #32M
#write-buffer-size : 268435456 #256M
#write-buffer-size : 536870912 #512M
#write-buffer-size : 1073741824 #1G
arena-block-size :
timeout : 60
requirepass :
masterauth :
userpass :
userblacklist :
instance-mode : sharding
databases : 1
default-slot-num : 1024
replication-num : 0
consensus-level : 0
dump-prefix :
dump-path : ./dump/
dump-expire : 0
pidfile : ./pika.pid
maxclients : 20000
target-file-size-base : 20971520
expire-logs-days : 7
expire-logs-nums : 10
root-connection-num : 2
slowlog-write-errorlog : no
slowlog-log-slower-than : 10000
slowlog-max-len : 128
db-sync-path : ./dbsync/
db-sync-speed : -1
slave-priority : 100
sync-window-size : 9000
max-conn-rbuf-size : 268435456
write-binlog : yes
binlog-file-size : 1048576
max-cache-statistic-keys : 0
small-compaction-threshold : 5000
#max-write-buffer-size : 3221225472
max-write-buffer-size : 10737418240
max-write-buffer-number : 2
max-client-response-size : 1073741824
compression : snappy
max-background-flushes : 2
max-background-compactions : 2
max-cache-files : 64
max-bytes-for-level-multiplier : 10

关键项说明

log-path : /dev/shm/pika/log
pika的性能瓶颈在binlog文件,最初关闭了binlog,write-binlog : no,性能立刻提升,但是没有binlog,无法同步数据,就不能动态扩容。
/dev/shm相当于用内存做虚拟硬盘,详细内容请了解tmpfs,这样就相当于把binlog写入了内存,不必实时写入硬盘。
/dev/shm是Ubuntu系统的路径,使用df -h查询。
/dev/shm大小一般为服务器的一半内存,是8G,所以对于有512的slot的pika服务器,binlog-file-size : 1048576单槽的binlog大小设置为1兆,全部大概为5个G。

/dev/shm重启后,会丢失全部内容,pika启动前需要创建binlog日志目录,脚本如下:

cat /opt/pika/bin/init.sh 
for i in {0..1023}; do mkdir -p /dev/shm/pika/log/log_db0/$i; done

systemd服务配置文件,开机执行这个脚本ExecStartPre=/usr/bin/sh /opt/pika/bin/init.sh

cat /etc/systemd/system/codis-pika.service 
[Install]
WantedBy=multi-user.target

[Unit]
Description=pika -- redis like , data to disk

[Service]
Type=simple
WorkingDirectory=/opt/pika
ExecStartPre=/usr/bin/sh /opt/pika/bin/init.sh
ExecStart=/opt/pika/bin/pika -c /opt/pika/conf/pika.conf
Restart=always
RestartSec=20s
LimitNOFILE=65535

系统还剩余10G内存,设置max-write-buffer-size : 10737418240为10G,给pika数据库的数据存储查询使用。

最终关键配置:

write-buffer-size : 33554432 #32M
max-write-buffer-size : 10737418240 #10G
write-binlog : yes #写binlog水平扩容
log-path : /dev/shm/pika/log #binlog到内存
binlog-file-size : 1048576 #1M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝卜皮1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值