iX redis(3)

IX redis(3)

redis数据迁移:

加载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)如下操作:

[[email protected] ~]# cd /ane/redis

[[email protected] redis]# redis-cli -p 6379 keys \*

(empty list or set)

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

……

[[email protected] 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)上操作:

[[email protected] redis]# redis-cli -p 6380

127.0.0.1:6380> keys *

(empty list or set)

127.0.0.1:6380> exit

[[email protected] redis]# vim redis_6380.conf

#save 900 1

#save 300 10

#save 60 10000

dbfilename dump_6380.rdb

dir /ane/redis/6380/

[[email protected] redis]# redis-cli -p 6380 shutdown

[[email protected] redis]# rm -f /ane/redis/6380/dump_6380.rdb

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

[[email protected] redis]# redis-server /ane/redis/6380/redis_6380.conf

[[email protected] 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"

……

[[email protected] redis]# vim /ane/redis/6380/redis_6380.conf

save 900 1

save 300 10

save 60 10000

[[email protected] redis]# redis-cli -p 6380 shutdown

[[email protected] redis]# redis-server /ane/redis/6380/redis_6380.conf

[[email protected] 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)操作:

[[email protected] redis]# pwd

/ane/redis

[[email protected] redis]# redis-cli -p 6380 shutdown  #(关闭从redis后改配置)

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

# slaveof <masterip><masterport>

slaveof 192.168.23.130 6379

[[email protected] redis]# redis-server 6380/redis.conf   #(启动从redis)

在被迁移端(6379)操作:

[[email protected] redis]# redis-cli -p 6379 flushall

OK

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

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

[[email protected] 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

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

#slaveof 192.168.23.1306379

[[email protected] redis]# redis-cli -p 6380 shutdown

[[email protected] redis]# redis-server 6380/redis.conf

[[email protected] 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(被迁移端)上操作如下:

[[email protected] ~]# cd /ane

[[email protected] ane]# yum -y install automake libtool autoconf bzip2

[[email protected] ane]# unzip /usr/local/src/redis-migrate-tool-master.zip -d /ane

[[email protected] ane]# cd redis-migrate-tool-master

[[email protected] redis-migrate-tool-master]# autoreconf -fvi

[[email protected] redis-migrate-tool-master]# ./configure

[[email protected] redis-migrate-tool-master]# make

[[email protected] redis-migrate-tool-master]# vim /etc/profile.d/redis.sh

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

[[email protected] redis-migrate-tool-master]# ./etc/profile.d/redis.sh

[[email protected] redis-migrate-tool-master]# which redis-migrate-tool

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

[[email protected] 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)

[[email protected] redis-migrate-tool-master]# cd..

[[email protected] ane]# redis-cli -c -h 192.168.23.129 -p 6379 keys \*

(empty list or set)

[[email protected] 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集群中插入数据)

[[email protected] 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

[[email protected] ane]# cp redis-migrate-tool-master/rmt.conf redis-migrate-tool-master/rmt.conf.example

[[email protected] 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

[[email protected] ane]# redis-migrate-tool -c redis-migrate-tool-master/rmt.conf -o log.txt -d

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

……

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

……

[[email protected] 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

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

[[email protected] ane]# mv node192.168.23.129\:6380-1489739168552203-11514.rdb node129-6380.rdb

[[email protected] ane]# mv node192.168.23.129\:6381-1489739168455476-11514.rdb node129-6381.rdb

[[email protected] ane]# scp node129-63*[email protected]:/ane   #(传至迁移端)

[[email protected] ane]# redis-migrate-tool-h 127.0.0.1 -p 8888 shutdown   #(关闭redis-migrate-tool)

test2上操作如下:

安装redis-migrate-tool;

[[email protected] 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

[[email protected] 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

[[email protected] ane]# redis-migrate-tool -c redis-migrate-tool-master/rmt.conf -o log.txt -d

[[email protected] ane]# tail -f log.txt

……

[[email protected] 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

[[email protected] ane]# redis-migrate-tool -h 127.0.0.1 -p 8888 shutdown

方二:

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

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

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

在迁移端test2上操作:

[[email protected] ~]# cd /ane

[[email protected] 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

[[email protected] 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

[[email protected] ane]# redis-migrate-tool -c redis-migrate-tool-master/rmt.conf -o log.txt -d

[[email protected] ane]# tail -f log.txt   #(查看是否有报错)

[[email protected] 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

[[email protected] 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

[[email protected] 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

[[email protected] ane]# redis-migrate-tool -h 127.0.0.1 -p 8888 shutdown

时间: 07-08

iX redis(3)的相关文章

Redis+keepalived实现双机热备

一. 简介 安装使用centos 5.6(64) Master 192.168.2.235 Slave 192.168.2.236 Vip 192.168.2.200 编译环境 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel 当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby: 当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha

Redis在Linux中安装使用

一.安装$ wget http://download.redis.io/releases/redis-x.x.x.tar.gz $ tar xzf redis-x.x.x.tar.gz $ cd redis-x.x.x $ make sudo cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-check-rdb redis-trib.rb redis-sentinel redis-server /usr/loca

redis 学习 四 队列

<?php /** * redis实战 * * 利用列表list实现简单队列 * * @example php cache.php */ header('content-type:text/html;chaeset=utf-8'); $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); // 进队列 $userId = mt_rand(000000, 999999); $redis->rpush('QUEUE_NAME',j

Redis实战(三)Redis主从复制

从架构 1.主从架构图 2.通过命令 mkdir redisCluster创建redis集群文件夹 3.通过命令mkdir 6380   mkdir 6381   mkdir 6382在redisCluster文件夹下创建三个文件夹 4.通过以下命令将redis.conf分别拷贝到6380.6381. 6382文件夹下 cp /usr/local/redis/redis-3.0.2/redis.conf  ./6380 cp /usr/local/redis/redis-3.0.2/redis.

Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉.Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品.今天,就分享一下安装Redis集群的过程. 搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口 我的集群分配如下,每个

redis的单机安装与配置以及生产环境启动方案

简单介绍一下redis的单机安装与配置,方便自己记录安装步骤的同时方便他人获取知识. 首先,从官网下载最新版的(稳定版)的redis安装包.官网地址如下:https://redis.io/download 下载源码包后,redis需要编译安装.需要安装gcc和tcl,gcc用于编译tcl用于测试. 使用命令安装gcc,yum install gcc,一路选择yes,gcc就可以安装成功. 接下来安装tcl,首先获取tcl源码包(见百度云盘)或者使用命令:wget http://downloads

Redis学习之Sort Set详解

本文和大家分享的主要是Redis中Sort Set相关内容,一起来看看吧,希望对大家学习redis有所帮助. 游戏服务器需要做一个排行榜实时更新,如果沿用传统的方法,一般是通过后端的定时任务去跑数据来生成排行榜数据,这种方法一方面无法满足产品对功能实时性的要求,另一方面也一定程度上消耗服务器端有限的资源.如果从每次数据库读取数据并进行排名(使用Mysql的sort关键字进行排序),在关卡数据量的级数大时是一种效率低的方法.在查阅大量资料后,发现了Redis中的有序集合(Sort Set). Re

redis 集群

redis 集群 redis集群是redis提供分布式数据库方案, 集群通过分片(Sharding)来进行数据共享,并提供复制和故障转移功能. 节点 redis集群通常由多个节点(node)组成,在开始每个node 都是相互独立的. 要组建成真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群. 命令 cluster meet <ip> <port> 向一个node 发送命令 cluster meet,让节点与ip/port所指定的节点 进行握手(hand

常见redis.conf解析

参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonize no2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定pidfile /var/run/redis.pid3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码