搭建和测试 Redis 主备和集群

本文章只是自我学习用,不适宜转载。

1. Redis主备集群

1.1 搭建步骤

机器:海航云虚机(2核4GB内存),使用 Centos 7.2 64bit 操作系统,IP 分别是 192.168.100.5(主) 和 192.168.100.6(备)。

Redis 版本:3.2.3

1.1.1 在主备节点上,做如下安装

sudo yum update
sudo yum install epel-release
sudo yum update
sudo yum install redis
sudo systemctl start redis
sudo systemctl enable redis #配置redis在启动机器时自动启动

验证是否安装正确:

1.1.2 配置主备节点

主节点上,修改 /etc/redis.conf,设置 bind 127.0.0.1 192.168.100.5,然后运行 sudo systemctl restart redis 来重启redis。

主节点上,修改 /etc/redis.conf,设置 slaveof 192.168.100.5 6379,然后运行 sudo systemctl restart redis 来重启redis。

确认是否设置成功:

  • 在 master 上设置一个key/value:

  • 在 salve 上试着查看:

  • 不成功。检查 slave 上的 master 日志:

  • 检查网络连接,都没有问题。检查 master 节点,看看 redis 是否在网卡 192.168.100.5 的 6379 上监听,发现没有。再检查 redis.conf,发现有两行 bind,好吧。修改后,在 slave 上能取到 ‘a‘ 的value。
  • 查看两者之间的复制状态。在 master 上:

  • 在 slave 上,能看到自身的 role 和 master 的信息,以及 replication 的信息等

1.1.3 测试benchmark

在 master 上,运行:

不清楚这些绝对值意味着什么,但是和 https://redis.io/topics/benchmarks上的下面结果差不多:

1.1.4 将备升主

在备升主之前,在备上无法写:

将备升主:

此时它就可写了:

1.1.5 设置过期时间

https://redis.io/commands/expire

1.1.6 持久化

https://redis.io/topics/persistence

(1)关于持久化的几个问题:

  • RDB 模式:Redis 在指定的时间间隔上对数据集做快照。RDB 对日常备份和灾备都非常方便,而且对性能没有太大的影响。通常定时,比如每5分钟来做快照,但是使用它还是会丢数据。
  • AOF:Redis 服务器端将它收到的所有写操作以追加写方式写入到日志文件中,以便在服务器重启时重新执行。AOF有较强的灵活性,比如每秒刷新,每次写就刷新等;但是,AOF 文件通常比 RDB 文件大。根据不同的写入模式,AOF 通常会比 RDB 慢。
  • 默认开启 RDB,关闭 AOF。用户可以将两者都关闭,或者将两者都开启。官方不建议单独使用 AOF。如果对数据丢失有一定的容忍度,比如五分钟,则可以使用 RDB;否则,建议两者同时使用。

(2)测试 RDB:

文件的默认路径是 /var/lib/redis/dump.rbd.

默认配置:

save 900 1 #15分钟内如有一个1个key变化
save 300 10 #5分钟内,如果有10个key变化
save 60 10000 #1分钟内如果有10000个key变化

写入10个key后,备份写入:

在日志中能看到完整检测和写入过程:

(3)测试 AOF

AOF 默认被关闭,通过修改配置文件中的 appendonly yes 来将其打开。相关配置包括:

  • appendfsync everysec  #每隔一秒sync
  • appendfilename "appendonly.aof"  #AOF文件名

写入两个key/value,然后看到 aof 文件被修改了,其内容是文本格式:

2. Redis Cluster

Redis 从 3.0.5 版本开始推出了 Redis cluster 版本。

2.1 安装

主要参考文档:https://redis.io/topics/cluster-tutorial

(1)创建配置文件 redis.conf

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

(2)创建留个目录,每个目录运行一个 redis 进程,代表一个 redis 节点。共6个节点,3主3备。

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

(3)将 redis.conf 拷贝到 7000 ~ 7005 目录中,修改其中的 port 值为各目录name,并且将 redis-server 文件拷贝到每个目录中。

(4)进入每个目录,启动进程

../redis-server ./redis.conf &

结果如下:

[[email protected] ~]$ ps -ef | grep redis
cloud-u+ 23828     1  0 17:05 ?        00:00:04 ./redis-server *:7000 [cluster]
cloud-u+ 23831     1  0 17:05 ?        00:00:04 ./redis-server *:7001 [cluster]
cloud-u+ 23834     1  0 17:05 ?        00:00:04 ./redis-server *:7002 [cluster]
cloud-u+ 23837     1  0 17:06 ?        00:00:04 ./redis-server *:7003 [cluster]
cloud-u+ 23840     1  0 17:06 ?        00:00:04 ./redis-server *:7004 [cluster]
cloud-u+ 23843     1  0 17:06 ?        00:00:05 ./redis-server *:7005 [cluster]

(5)下载 redis 源码,比如 http://download.redis.io/releases/redis-3.2.3.tar.gz,解压,从 src 目录找到 redis-trib.rb 文件,拷贝到工作目录。注意redis-trib.rb版本必须和你使用的redis的版本相同,否则会出现兼容性问题。

(6)安装 ruby 和 rubygems

sudo yum install rubysudo yum install rubygemssudo gem install redi

(7)运行下面的命令,创建 cluster:

