iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >iX redis(3)
  • 156
分享到

iX redis(3)

iXredis 2023-01-31 02:01:25 156人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

IX Redis(3) 加载rdb文件(或加载aof文件);redis replication; redis-migrate-tool,此工具适用任何场景,是重点:https://GitHub.com/vipshop/redis-migra

IX Redis(3) 

加载rdb文件(或加载aof文件);

redis replication;

 

redis-migrate-tool,此工具适用任何场景,是重点:

https://GitHub.com/vipshop/redis-migrate-tool,Features特点:

Fast.快速;

Multi-Threads.多线程

Based on redis replication.基于redis复制;

Live migration.实时迁移;

In the process of migrating data, the source redis can also provide services for users.迁移过程中,源集群不影响对外提供服务;

Heterogeneous migration.异构迁移;

Twemproxy and redis cluster support.支持twemproxy集群,redis集群,rdb文件和aof文件;

When the target is twemproxy, keys are direct imported into redis behind the twemproxy.过滤功能;

Migration Status view.迁移状态显示;

Data Verification Mechanism.完善的数据抽样校验;

source来源可以是:单redis实例、redis cluster、rdb文件、aof文件、twemproxy集群;

target目标可以是:单redis实例、redis cluster、rdb文件、twemproxy集群;


配置文件rmt.conf常用配置项如下:

type: The group redis type. Possible values are:

single

twemproxy

redis cluster

rdb file

aof file

servers: The list of redis address in the group. If type is twemproxy, this is same as the twemproxy config file. If type is rdb file, this is the filename.

listen: The listening address and port (name:port or ip:port). Defaults to 127.0.0.1:8888.

 

以下操作有:单节点迁到单节点、redis集群迁到redis集群,各用两种方法,其中:

单节点迁到单节点(方一,直接复制并加载rdb或aof文件;方二,利用redis复制机制);

redis集群迁到redis集群(两种方法都使用redis-migrate-tool工具;方一,网络隔离情况时,在被迁移端导出rdb文件,再到迁移端加载;方二,相同网段时,在线迁移);

 

1、redis单节点数据迁到另一单节点上:

方一:

利用redis启动时加载rdb二进制文件方式(或加载aof文本文件方式),直接将被迁移端的dump.rdb文件(即snapshotting快照文件)上传至迁移端主机;

被迁移端注意:

停连接redis的应用,即禁止往redis里写数据;

在redis交互模式下执行>bgsave   #(即重新fork一个线程,用于将当前内存中的数据持久化到磁盘上;若使用加载aof文件,此步用>bgrewriteaof命令);

迁移端注意:

将被迁移端的dump.rdb上传至迁移端指定路径下,即要与配置文件中dir和dbfilename配置项一致;

启动前将配置文件中的rdb持久化配置项注释掉,此步重要,即注释掉配置文件中默认的如下三行:

#save 900 1

#save 300 10

#save 60 10000

 

操作:

此例是在一台主机上启动两个redis实例(6379和6380),将6379上的数据迁到6380上;

在被迁移端(6379)如下操作:

[root@test2 ~]# cd /ane/redis

[root@test2 redis]# redis-cli -p 6379 keys \*

(empty list or set)

[root@test2 redis]# for i in `seq 1 100` ; do redis-cli -p 6379 set key$i value$i ; done  #(模拟产生数据)

……

[root@test2 redis]# redis-cli -p 6379

127.0.0.1:6379> keys *

……

127.0.0.1:6379> bgsave

Background saving started

127.0.0.1:6379> exit

 

在迁移端(6380)上操作:

[root@test2 redis]# redis-cli -p 6380

127.0.0.1:6380> keys *

(empty list or set)

127.0.0.1:6380> exit

[root@test2 redis]# vim redis_6380.conf

#save 900 1

#save 300 10

#save 60 10000

dbfilename dump_6380.rdb

dir /ane/redis/6380/

[root@test2 redis]# redis-cli -p 6380 shutdown

[root@test2 redis]# rm -f /ane/redis/6380/dump_6380.rdb

[root@test2 redis]# cp dump.rdb /ane/redis/6380/dump_6380.rdb  #(dump.rdb为6379上的持久化数据)

[root@test2 redis]# redis-server /ane/redis/6380/redis_6380.conf

[root@test2 redis]# redis-cli -p 6380

