搭建和测试 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
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
(2)创建留个目录,每个目录运行一个 redis 进程,代表一个 redis 节点。共6个节点,3主3备。
mkdir cluster-test
cd cluster-test
mkdir
(3)将 redis.conf 拷贝到 7000 ~ 7005 目录中,修改其中的 port 值为各目录name,并且将 redis-server 文件拷贝到每个目录中。
(4)进入每个目录,启动进程
../redis-server ./redis.conf &
结果如下:
[cloud-user@redis-slave ~]$ ps -ef | grep redis
cloud-u+ : ? :: ./redis-server *: [cluster]
cloud-u+ : ? :: ./redis-server *: [cluster]
cloud-u+ : ? :: ./redis-server *: [cluster]
cloud-u+ : ? :: ./redis-server *: [cluster]
cloud-u+ : ? :: ./redis-server *: [cluster]
cloud-u+ : ? :: ./redis-server *: [cluster]
(5)下载 redis 源码,比如 http://download.redis.io/releases/redis-3.2.3.tar.gz,解压,从 src 目录找到 redis-trib.rb 文件,拷贝到工作目录。注意redis-trib.rb版本必须和你使用的redis的版本相同,否则会出现兼容性问题。其github 源代码 在这里。
(6)安装 ruby 和 rubygems
sudo yum install ruby
sudo yum install rubygems
sudo gem install redi
(7)运行下面的命令,创建 cluster:
sudo ruby redis-trib.rb create --replicas 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1:
(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..rb reshard 127.0.0.1:
结果:
会看到从其他的 master 上有移动一些 slots 到 7006 上。
2.2.3 增加从节点
(1)增加 7007
(2)运行
sudo ruby redis-trib.rb add-node --slave --master-id 98c93f338eaada7ced83e0e02360721c6f2187e2 127.0.0.1: 127.0.0.1:
结果:
能看到 7006 和 7007 之间的主备关系:
2.2.4 移除主节点
运行:
udo ruby redis-trib.rb del-node 127.0.0.1: 98c93f338eaada7ced83e0e02360721c6f2187e2
结果:
看来要先做resharding:
结果:
- 7007 成了 7001 的 slave
- 7006 被直接删除了
2.2.5 移除从节点
直接删除,不需要提前做 resharding:
参考链接:
https://redis.io/presentation/Redis_Cluster.pdf
https://www.zybuluo.com/phper/note/195558
搭建和测试 Redis 主备和集群的更多相关文章
- 阿里云ECS部署Redis主备哨兵集群遇到的问题
一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...
- Redis 3.0.2集群搭建以及相关问题汇总
Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便 (1)像操作单个redis一样操作key,不用操心key在哪个节点上(2)在线动态添加.删除redis节点,不用停止 ...
- 搭建Redis三主三从集群
Redis三主三从集群规划 10.0.128.19 使用端口 7000 7001 10.0.128.22 使用端口 7002 7003 10.0.128.23 使用端口 7004 7 ...
- 在三台服务器,搭建redis三主三从集群
一.资源准备 1.准备三台服务器H1.H2.H3 172.26.237.83 H1 172.26.237.84 H2 172.26.237.85 H3 二.配置服务器 1.在H1服务器设置SSH免密登 ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 转:Redis 3.2.1集群搭建
Redis 3.2.1集群搭建 一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2) ...
- redis高级应用(集群搭建、集群分区原理、集群操作)
文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...
随机推荐
- c语言贪吃蛇详解-2.画出蛇
c语言贪吃蛇详解-2.画出蛇 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 蛇的身 ...
- 深入理解 Android 消息机制原理
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:汪毅雄 导语: 本文讲述的是Android的消息机制原理,从Java到Native代码进行了梳理,并结合其中使用到的Epoll模型予以介 ...
- 51Nod--1008
1008 N的阶乘 mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 % ...
- 移动端H5制作安卓和IOS的坑 持续更新...
移动端H5制作安卓和IOS的坑 持续更新... 前言:最近参加公司的H5页面创意竞赛,又遇到不少页面在不同系统上的坑.踩坑之余,觉得很多之前遇到的知识点都忘了,索性开一篇博文,把这些坑都统一归纳起来, ...
- float和double的区别
1.float是单精度类型,精度有效数字为6位,超出则会四舍五入,取值范围为10的-38次方到10的38次方,float占用存储空间为4个字节. 2.double是双精度类型,精度有效数字为15位,超 ...
- Reminders在电商推荐中的价值
原论文在UMAP'16.文章并没有太高深的模型,比较接地气:但其观点与结论很独到,并且在工业界具有很强的实际操作价值. 针对推荐系统的研究大多关注在挖掘用户并不知道但是却与其兴趣相关的物品.不过每个推 ...
- setTimeout和setInterval和单线程
我们知道,js是单线程执行的(单线程j就是说在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行).所以其实setTimeout和setInterval所谓的"异 ...
- Android Service组件在新进程绑定(bindService)过程
1.首先看两个样例 (1)进程内 Client端 public class CounterService extends Service implements ICounterService { .. ...
- 自学Python2.7-collections系列
Python collections系列 Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供 ...
- Python爬虫Scrapy(二)_入门案例
本章将从案例开始介绍python scrapy框架,更多内容请参考:python学习指南 入门案例 学习目标 创建一个Scrapy项目 定义提取的结构化数据(Item) 编写爬取网站的Spider并提 ...