sudo ruby redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

(8)检查cluster 状态,OK

可以看到,6个节点,分为3个master,3个slave。每个master分了5461个slots,共计 16384 slots。

(9)基本操作

2.2 集群操作

2.2.1 将 7000 (master) 杀掉

此时,7003 由 slave 变为 master,它没有 slave。原来在 7000 上的数据改到了 7003 上:

启动 7000,它变为了 7003 的 slave:

2.2.2 增加主节点

(1)按照同样方法,启动 7006 redis 进程

(2)运行 sudo ruby redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000 命令,将它加入集群

(3)此时,它作为孤立的 master node,上面却没有分配 slots

(4)执行 reshard 操作

sudo ruby redis-trib-3.2.3.rb reshard 127.0.0.1:7000

结果:

会看到从其他的 master 上有移动一些 slots 到 7006 上。

2.2.3 增加从节点

(1)增加 7007

(2)运行

sudo ruby redis-trib.rb add-node --slave --master-id 98c93f338eaada7ced83e0e02360721c6f2187e2 127.0.0.1:7007 127.0.0.1:7000

结果:

能看到 7006 和 7007 之间的主备关系:

2.2.4 移除主节点

运行:

udo ruby redis-trib.rb del-node 127.0.0.1:7000 98c93f338eaada7ced83e0e02360721c6f2187e2

结果:

看来要先做resharding:

结果:

  • 7007 成了 7001 的 slave
  • 7006 被直接删除了

2.2.5 移除从节点

直接删除,不需要提前做 resharding:

时间: 2024-10-10 21:30:38

搭建和测试 Redis 主备和集群的相关文章

阿里云ECS部署Redis主备哨兵集群遇到的问题

一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www.cnblogs.com/ibethfy/p/9965902.html 二.遇到的问题 1.bind公网IP地址时,会出现异常:[Cannot assign requested address] 首先理解bind的含义:https://blog.csdn.net/cw_hello1/article/

gitlab实现主备切换集群

历史:gitlab-ce是不支持分布式架构方案的,所以all in one的服务down后,服务无法迅速恢复 rsync+PostgreSQL备份的方式实现快速切换server ip实现伪高可用 主机列表192.168.102.7 gitlab-master192.168.102.7 gitlab-backup 1,搭建gitlab环境(主从一样) #wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.

Redis 3.0.2集群搭建以及相关问题汇总

Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便 (1)像操作单个redis一样操作key,不用操心key在哪个节点上(2)在线动态添加.删除redis节点,不用停止服务(3)根据节点性能,动态分配不同数量的key到不同redis节点 (4)每个节点都配有slave,并自动监测和切换 Redis3 cluster 中增加了一个重要概念: hash slot(哈希槽),共有16384个slotkey不是直接放入redis中了,而是放入slot中,再把slot放入r

分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态.Redi

Redis主从以及哨兵集群搭建(二)

Redis主从以及哨兵集群搭建 一.前言 Redis主从同步原理同MySQL的主从原理十分相似,而解决Redis单点故障的哨兵机制(sentinel)又同解决MySQL单点故障的MHA十分相似.因此我们在学习Redis时,可以将学习MySQL的知识迁移,这样一来,有利于我们快速掌握Redis主从机制,Redis哨兵集群的搭建.Redis的Sentinel机制大概是这样的.sentinel即哨兵,作用即放哨.开个玩笑,其实哨兵有三个作用:监控.通知和自动故障转移.哨兵是用来监控Redis的mast

Redis 4.0.1集群搭建

Redis 4.0.1集群搭建 一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):slave->master 选举,集群容错 3):Hot resharding:在线分片 4):进群管理:cluster xxx 5):基于配置(nodes-port.conf)的集群管理 6):ASK 转向/MOVED 转向机制. 1.2.redis cluster 架构 1)redis-clust

redis高级应用(集群搭建、集群分区原理、集群操作)

文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. 回到顶部 Redis集群简介 Redis 集群是3.0之后才引入的,在3.0

Redis主从哨兵和集群搭建

主从哨兵和集群搭建 主从配置 哨兵配置 集群配置 1.主从: 国王和丞相,国王权力大(读写),丞相权利小(读) 2.哨兵: 国王和王子,国王死了(主服务挂掉),王子继位(从服务变主服务) 3.集群: 国王和国王,一个国王死了(节点挂掉),其他国王还活着,世界还没毁灭 主从配置 流程: 复制多份redis编译之后(make)的文件,分别命名为: xxx-6379 xxx-6380 xxx-6381 ... 开启6379服务和 6380服务 方式一: 在6380的客户端输入:slaveof 127.

如何将两个Redis主备实例建立全球灾备

华为云分布式缓存服务DCS,具有强大的功能,现在小编教大家如何在DCS管理控制台将两个Redis主备实例建立全球灾备.建立全球灾备,会对主实例和备实例进行升级,实例进程会重启,连接会中断.同时备实例会从主实例同步数据,原有的数据会被覆盖,需要谨慎操作.创建了全球灾备后,不同区域的实例可以相互同步数据.当前,该功能只在华北.华东.华南三个区域支持,请以控制台实际情况为准. 1 前提条件 已经创建了主实例和备实例,且实例要求如下:i. 缓存引擎类型,支持Redis 3.x.ii. 缓存实例类型,支持