127.0.0.1:6380> keys *

  1)"key64"

  2)"key29"

  3)"key55"

  4)"key67"

  5)"key12"

  6)"key39"

  7)"key26"

  8)"key82"

  9)"key57"

 10)"key48"

……

[root@test2 redis]# vim /ane/redis/6380/redis_6380.conf

save 900 1

save 300 10

save 60 10000

[root@test2 redis]# redis-cli -p 6380 shutdown

[root@test2 redis]# redis-server /ane/redis/6380/redis_6380.conf

[root@test2 redis]# redis-cli -p 6380

127.0.0.1:6380> keys *

  1)"key85"

  2)"key23"

  3)"key94"

  4)"key41"

  5)"key76"

  6)"key24"

  7)"key55"

  8)"key67"

  9)"key43"

 10)"key90"

 11)"key84"

 12)"key86"

……

127.0.0.1:6380> exit

 

方二:

用redis replication复制机制,用于两主机在相同网段或两主机可互通的情况下;

注意主从次序,主端数据被清空,若从仍开启slaveof项时,从上数据也会被清空,两端数据是实时同步的;

在迁移端(6380)操作:

[root@test2 redis]# pwd

/ane/redis

[root@test2 redis]# redis-cli -p 6380 shutdown  #(关闭从redis后改配置)

[root@test2 redis]#vim 6380/redis.conf   #(在迁移端即主从模式的从服务器设置主的ip和port,也可在交互模式下配置>slaveof 192.168.23.130 6379)

# slaveof <masterip><masterport>

slaveof 192.168.23.130 6379

[root@test2 redis]# redis-server 6380/redis.conf   #(启动从redis)

 

在被迁移端(6379)操作:

[root@test2 redis]# redis-cli -p 6379 flushall

OK

[root@test2 redis]# for i in `seq 100 1000`; do redis-cli -p 6379 set key$i value$i &> /dev/null ; done   #(模拟产生数据,到迁移端查看是否有)

 

在迁移端(6380)上查看是否有数据:

[root@test2 redis]# redis-cli -p 6380

127.0.0.1:6380> exists key1000

(integer) 1

127.0.0.1:6380> exists key100

(integer) 1

127.0.0.1:6380> exit

[root@test2 redis]# vim 6380/redis.conf   #(待数据传完后,改配置,重启;或在命令行交互模式下执行>slave NO ONE,并改配置文件)

#slaveof 192.168.23.1306379

[root@test2 redis]# redis-cli -p 6380 shutdown

[root@test2 redis]# redis-server 6380/redis.conf

[root@test2 redis]# redis-cli -p 6380

127.0.0.1:6380> exists key100

(integer) 1

127.0.0.1:6380> exists key1000

(integer) 1

127.0.0.1:6380> exit

 

 

2、redis 集群数据迁到另一redis集群:

使用redis-migrate-tool工具;

操作:

将test1主机redis集群中的数据迁到test2主机;

方一:

适合两台主机不在一个网段,网络隔离情况;

test1和test2均需安装redis-migrate-tool,利用此工具先将test1主机上的redis集群中的数据导出为rdb文件,再将rdb文件上传至test2并恢复到redis集群中;

 

test1(被迁移端)上操作如下:

[root@test1 ~]# cd /ane

[root@test1 ane]# yum -y install automake libtool autoconf bzip2

[root@test1 ane]# unzip /usr/local/src/redis-migrate-tool-master.zip -d /ane

[root@test1 ane]# cd redis-migrate-tool-master

[root@test1 redis-migrate-tool-master]# autoreconf -fvi

[root@test1 redis-migrate-tool-master]# ./configure

[root@test1 redis-migrate-tool-master]# make

 

[root@test1 redis-migrate-tool-master]# vim /etc/profile.d/redis.sh

export PATH=$PATH:/ane/redis/bin:/ane/redis-migrate-tool-master/src

[root@test1 redis-migrate-tool-master]# ./etc/profile.d/redis.sh

[root@test1 redis-migrate-tool-master]# which redis-migrate-tool

/ane/redis-migrate-tool-master/src/redis-migrate-tool

[root@test1 redis-migrate-tool-master]# redis-migrate-tool -h

……

  -d,--daemonize        : run as a daemon

  -o,--output=S         : set logging file(default: stderr)

  -c,--conf-file=S      : set configurationfile (default: rmt.conf)

  -C,--command=S        : set command toexecute (default: redis_migrate)

