iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >redis-cluster部署及数据迁移
  • 612
分享到

redis-cluster部署及数据迁移

2024-04-02 19:04:59 612人浏览 独家记忆
摘要

工作原理 节选自Redis官方文档:Http://www.redis.cn/topics/cluster-tutorial.html Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共

工作原理

节选自Redis官方文档:Http://www.redis.cn/topics/cluster-tutorial.html

Redis集群介绍

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:

  • 自动分割数据到不同的节点上。
  • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

    Redis 集群的数据分片

    Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.
    Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:

  • 节点 A 包含 0 到 5500号哈希槽.
  • 节点 B 包含5501 到 11000 号哈希槽.
  • 节点 C 包含11001 到 16384号哈希槽.

这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我像移除节点A,需要将A中得槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.

Redis 集群的主从复制模型

为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.
在我们例子中具有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用.
然而如果在集群创建的时候(或者过一段时间)我们为每个节点添加一个从节点A1,B1,C1,那么整个集群便有三个master节点和三个slave节点组成,这样在节点B失败后,集群便会选举B1为新的主节点继续服务,整个集群便不会因为槽找不到而不可用了
不过当B和B1 都失败后,集群是不可用的.


redis安装过程

1、下载redis安装包

2、解压

cd /app
tar zxf redis-3.2.11.tar.gz 
mv redis-3.2.11.tar.gz redis

3、编译安装

cd redis

make && make install

4、创建相关目录,将相关命令从src目录复制到bin目录

mkdir -pv /app/redis/{bin,conf,data,logs}

5、使用utils中的install_server.sh安装redis server


部署过程

Redis-cluster搭建

1、从测试打包已经编译redis文件夹,上传至需要安装的服务器

2、解压至app目录,目录结构如下,其中data,conf,logs为编译完成后自行创建的目录,分别用来存放数据文件,配置文件,日志文件,data目录下自行创建以端口号命名的文件夹,分别用来存放各个端口号实例的数据文件

-rw-rw-r--  1 root root 92766 Sep 21 22:20 00-RELEASENOTES
drwxr-xr-x  2 root root  4096 Dec 20 16:40 bin
-rw-rw-r--  1 root root    53 Sep 21 22:20 BUGS
drwxr-xr-x  2 root root  4096 Jan  4 15:37 conf
-rw-rw-r--  1 root root  1805 Sep 21 22:20 CONTRIBUTING
-rw-rw-r--  1 root root  1487 Sep 21 22:20 COPYING
drwxr-xr-x 10 root root  4096 Jan  3 11:24 data
drwxrwxr-x  7 root root  4096 Dec 20 14:50 deps
-rw-rw-r--  1 root root    11 Sep 21 22:20 INSTALL
drwxr-xr-x  2 root root  4096 Jan  4 15:37 logs
-rw-rw-r--  1 root root   151 Sep 21 22:20 Makefile
-rw-rw-r--  1 root root  4223 Sep 21 22:20 MANIFESTO
-rw-rw-r--  1 root root  6834 Sep 21 22:20 README.md
-rw-rw-r--  1 root root 46695 Sep 21 22:20 redis.conf
-rwxrwxr-x  1 root root   271 Sep 21 22:20 runtest
-rwxrwxr-x  1 root root   280 Sep 21 22:20 runtest-cluster
-rwxrwxr-x  1 root root   281 Sep 21 22:20 runtest-sentinel
-rw-rw-r--  1 root root  7606 Sep 21 22:20 sentinel.conf
drwxrwxr-x  2 root root  4096 Dec 20 14:51 src
drwxrwxr-x 10 root root  4096 Sep 21 22:20 tests
drwxrwxr-x  7 root root  4096 Jan  4 14:36 utils

3、修改各个端口的配置文件,以node1:7000的配置文件为例,根据情况修改

bind node1
protected-mode yes
port 7000
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_7000.pid
loglevel notice
logfile /app/redis/logs/redis_7000.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /app/redis/data/7000
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit nORMal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

4、启动对应端口的服务(所有节点的主从都启动),以7000为例

