目前还在测试阶段,稍后会放入生产环境,届时更新文章。
测试服务器采用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