当前位置: 首页 > news >正文

redis简介

一、redis-cluster架构图

777474-20161026171040812-2124541890.png

架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key

二、redis-cluster选举:容错

777474-20161026171134000-1702466171.png

(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)?
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

三、配置redis cluster

777474-20161026171206671-1360969111.png
使用包含(include)把通用配置和特殊配置分离,方便维护.

#redis特殊配置.
#包含通用配置  
include /opt/redis/redis-common.conf  
#监听tcp端口  
port 6379  
#最大可用内存  
maxmemory 100m  
#内存耗尽时采用的淘汰策略:  
# volatile-lru -> remove the key with an expire set using an LRU algorithm  
# allkeys-lru -> remove any key accordingly to the LRU algorithm  
# volatile-random -> remove a random key with an expire set  
# allkeys-random -> remove a random key, any key  
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)  
# noeviction -> don't expire at all, just return an error on write operations  
maxmemory-policy allkeys-lru  
#aof存储文件  
appendfilename "appendonly-6379.aof"  
#rdb文件,只用于动态添加slave过程  
dbfilename dump-6379.rdb  
#cluster配置文件(启动自动生成)  
cluster-config-file nodes-6379.conf  
#部署在同一机器的redis实例,把<span style="font-size: 1em; line-height: 1.5;">auto-aof-rewrite搓开,防止瞬间fork所有redis进程做rewrite,占用大量内存</span>  
auto-aof-rewrite-percentage 80-100  
#打开aof持久化  
appendonly yes  
#每秒一次aof写  
appendfsync everysec  
#关闭在aof rewrite的时候对新的写操作进行fsync  
no-appendfsync-on-rewrite yes  
auto-aof-rewrite-min-size 64mb  
lua-time-limit 5000  
#打开redis集群  
cluster-enabled yes  
#节点互连超时的阀值  
cluster-node-timeout 15000  

四、cluster 操作

cluster集群相关命令,更多redis相关命令见文档: http://redis.readthedocs.org/en/latest/

集群  
CLUSTER INFO 打印集群的信息  
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。  
节点  
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。  
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。  
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。  
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。  
槽(slot)  
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。  
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。  
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。  
CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。  
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。  
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。  
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。  
键  
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。  
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。  
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。  

五、redis安装

1.下载并解压redis

2.修改redis配置

    daemonize  yes                        #是否以后台进程运行,默认为no
    pidfile  /var/run/redis-16379.pid     #如以后台进程运行,则需指定一个pid文件
    logfile  /data/Applog/redislog/redis-16379.log  #日志记录方式,默认值为stdout 
    dbfilename dump-16379.rdb                   #本地数据库文件名,默认值为dump.rdb
    bind   132.96.153.4                   #绑定主机IP,必须绑定相应的网卡IP
    port   16379                           #监听端口,默认为6379
    cluster-enabled yes                   #是否启用集群
    cluster-config-file /data/cattsoft/redis/nodefile/nodes-16379.conf
    cluster-node-timeout 15000

3.启动实例

#集群失败后重启,必须删除以下文件
rm -f 7001/nodes-7001.conf  7002/nodes-7002.conf  dump-7001.rdb dump-7002.rdb
bin/redis-server ./7001/redis-7001.conf && bin/redis-server ./7002/redis-7002.conf
src/redis-trib.rb create --replicas 1 172.168.63.233:7001 172.168.63.234:7001 172.168.63.235:7001 172.168.63.233:7002 172.168.63.234:7002 172.168.63.235:7002

4.安装ruby

$sudo apt-get install ruby

5.安装ruby redis接口

$sudo gem install redis
离线安装:
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem

6.启动集群

src/redis-trib.rb create 172.168.8.251:7000 172.168.8.251:7001 172.168.8.251:7002 172.168.8.251:7003

#最少需要3个master节点,因此使用--replicas 1则最少需要6个节点
#src/redis-trib.rb create --replicas 1  172.168.8.251:7000 172.168.8.251:7001 172.168.8.251:7002 172.168.8.251:7003
#--replicas 则指定了为 Redis Cluster 中的每个 Master 节点配备几个 Slave 节点
#节点角色由顺序决定,先 master 之后是 slave

7.客户端访问

bin/redis-cli -p 7000 -c
#-c指定集群模式

六、docker + redis

1.启动节点,假设3个节点

#网络需设为host,默认bridge,宿主机外的其他机器不能访问
docker run -it -d --net=host --name cn7001 -v /home/ccknot/redis/7001/redis.conf:/usr/local/etc/redis/redis.conf cck-redis-cluster   
docker run -it -d --net=host --name cn7002 -v /home/ccknot/redis/7002/redis.conf:/usr/local/etc/redis/redis.conf cck-redis-cluster 
docker run -it -d --net=host --name cn7003 -v /home/ccknot/redis/7003/redis.conf:/usr/local/etc/redis/redis.conf cck-redis-cluster

2.查看节点启动情况

docker ps

3.创建集群

docker exec -it cn7001 redis-trib.rb create 172.168.8.251:7001 172.168.8.251:7002 172.168.8.251:7003

4.测试集群

docker exec -it cn7001 /usr/local/bin/redis-cli -c -h 172.168.8.251 -p 7001

转载于:https://www.cnblogs.com/ccknot/p/6001133.html

相关文章:

  • 《Spark GraphX in Action》书评及作者访谈
  • vue3的 computed 计算属性 与 watch监听
  • Diomidis Spinellis:有效的调试
  • ListView的简单使用
  • vue3技术 watch时 value问题
  • 最大流学习笔记(1)
  • vue3 watchEffect 函数
  • Apaceh 多虚拟主机多站点配置两种方案
  • ubutnu安装geany
  • vue3生命周期钩子函数
  • 每天一个linux命令(11):nl命令
  • ABP文档 - 本地化
  • react-native 安卓真机环境搭建
  • vue3 自定义hook函数 和 toRef
  • git add . 的时候遇到warning: LF will be replaced by CRLF in ...... 解决办法
  • CentOS6 编译安装 redis-3.2.3
  • express.js的介绍及使用
  • Javascript 原型链
  • Lucene解析 - 基本概念
  • Puppeteer:浏览器控制器
  • Python3爬取英雄联盟英雄皮肤大图
  • python学习笔记 - ThreadLocal
  • vue 个人积累(使用工具,组件)
  • Webpack入门之遇到的那些坑,系列示例Demo
  • Yii源码解读-服务定位器(Service Locator)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 聊聊flink的BlobWriter
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 排序(1):冒泡排序
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 手机端车牌号码键盘的vue组件
  • 新书推荐|Windows黑客编程技术详解
  • 优化 Vue 项目编译文件大小
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云服务器购买完整流程
  • 数据可视化之下发图实践
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4) PIVOT 和 UPIVOT 的使用
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (多级缓存)缓存同步
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十八)三元表达式和列表解析
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***检测工具之RKHunter AIDE
  • *p++,*(p++),*++p,(*p)++区别?
  • .bashrc在哪里,alias妙用
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 使窗口永不获得焦点
  • .NET企业级应用架构设计系列之开场白