[root@test1 redis-migrate-tool-master]# cd..

 

[root@test1 ane]# redis-cli -c -h 192.168.23.129 -p 6379 keys \*

(empty list or set)

[root@test1 ane]# for i in `seq 101 2000` ; do redis-cli -c -h 192.168.23.129 -p 6379 set key$i value$i &> /dev/null ; done   #(模拟往test1主机上的redis集群中插入数据)

[root@test1 ane]# redis-cli -c -h 192.168.23.129 -p 6379

192.168.23.129:6379> exists key101

(integer) 1

192.168.23.129:6379> exists key2000

-> Redirected to slot [9780] located at192.168.23.129:6380

(integer) 1

192.168.23.129:6380> exit

 

[root@test1 ane]# cp redis-migrate-tool-master/rmt.conf redis-migrate-tool-master/rmt.conf.example

[root@test1 ane]# vim redis-migrate-tool-master/rmt.conf

[source]

type: redis cluster

servers:

 - 192.168.23.129:6379

[target]

type: rdb file

[common]

listen: 0.0.0.0:8888

[root@test1 ane]# redis-migrate-tool -c redis-migrate-tool-master/rmt.conf -o log.txt -d

[root@test1 ane]# tail -f log.txt   #(查看日志是否报错)

……

[root@test1 ane]# cat log.txt   #(日志中有详细操作过程)

……

[root@test1 ane]# ll -h   #(在当前目录下生成了三个rdb文件(该集群是6个节点,3主3从),将这三个文件上传到迁移端恢复即可)

total 60K

-rw-r--r--. 1 root root 4.2K Mar 17 01:26log.txt

-rw-r--r--. 1 root root  12K Mar 17 01:26 node192.168.23.129:6379-1489739168652097-11514.rdb

-rw-r--r--. 1 root root  12K Mar 17 01:26 node192.168.23.129:6380-1489739168552203-11514.rdb

-rw-r--r--. 1 root root  12K Mar 17 01:26 node192.168.23.129:6381-1489739168455476-11514.rdb

drwxr-xr-x. 9 root root 4.0K Mar  2 18:52 redis

drwxr-xr-x. 9 root root 4.0K Mar 17 01:23redis-migrate-tool-master

-rwxr-xr-x. 1 root root  163 Mar 3 00:32 shutdown_redis.sh

-rwxr-xr-x. 1 root root  140 Mar 3 00:34 startup_redis.sh

[root@test1 ane]# mv node192.168.23.129\:6379-1489739168652097-11514.rdb node129-6379.rdb   #(将生成的这三个文件改名,防止特殊字符(如冒号等)影响操作)

[root@test1 ane]# mv node192.168.23.129\:6380-1489739168552203-11514.rdb node129-6380.rdb

[root@test1 ane]# mv node192.168.23.129\:6381-1489739168455476-11514.rdb node129-6381.rdb

[root@test1 ane]# scp node129-63*.rdbroot@192.168.23.130:/ane   #(传至迁移端)

[root@test1 ane]# redis-migrate-tool-h 127.0.0.1 -p 8888 shutdown   #(关闭redis-migrate-tool)

 

test2上操作如下:

安装redis-migrate-tool;

[root@test2 ane]# redis-cli -c -h 192.168.23.130-p 6379

192.168.23.130:6379> keys *

(empty list or set)

192.168.23.130:6379> exit

[root@test2 ane]# vim redis-migrate-tool-master/rmt.conf

[source]

type: rdb file

servers:

 - /ane/node129-6379.rdb

 - /ane/node129-6380.rdb

 - /ane/node129-6381.rdb

[target]

type: redis cluster

servers:

 - 192.168.23.130:6379

[common]

listen: 0.0.0.0:8888

[root@test2 ane]# redis-migrate-tool -c redis-migrate-tool-master/rmt.conf -o log.txt -d

[root@test2 ane]# tail -f log.txt

……

[root@test2 ane]# redis-cli -c -h 192.168.23.130 -p 6379

192.168.23.130:6379> exists key101

(integer) 1

192.168.23.130:6379> exists key2000

-> Redirected to slot [9780] located at192.168.23.130:6380

(integer) 1

192.168.23.130:6380> keys *

……

192.168.23.130:6380> exit

[root@test2 ane]# redis-migrate-tool -h 127.0.0.1 -p 8888 shutdown  

 

