Pika 版本升级2.3.5 ~ 3.0.16
线上低版本的Pika服务最近总是无故宕机,通过dmesg查看报错:BinlogReceiver[14638]: segfault at 7f43a3ffe000 ip 00007f441d89be5b sp 00007f43b67fb8a0 error 4 in libstdc .so.6.0.19[7f441d7fc000 e9000]
看起来是一个段错误,暂时没有好的解决方案。于是决定对线上的Pika服务做一个升级。
Pika在2.3.3版本时为了确保同步的可靠性,增加了server-id验证功能,因此pika2.3.3~pika2.3.6与pika2.3.3之前的版本无法互相同步
- 如果你的pika版本<2.3.3, 你需要准备pika2.3.6及pika3.0.16的bin文件,这里需要注意的是3.0.x需要准备3.0.16以后的版本(或者3.0.6版本),其他版本pika不再能与低版本(2.3.X)进行同步,因此在升级时建议使用最新的3.0.x版本pika来完成整个操作。下文以3.0.16为例。
- 如果你的pika版本>=2.3.3, 你需要准备pika3.0.16的bin文件
1、新扩容一个2.3.5版本的从库
2、为避免主从全量复制失败,将2.3.5版本主库修改binlog文件保留个数为300
config set expire-logs-nums 300
3、在2.3.5版本的线上从库上bgsave,做一个新的备份,生成的info文件保留好
可以看到,bgsave之后,dump文件夹中生成了最近的文件快照,其中info文件保存了主节点的IP、端口以及当前复制的偏移量
代码语言:javascript复制[root@ ]# ll
total 40
drwxrwxr-x 2 root root 4096 Nov 25 2019 bin
drwxrwxr-x 2 root root 4096 Jan 28 2021 conf
drwxr-xr-x 7 root root 4096 Oct 27 17:08 db
drwxr-xr-x 7 root root 4096 Oct 27 17:45 db1
drwxr-xr-x 7 root root 4096 Oct 27 17:08 dbsync
drwxr-xr-x 3 root root 4096 Oct 27 17:36 dump
drwxr-xr-x 2 root root 4096 Apr 8 2020 lib
drwxr-xr-x 2 root root 4096 Oct 27 23:14 log
-rw-r--r-- 1 root root 3709 Oct 27 17:03 pika.conf
drwxrwxr-x 2 root root 4096 Sep 28 2018 tools
[root@]# cd dump/
[root@]# ll
total 40
drwxr-xr-x 2 root root 4096 Oct 27 17:45 hash
-rw-r--r-- 1 root root 37 Oct 27 17:36 info
drwxr-xr-x 2 root root 4096 Oct 27 17:45 kv
drwxr-xr-x 2 root root 4096 Oct 27 17:45 list
drwxr-xr-x 2 root root 4096 Oct 27 17:45 set
drwxr-xr-x 2 root root 20480 Oct 27 17:45 zset
[root@]# cat info
0s
10.79.xx.xx
2900
28485
411241204
4、下载版本为3.0.16的Pika软件,使用3.0.16版本的Pika软件tools工具包中的nemo_to_blackwidow读取备份中的数据生成与新版本3.0.16引擎匹配的数据文件
命令:
/data1/pika2900/tools/nemo_to_blackwidow /data1/pika2900/dump/20211027 /data1/pika2900/db1 -n 10
其中:
第一个路径代表dump出来的数据路径;
第二个路径代表新生成的文件的路径
-n 代表线程数,避免使用过多的系统资源
代码语言:javascript复制[root@]# /data1/pika2900/tools/nemo_to_blackwidow /data1/pika2900/dump/20211027/ /data1/pika2900/db1 -n 4
================== Nemo To Blackwidow ==================
Thread_num : 4
Need write log : no
Max batch limit : 512
Nemo_db_path : /data1/pika2900/dump/20211027/Blackwidow_db_path : /data1/pika2900/db1
Startup Time : Wed Oct 27 17:45:20 2021
========================================================
Open Nemo db success...
Open BlackWidow db success...
Start migrating data from Nemo to Blackwidow...
string keys: 773, hashes keys: 234, lists keys: 36, sets keys: 0, zsets keys: 85825
5、3.0.16 Pika更新配置文件参数:
identify-binlog-type=old
修改这个参数的目的是确保能正常同步低版本pika数据。
转换好的目录db1覆盖db目录,重启3.0.16版本的 Pika
7、使用info文件中的binglog信息同步主库
命令: slaveof ip host binlog offset
slaveof 10.79.xx.xx 2900 28485 411241204
8、观察同步状态是否up,确认同步正常后,等待无延迟后完成
代码语言:javascript复制# Replication(SLAVE)
role:slave
master_host:10.79.xx.xx
master_port:2900
master_link_status:up
slave_priority:100
slave_read_only:1
repl_state: 3
9、同样的方法新部署其他机房的几个服务,主库同机房部署一个用来后续切换
10、邮件通知业务方相关流程和回滚策略,将3.0.16版本Pika做域名解析上线,观察一周
11、确认一切ok后,进行一次主从切换,将3.0.16版本升为主库
12、config set identify-binlog-type new
并利用config rewrite命令修改配置文件中为new;
检查无误后,完成整个升级
更多细节可以参考:https://github.com/OpenAtomFoundation/pika/wiki/如何升级到Pika3.0