/app/redis/bin/redis-server  /app/redis/conf/7000.conf

5、创建集群

 /app/redis/bin/redis-trib.rb create node1:7000 node2:7000 node2:7000

[root@node1 bin]# ./redis-trib.rb check node1:7000
>>> Performing Cluster Check (using node node1:7000)
M: 3b485951a72e16133464585dc2920c10ce75967b node1:7000
   slots:5461-10922 (5461 slots) master
   0 additional replica(s)
M: 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc node3:7000
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: b6dd7c3D5af4ffc37e70d7eb538a3f9b0ae5a84f node2:7000
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6、从节点的添加需要在数据迁移之后

数据迁移

根据实际情况,参考:https://www.18188.org/articles/2016/04/23/1461374145366.html 进行数据迁移。

1、将所有的slot都转移到一台主实例


[root@node1 bin]# ./redis-trib.rb reshard --from b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f   --to 3b485951a72e16133464585dc2920c10ce75967b  --slots 5462 --yes node1:7000

[root@node1 bin]# ./redis-trib.rb reshard --from 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc   --to 3b485951a72e16133464585dc2920c10ce75967b  --slots 5462 --yes node1:7000

2、将原有的阿里云redis备份rdb文件下载放到对应目录

cp /app/hins2533955_data_20180105195042.rdb /app/redis/data/7000/dump.rdb

3、重启将备份文件读入,重启完成连接进入使用dbsize查看数据是否导入

/app/redis/bin/redis-cli -h node1 -p 7000 shutdown
/app/redis/bin/redis-server /app/redis/conf/7000.conf

4、重新分配slot

[root@node1 bin]# ./redis-trib.rb reshard --from 3b485951a72e16133464585dc2920c10ce75967b   --to b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f  --slots 5462 --yes node2:7000

[root@node1 bin]# ./redis-trib.rb reshard --from 3b485951a72e16133464585dc2920c10ce75967b   --to 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc  --slots 5462 --yes node3:7000

5、增加从节点,各节点对应关系:

1.node1:7000(主)---》node4:7000(从)
2.node2:7000(主)---》node5:7000(从)
3.node3:7000(主)---》 node6:7000(从)
[root@node1 bin]# ./redis-trib.rb check node1.7000
Invalid IP or Port (given as node1.7000) - use IP:Port format
[root@node1 bin]# ./redis-trib.rb check node1:7000
>>> Performing Cluster Check (using node node1:7000)
M: 3b485951a72e16133464585dc2920c10ce75967b node1:7000
   slots:10924-16383 (5460 slots) master
   0 additional replica(s)
M: b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f node2:7000
   slots:0-5461 (5462 slots) master
   0 additional replica(s)
M: 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc node3:7000
   slots:5462-10923 (5462 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@node1 bin]# ./redis-trib.rb add-node --slave --master-id 3b485951a72e16133464585dc2920c10ce75967b  node4:7000 node1:7000
>>> Adding node node4:7000 to cluster node1:7000
>>> Performing Cluster Check (using node node1:7000)
M: 3b485951a72e16133464585dc2920c10ce75967b node1:7000
   slots:10924-16383 (5460 slots) master
   0 additional replica(s)
M: b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f node2:7000
   slots:0-5461 (5462 slots) master
   0 additional replica(s)