方二:

适合两台主机在一个网段,在线迁移:

确保两台主机的redis集群都在运行状态;

两个主机(被迁移端和迁移端)任意一个上安装redis-migrate-tool即可,此例是在test2上安装;

在迁移端test2上操作:

[root@test2 ~]# cd /ane

[root@test2 ane]# redis-cli -c -h 192.168.23.130 -p 6379

192.168.23.130:6379> flushall

OK

192.168.23.130:6379> keys *

(empty list or set)

192.168.23.130:6379> exit

 

[root@test2 ane]# vim redis-migrate-tool-master/rmt.conf

[source]

type: redis cluster

servers:

- 192.168.23.129:6379

[target]

type: redis cluster

servers:

- 192.168.23.130:6379

[common]

listen: 0.0.0.0:8888

[root@test2 ane]# redis-migrate-tool -c redis-migrate-tool-master/rmt.conf -o log.txt -d

[root@test2 ane]# tail -f log.txt   #(查看是否有报错)

[root@test2 ane]# redis-cli -c -h 192.168.23.130 -p 6379   #(查看是否有数据)

192.168.23.130:6379> exists key2000

-> Redirected to slot [9780] located at192.168.23.130:6380

(integer) 1

192.168.23.130:6380> exit

 

[root@test2 ane]# redis-cli-h 127.0.0.1 -p 8888   #(连接redis-migrate-tool监控的端口)

127.0.0.1:8888> info

# Server

version:0.1.0

os:linux 2.6.32-431.el6.x86_64 x86_64

multiplexing_api:epoll

GCc_version:4.4.7

process_id:25904

tcp_port:8888

uptime_in_seconds:196

uptime_in_days:0

config_file:/ane/redis-migrate-tool-master/rmt.conf

 

# Clients

connected_clients:1

max_clients_limit:100

total_connections_received:1

 

# Memory

mem_allocator:jemalloc-4.0.4

 

# Group

source_nodes_count:3

target_nodes_count:3

 

# Stats

all_rdb_received:1

all_rdb_parsed:1

all_aof_loaded:0

rdb_received_count:3

rdb_parsed_count:3

aof_loaded_count:0

total_msgs_recv:1901

total_msgs_sent:1901

total_net_input_bytes:35215

total_net_output_bytes:76137

total_net_input_bytes_human:34.39K

total_net_output_bytes_human:74.35K

total_mbufs_inqueue:0

total_msgs_outqueue:0

127.0.0.1:8888> exit

 

[root@test2 ane]# redis-migrate-tool-c redis-migrate-tool-master/rmt.conf -o log.txt -C redis_check   #(数据校验)

Check job is running...

 

Checked keys: 1000

Inconsistent value keys: 0

Inconsistent expire keys : 0

Other check error keys: 0

Checked OK keys: 1000

 

All keys checked OK!

Check job finished, used 0.045s

[root@test2 ane]# redis-migrate-tool -h 127.0.0.1 -p 8888 shutdown

 

 

 


--结束END--

本文标题: iX redis(3)

