文章目录
- 0. 引言
- 1. pika简介
- 2. pika安装
- 3. pika设置开机自启
- 4. pika主从搭建
- 5. pika哨兵模式实现自动容灾
- 总结
0. 引言
最近因为公司中用到pika组件,于是将研究过程和理解进行系统记录,以供后续参考。
1. pika简介
pika是360开发的一款国产类redis的非关系型数据库,主要用来解决redis在大内存下产生的启动恢复时间长、一主多从代价大、缓存区容易写满等问题。适用于大数据量下的数据查询,比如日志、汇总数据、各种全量数据等。
需要注意的是pika是类redis的,也就意味着它兼容redis的大部分指令和客户端
其支持的客户端可以在github源码库中查看到,以java为例,比较常用的redis客户端jedis,redission都支持pika
源码库地址:https://github.com/OpenAtomFoundation/pika/wiki/%E6%94%AF%E6%8C%81%E7%9A%84%E8%AF%AD%E8%A8%80%E5%92%8C%E5%AE%A2%E6%88%B7%E7%AB%AF
这就意味着,对于pika的客户端对接和使用,可以直接参考redis
pika和redis一样,同样支持5种数据类型string、hash、list、set、zset。针对各数据结构的指令支持情况可见下图
更多可见官方对pika 支持的redis接口及兼容情况的描述
https://github.com/OpenAtomFoundation/pika/wiki/pika-%E6%94%AF%E6%8C%81%E7%9A%84redis%E6%8E%A5%E5%8F%A3%E5%8F%8A%E5%85%BC%E5%AE%B9%E6%83%85%E5%86%B5
pika特性
- 协议兼容:完全兼容 Redis 协议,且极力追求高性能、大容量、低成本、大规模
- 数据结构:支持 Redis 的常用数据结构 String、Hash、List、Zset、Set、Geo、Hyperloglog、Pubsub、Bitmap、Stream、ACL etc
- 冷热数据:对热数据做缓存,将全量数据持久化存储到 RocksDB,并且实现冷热分级存储
- 极大容量:相比于 Redis 的内存存储方式,Pika 支持百 GB 的数据量级,能极大减少服务器资源占用,增强数据的可靠性
- 部署方式:单机主从模式(slaveof)和 Codis 集群模式,扩缩容简单
- 迁移简单:不用修改代码即可平滑从 Redis 迁移到 Pika
- 便于运维:完善的运维命令文档
2. pika安装
下面我们针对pika单机版的安装来进行详细叙述
1、下载安装包,这里我选择了3.5.3版本,tar.gz压缩版中只有一个pika执行文件,缺少配置文件和工具包,所以选择bz2版更加方便
下载地址
2、解压bz2格式的需要提前安装一个bzip2
工具
yum install -y bzip2
3、创建个路径用来安装pika, 然后解压安装包
mkdir /data/pika
tar -xvf pika-linux-x86_64-v3.5.3.tar.bz2
解压后可以看到有一个output路径
4、我们修改一下配置文件中的配置项
thread-num : 4 # 调整为cpu核数值
thread-pool-size : 12 # 一般该值为thread-num的1.5倍,这里我没有调整,直接使用的默认值log-path : /data/pika/output/log/ # 日志文件路径,指定为绝对路径,防止因执行路径不同导致的文件变化
db-path : /data/pika/output/db/ # 数据文件路径,指定为绝对路径,防止因执行路径不同导致的文件变化pidfile : /data/pika/output/pika.pid # pid文件目录
dump-path : /data/pika/output/dump/ # dump目录设置, bgsave后生成的文件将存放在该目录中
db-sync-path : /data/pika/output/dbsync/ # db 同步路径配置参数
pika中的各配置项,可以参加官方说明
https://github.com/OpenAtomFoundation/pika/wiki/pika-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E
同时pika的相关参数调优可以参考https://github.com/OpenAtomFoundation/pika/discussions/1970?sort=old
5、可以通过如下指令手动启动pika
./output/bin/pika -c ./output/conf/pika.conf
可以用各类redis客户端对pika进行连接测试
至此,pika就安装成功了,但在服务器中运行时,为了防止断电、重启等导致的宕机,我们还要设置pika的开机自启
3. pika设置开机自启
1、创建pika.service文件
vi /usr/lib/systemd/system/pika.service
并编辑内容
[Unit]
Description=pika server
Requires=network.target
After=network.target[Service]
Type=forking
WorkingDirectory=/data/pika/output
ExecStart=/data/pika/output/bin/pika -c /data/pika/output/conf/pika.conf
Restart=always[Install]
WantedBy=multi-user.target
2、创建pika.service.d目录
mkdir /etc/systemd/system/pika.service.d
创建limit.conf文件
cat > /etc/systemd/system/pika.service.d/limit.conf <<EOF
# If you need to change max open file limit
# for example, when you change maxclient in configuration
# you can change the LimitNOFILE value below
# see "man systemd.exec" for information[Service]
LimitNOFILE=65536
EOF
3、最后因为要后台启动pika, 我们还需要修改pika中的配置项
vi /data/pika/output/conf/pika.conf
将daemonize
设置为yes,即让pika允许后台启动
4、接下来就可以通过systemctl指令启动、停止pika服务了
# 停止
systemctl stop pika
# 启动
systemctl start pika
# 重启
systemctl restart pika
# 检查启动状态
systemctl status pika
5、添加到开机自启
systemctl enable pika
6、如果启动过程有问题,可以查看output/log下的日志文件进行排查
4. pika主从搭建
pika的主从搭建很简单,与redis类似,只需要在从节点中增加一个slaveof配置即可
1、首先我们先按照上诉步骤,再搭建一个节点
2、然后修改该节点配置文件
port : 9222 # 我这里直接在同一台服务器启动的从节点,所以调整一下端口,如果在不同服务器则不用调整
log-path : /data/pika/output2/log/ # 声明日志文件路径
db-path : /data/pika/output2/db/ # 声明数据文件路径slaveof : 192.168.x.x:9221 # 主节点ip和端口 # 该配置项只在从节点配置,配置后从节点会从该主节点同步数据
其他与主从相关的配置,大家可以根据需要调整
# sync 主从同步时候从库执行主库传递过来命令的线程数量
sync-thread-num : 6# 同步验证密码, 用于slave(从库)连接master(主库)请求同步时进行验证, 该参数需要与master(主库)的requirepass一致
masterauth :# 主从同步流量控制的的窗口,主从高延迟情形下可以通过提高该参数提高同步性能。默认值9000最大值90000。
sync-window-size : 9000# 处理客户端连接请求的最大缓存大小,可配置的数值为67108864(64MB) 或 268435456(256MB) 或 536870912(512MB)
# 默认是268435456(256MB),需要注意的是主从的配置需要一致。
# 单条命令超过此buffer大小,服务端会自动关闭与客户端的连接。
max-conn-rbuf-size : 268435456
3、启动从节点,查看其log/pika.INFO
日志可以看到数据同步记录
至此主从节点就搭建完了,要实现完整的容灾,还可以搭建哨兵模式
5. pika哨兵模式实现自动容灾
根据官方的描述,pika哨兵模式与redis完全一致,所以这里不再累诉,大家可以参考这篇文章:
redis进阶:哨兵模式工作原理及搭建: https://wu55555.blog.csdn.net/article/details/127797798
总结
至此pika安装就完成了,下节我们来看看如何在java项目中集成pika