M: 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc node3:7000
   slots:5462-10923 (5462 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node node4:7000 to make it join the cluster.
Waiting for the cluster to join...
>>> Configure node as replica of node1:7000.
[OK] New node added correctly.
[root@node1 bin]# ./redis-trib.rb add-node --slave --master-id b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f  node5:7000 node2:7000
>>> Adding node node5:7000 to cluster node2:7000
>>> Performing Cluster Check (using node node2:7000)
M: b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f node2:7000
   slots:0-5461 (5462 slots) master
   0 additional replica(s)
S: 8ff59145b1d3d7fd57923f3cb9c3444f7236d7b1 node4:7000
   slots: (0 slots) slave
   replicates 3b485951a72e16133464585dc2920c10ce75967b
M: 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc node3:7000
   slots:5462-10923 (5462 slots) master
   0 additional replica(s)
M: 3b485951a72e16133464585dc2920c10ce75967b node1:7000
   slots:10924-16383 (5460 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node node5:7000 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of node2:7000.
[OK] New node added correctly.
[root@node1 bin]# ./redis-trib.rb add-node --slave --master-id 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc  node6:7000 node3:7000
>>> Adding node node6:7000 to cluster node3:7000
>>> Performing Cluster Check (using node node3:7000)
M: 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc node3:7000
   slots:5462-10923 (5462 slots) master
   0 additional replica(s)
S: c09449b9dce5af4ac485ccedb664188229d75430 node5:7000
   slots: (0 slots) slave
   replicates b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f
S: 8ff59145b1d3d7fd57923f3cb9c3444f7236d7b1 node4:7000
   slots: (0 slots) slave
   replicates 3b485951a72e16133464585dc2920c10ce75967b
M: b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f node2:7000
   slots:0-5461 (5462 slots) master
   1 additional replica(s)
M: 3b485951a72e16133464585dc2920c10ce75967b node1:7000
   slots:10924-16383 (5460 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node node6:7000 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of node3:7000.
[OK] New node added correctly.

[root@node1 bin]# ./redis-trib.rb check node1:7000
>>> Performing Cluster Check (using node node1:7000)
M: 3b485951a72e16133464585dc2920c10ce75967b node1:7000
   slots:10924-16383 (5460 slots) master
   1 additional replica(s)
S: 8ff59145b1d3d7fd57923f3cb9c3444f7236d7b1 node4:7000
   slots: (0 slots) slave
   replicates 3b485951a72e16133464585dc2920c10ce75967b
S: 7501954b635724d66285afbb95841f4b49df5645 node6:7000
   slots: (0 slots) slave
   replicates 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc
S: c09449b9dce5af4ac485ccedb664188229d75430 node5:7000
   slots: (0 slots) slave
   replicates b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f
M: 54d5eb9415289228b05b28fe585bd5ab6e9bc0bc node3:7000
   slots:5462-10923 (5462 slots) master
   1 additional replica(s)
M: b6dd7c3d5af4ffc37e70d7eb538a3f9b0ae5a84f node2:7000
   slots:0-5461 (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
您可能感兴趣的文档:

--结束END--

本文标题: redis-cluster部署及数据迁移

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

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

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

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

下载Word文档
猜你喜欢
  • redis-cluster部署及数据迁移
    工作原理 节选自redis官方文档:http://www.redis.cn/topics/cluster-tutorial.html Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共...
    99+
    2022-10-18
  • redis迁移数据到redis-cluster的方法是什么
    本篇内容介绍了“redis迁移数据到redis-cluster的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,...
    99+
    2022-10-19
  • redis数据如何迁移
    redis数据迁移的示例:例如同一台redis服务器下,将0库的数据迁移到1库,在终端命令行连接redis后输入如下命令即可:redis-cli -n 0 -a 'foobared' keys '*' | xargs -I '{}' red...
    99+
    2022-10-06
  • redis集群数据如何迁移
    redis集群数据迁移的方法:1.使用shutdown命令关闭新集群,先从后主。2.拷贝原集群下的dump.rdb文件到新的集群目录下。3.启动各个端口实例,启动后将dump.rdb中的文件加载到内存中。4.启动新集群的各个端口实例,先主后...
    99+
    2022-10-07
  • 美国服务器部署网站时怎么迁移数据
    美国服务器部署网站时迁移数据的方法:1、对美国服务器的核心数据库进行完全备份,保证业务在转移到新服务器后能无缝重新上线;2、打包网站的内容,包括文本文档、必要的插件,图片等一系列文件,以免网站重新上线之后出现死链;3、配置新服务器的环境和系...
    99+
    2022-10-07
  • 缓存数据库Redis——Redis群集部署
    实验环境 用两台服务器模拟6台服务器(添加网卡) 主服务器Redis1: ens33: 192.168.52.150 ens36: 192.168.52.153 ens37: ...
    99+
    2022-10-18
  • CentOS怎么部署redis数据库
    本篇内容介绍了“CentOS怎么部署redis数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis开创了一种新的数据存储思路,使用...
    99+
    2023-06-27
  • Redis数据导入导出以及数据迁移的方法有哪些
    这篇文章主要介绍了Redis数据导入导出以及数据迁移的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、aof 导入方式。因为这种...
    99+
    2022-10-18
  • Redis数据库安装部署及基本操作详解
    Redis数据库概述 Redis是一个开源的、使用c语言编写NoSQL数据库,它是基于内存运行并支持持久化,采用key-value(键值对)的存储形式, 是目前分布式结构中不可或缺...
    99+
    2022-11-12
  • 缓存数据库Redis——Redis部署与配置
    关系型数据库与非关系型数据库 关系型数据库: 一个机构化的数据库,创建在关系模型基础上,一般面向于记录包括oracle、mysql、sqlserver、db2 非关系型数据库: 除了主流的关系型数据库...
    99+
    2022-10-18
  • Redis异构集群数据实时迁移
    背景 由于历史原因,公司的缓存方案使用的是Codis,并且一个大部门公用一个集群,我们计划废弃Codis,用Redis原生的集群架构,为什么要废弃Codis呢,主要有两个原因:1、Codis官方已经很久没有...
    99+
    2022-10-18
  • CentOS7---部署LNMP数据存储到redis
    一、部署LNMP及redis 1、部署LNMP,需要将 tengine-2.2.0.tar.gz 拷贝到虚拟机的 /root 目录下 步骤一:安装nginx 源码安装相关软件包 # pcre-devel做正则匹配,zlib-devel...
    99+
    2023-09-06
    redis php nginx 数据库 缓存
  • redis部署及各种数据类型使用命令详解
    目录编译安装redis开始部署报错 gcc命令没有找到:#解决编译安装所需的依赖环境继续部署redis服务端运行和客户端连接redis配置redis简单配置并启动set、get命令简...
    99+
    2022-11-13
  • redis大数据迁移的方法是什么
    Redis大数据迁移的方法包括以下几种:1. RDB文件迁移:RDB文件是Redis数据库的快照,可以通过将RDB文件复制到新的服务...
    99+
    2023-09-11
    redis
  • Redis数据库的安装部署以及基本操作介绍
    本篇内容介绍了“Redis数据库的安装部署以及基本操作介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis数据库概述Redis是一个...
    99+
    2023-06-20
  • Docker如何安装部署Redis数据库
    本篇内容介绍了“Docker如何安装部署Redis数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1,...
    99+
    2023-02-28
    docker redis
  • Window环境下的数据库部署——Redis数据库
    1.Redis简介 Remote Dictionary Server(Redis) 是一个开源的,可基于内存亦可持久化的 Key-Value 数据库. Key 字符类型,其值(value)可以 是 字符串(String), 哈 希(Map...
    99+
    2016-12-31
    Window环境下的数据库部署——Redis数据库
  • Redis通过主从复制完成数据迁移
    Redis通过主从复制完成数据迁移 进入新的服务器,执行从库配置,slaveof 命令配置当前Redis的主机,info命令可以查看Redis的信息。执行完slaveof命令后执行info命令查看master_link_statu...
    99+
    2018-12-15
    Redis通过主从复制完成数据迁移
  • SQL Server数据库原理及部署
    一、使用数据库的必要性 使用数据库可以高效且条理分明地存储数据,使工作人员能够更加迅速、方便地管理数据。数据库具有以下特点: 可以结构化的存储大量的数据信息,方便用户进行有效的检索和访问; 可以有...
    99+
    2022-10-18
  • redis部署及各种数据类型使用命令的示例分析
    这篇文章给大家分享的是有关redis部署及各种数据类型使用命令的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。编译安装redis开始部署[root@mcw01 ~]$ lsanacon...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作