本文链接: https://www.lsjlt.com/news/186103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • iX redis(3)
    IX redis(3) 加载rdb文件(或加载aof文件);redis replication; redis-migrate-tool,此工具适用任何场景,是重点:https://github.com/vipshop/redis-migra...
    99+
    2023-01-31
    iX redis
  • 3.redis集群部署3主3从
    redis集群部署 一:安装redis (使用redis3.0.6版本),同《1.redis安装》1.下载源码$ tar xzf redis-3.0.6.tar.gz$ cd redis-3.0.6$ make   2、编译完成后,在Src...
    99+
    2023-01-31
    集群 redis
  • Redis教程(3)
    2)hashRedis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占...
    99+
    2023-01-31
    教程 Redis
  • Redis-3. Redis高级命令
    高级命令三:主从复制1、主从复制:目的是实现读写分离·Master可以拥有多个slave·多个slave可以连接同一个Master外,还可以连接其他的slave·主从复制不会阻塞master,在同步数据时,master可以继续处理clien...
    99+
    2023-01-31
    命令 高级 Redis
  • redis cluster (3) 配置
    一、redis 持久化说明1) 手工持久化   SAVE(同步回写)和 BGSAVE(异步回写) 两个命令都会调用 rdbSave 函数,它们都实现RDB持久化,但它们调用的方式各有不同:  SAVE 直接调用 rdbSave ,阻塞 R...
    99+
    2023-01-31
    redis cluster
  • redis演练(3) redis事务管理
    redis vs memcached。redis与memcached对比,redis不仅适合做缓存,而且可以做存储,这就有点数据库的影子了。说到数据库,事务是一个很重要的一个方面。数据库事务(简称:事务)是...
    99+
    2024-04-02
  • redis集群不通过reids-trib脚本创建3主3从redis集群的示例分析
    这篇文章主要介绍redis集群不通过reids-trib脚本创建3主3从redis集群的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  1、启动126,127,128 3个7000端口redis(...
    99+
    2023-06-06
  • 2021年最新Redis面试题汇总(3)
    目录1、Redis 怎么保证高可用、有哪些集群模式2、主从复制​3、哨兵1)哨兵故障检测2)哨兵故障转移流程4、集群模式​5、集群选举6、如何保证集群在线扩容...
    99+
    2024-04-02
  • Redis去重的3种不同方法汇总
    目录前言1.基于 set2.基于 bit3.基于 HyperLogLog4. 基于bloomfilter总结前言 这篇文章主要介绍了Redis实现唯一计数的3种方法分享,本文讲解了基...
    99+
    2024-04-02
  • Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】
    Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】 一、Docker常规软件安装1.1 docker 安装 tomcat(默认最新版)1.2 docker 指定安装 ...
    99+
    2023-09-05
    运维 mysql 主从复制 redis集群3主3从 redis集群扩缩容案例 容器 云原生 虚拟化技术 mysql redis 原力计划
  • 编写Python 代码出现 AttributeError: ‘DataFrame‘ object has no attribute ‘ix‘ 报错
    在编写如下 python 代码过程中出现:AttributeError: ‘DataFrame’ object has no attribute ‘ix’ fdata.ix[fdata['time']...
    99+
    2023-09-24
    python 开发语言
  • 2008-3-3
    发现eva老是出现问题,版本过时。。现在用了webim就是舒服多了[url]http://www-c2.meebo.com.cn/index.html[/url]注册一下,可以绑定msn和qq,不需要再安装其他软件啦。哈哈ubuntu下安装...
    99+
    2023-01-31
  • redis sentinel集群为什么要3个以上的节点
    这篇文章将为大家详细讲解有关redis sentinel集群为什么要3个以上的节点,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。3个以上是通过增加 sent...
    99+
    2024-04-02
  • 马哥3-3
    命令别名:        alias在shell中定义的别名只在当前shell生命周期有效,别名的有效范围为当前shell进程        unalias  撤销 命令替换        $,  反引号文件名通配:*:任意长度的任意字符?...
    99+
    2023-01-31
    马哥
  • 2017.12.27 3周3次课
    三周第三次课(12月27日)3.7 su命令3.8 sudo命令3.9 限制root远程登录3.7 su命令su命令就是切换用户的工具,通过su可以在用户之间切换,如果超级权限用户root向普通用户切换不需要密码,而普通用户切换到其它任何用...
    99+
    2023-01-31
  • 3-3 SQL Server 2005数
    3-3 SQL Server 2005数据库优化 u      了解数据库引擎优化顾问基本内容 u      掌握数据库引擎优化顾问的使用 u      掌握通过命令行的方式进行索引的优化——DTA     一个数据库系统的性能依赖于组成...
    99+
    2023-01-31
    SQL Server
  • ×××3
       ...
    99+
    2023-01-31
  • ⒉设置 Bash 选项[3-3]
    <!-- @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimS...
    99+
    2023-01-31
    选项 Bash
  • python学习整理--3/3
    今天又重新学起了python这门语言,带着新的目的和又涨一岁的自己,其实早在去年的暑期曾学过一段时间,但是最后无疾而终,这次我真心希望可以掌握一门实用的语言来充实自己,之前的学的不论是c还是java,自我感觉除了做题以外一点都用不上,但感觉...
    99+
    2023-01-31
    python
  • 树莓派3(Raspberry Pi 3)
    ·树莓派3(Raspberry Pi 3)安装Win10 IOT1、格式化SD卡(用SDFormatter工具) 2、下载noobs lite即可(https://www.raspberrypi.org/downloads/noobs/),...
    99+
    2023-01-31
    树莓派 Raspberry Pi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作