redis集群搭建

Redis常见问题总结

匿名 (未验证) 提交于 2019-12-03 00:43:02
【本文内容来自网络总结】 Redis是一个开源、高性能、基于键值对的缓存与存储系统。 劣势:Redis是单线程,Memcached是多线程,在多核服务器上后者的性能理论上会更高一些。 优势:随着Redis3.0的推出,标志着memcache的所有功能都已经成了Redis的子集。同时Redis对集群的支持使得Memcache原有的第三方集群工具不再成为优势。因此,在新项目中使用Redis替代Memcache将会是非常好的选择。 (1)字符串类型 (Key-Value) 使用最多的类型 (2)散列类型 (Hash) 适合存储对象 (3)列表类型 (List) (4)集合类型 (Set) (5)有序集合类型 (Zset) 内存 Remote Dictionary Server(远程数据服务) 共六种数据淘汰策略。(分三类) 一、从已设置过期的数据集 (1)volatile-lru:从已设置过期时间的数据集中,选择最近最少使用的数据淘汰 (2)volatile-ttl:从已设置过期时间的数据集中,选择将要过期的数据淘汰 (3)volatile-random:从已设置过期时间的数据集中,任意选择数据淘汰 二、从整体数据集 (4)allkeys-lru:从全数据集中,选择最近最少使用的数据淘汰 (5)allkeys-random:从全数据集中任意选择数据淘汰 三、驱逐(默认策略-直接返回错误)

深入学习Redis(5):集群

匿名 (未验证) 提交于 2019-12-03 00:43:02
原文: 深入学习Redis(5):集群 前言 在前面的文章中,已经介绍了Redis的几种高可用技术:持久化、主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡。 Redis集群解决了上述问题,实现了较为完善的高可用方案。本文将详细介绍集群,主要内容包括: 集群的作用;集群的搭建方法及设计方案;集群的基本原理;客户端访问集群的方法;以及其他实践中需要的集群知识(集群扩容、故障转移、参数优化等) 。 系列文章 深入学习Redis(1):Redis内存模型 深入学习Redis(2):持久化 深入学习Redis(3):主从复制 深入学习Redis(4):哨兵 深入学习Redis(5):集群 Ŀ¼ 一、集群的作用 二、集群的搭建 1. 执行Redis命令搭建集群 2. 使用Ruby脚本搭建集群 3. 集群方案设计 三、集群的基本原理 1. 数据分区方案 2. 节点通信机制 3. 数据结构 4. 集群命令的实现 四、客户端访问集群 1. redis-cli 2. Smart客户端 五、实践须知 1. 集群伸缩 2. 故障转移 3. 集群的限制及应对方法 4. Hash Tag 5. 参数优化 6. redis-trib.rb 参考文献 一、集群的作用 集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。

redis集群搭建 sentinal

匿名 (未验证) 提交于 2019-12-03 00:43:02
sentinel.conf 最小的配置 每一个哨兵都可以去监控多个maser-slaves的主从架构 因为可能你的公司里,为不同的项目,部署了多个master-slaves的redis主从集群 相同的一套哨兵集群,就可以去监控不同的多个redis主从集群 你自己给每个redis主从集群分配一个逻辑的名称 # sentinel monitor master-group-name hostname port quorum sentinel monitor mymaster 127.0.0.1 6379 2 #down-after-milliseconds,超过多少毫秒跟一个redis实例断了连接,哨兵就可能认为这个redis实例挂了 sentinel down-after-milliseconds mymaster 60000 # failover-timeout,执行故障转移的timeout超时时长 sentinel failover-timeout mymaster 180000 # parallel-syncs,新的master别切换之后,同时有多少个slave被切换到去连接新master,重新做同步,数字越低,花费的时间越多 sentinel parallel-syncs mymaster 1 哨兵默认用26379端口,默认不能跟其他机器在指定端口连通,只能在本地访问

linux 部署redis集群 碰到的坑

匿名 (未验证) 提交于 2019-12-02 21:53:52
1: /usr/lib/ruby/gems/1.8/gems/redis-3.0.7/lib/redis/client.rb:97:in `call': ERR Slot 16011 is already busy (Redis::CommandError) 这是由于上一次配置集群失败时留下的配置信息导致的。只要把redis.conf中定义的 cluster-config-file 所在的文件删除,重新启动redis-server及运行redis-trib即可。 2: /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError) from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/local/bin/redis-trib.rb:25:in `<main>' 碰到这个问题我们需要通过gem在ruby中安装redis软件包 gem install redis(Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找、安装

redis yum安装配置 redis主从

给你一囗甜甜゛ 提交于 2019-12-02 17:47:46
1.安装 yum install epel-release.noarch -y yum install redis -y 2.配置主从 主: vim /etc/redis.conf #修改配置文件 bind 10.1.1.111 #修改监听IP requirepass 233233 #添加密码 masterauth 233233 #为什么要添加认证密码,假如主挂了,再次上线。此时主就变成从了,它需要认证其它服务器,其它服务器有密码会无法通过认证,所以预先设置好。 slave-priority 50 #增大选举权,保证主的挂了,再次线切换时候有足够权限拿到master 从: vim /etc/redis.conf #修改配置文件 bind 10.1.1.112 #修改监听IP requirepass 233233 #从 也要设置和主一样密码,假如主挂了,112提升为主,113认证的还是111的密码,这样112和113两台机器就无法连接。 slaveof 10.1.1.111 6379 #指定主的ip和端口 masterauth 233233 # 指定主的密码 另一台从也这个配置 systemctl start redis #同时启动三台主机 redis-cli -h 10.1.1.111 -a 233233 #登陆主服务器 10.1.1.111:6379> INFO

负载均衡,分布式,集群的理解,多台服务器代码如何同步

 ̄綄美尐妖づ 提交于 2019-12-02 12:54:34
集群 我们的项目如果跑在一台机器上,如果这台机器出现故障的话,或者用户请求量比较高,一台机器支撑不住的话。我们的网站可能就访问不了。那怎么解决呢?就需要使用多台机器,部署一样的程序,让几个机器同时的运行我们的网站。那怎么怎么分发请求的我们的所有机器上。所以负载均衡的概念就出现了。 负载均衡 负载均衡是指基于反向代理能将现在所有的请求根据指定的策略算法,分发到不同的服务器上。常用实现负载均衡的可以用nginx,lvs。但是现在也有个问题,如果负载均衡服务器出现问题了怎么办?所有冗余的概念就出现了。 冗余 冗余其实就是两个或者多台服务器 一个主服务器,一个从服务器。 假设一个主服务器的负载均衡服务器出现了问题,从服务器能够替代主服务器来继续负载均衡。实现的方式就是使用keepalive来抢占虚拟主机。 分布式 分布式其实就是将一个大项目的拆分出来,单独运行。 举个上面的例子。假设我们的访问量特别大。我们就可以做成分布式,跟cdn一样的机制。在北京,杭州,深圳三个地方都搭建一个一模一样的集群。离北京近的用户就访问北京的集群,离深圳近的就访问深圳这边的集群。这样就将我们网战给拆分3个区域了,各自独立。 再举个例子比如我们redis分布式。redis分布式是将redis中的数据分布到不同的服务器上面,每台服务器存储不同的内容,而mysql集群是每台服务器都放着一样的数据

(CentOS7)上搭建Redis-5.0.4集群(多台机器、密码验证)

旧巷老猫 提交于 2019-12-02 11:21:46
Redis集群搭建并不麻烦,只是步骤较多,跟着步骤走,就简单了。 环境以及搭建说明 : 说明:本人只有三台虚拟机,所以本人将三个master分别放在三台虚拟机上;本人同时又考虑了主备模式,所以又 需要搭建三个slave,同时又不想将成对的主备放在同一台机器上(因为如果某一台Linux崩了,那岂不是该 Redis的主和备都崩了),所以这里将Redis的主与备相互错开放置进三个Linux里,若某一台机器崩了,那么 仍然有三个“有效的”Redis节点。 追注:若果机器有6个的话,就不需要考虑这个问题,一个机器上一个节点就完事了。 注:由于redis在创建集群时,需要考虑到单点故障以及高可用。所以需要采用主备模式。同时redis在管理集群判断 节点是否健康采用的是投票策略,所以主节点的数量一定是单数的。 如:创建redis的最小的集群,应该是三个实例,在加上主备模式,那么一共应该是6个redis实例;如果不考虑主备的 话,3个实例就能搭建最简单的Redis集群了。 CentOS7上搭建Redis集群 第一步:准备Redis节点 提示: 可以挨个挨个安装6个单机版的Redis,也可以在安装完一个Redis后进行拷贝。本人就是安装完一个 Redis后进行的拷贝,具体的操作步骤是: 第一小步 : 按照 https://blog.csdn.net/justry_deng/article

redis三种模式对比

自古美人都是妖i 提交于 2019-12-02 05:46:23
模式类型 主从模式(redis2.8版本之前的模式)、哨兵sentinel模式(redis2.8及之后的模式)、redis cluster模式(redis3.0版本之后) 主从模式原理 同Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。 优点: 1、解决数据备份问题 2、做到读写分离,提高服务器性能 缺点: 1、每个客户端连接redis实例的时候都是指定了ip和端口号的,如果所连接的redis实例因为故障下线了,而主从模式也没有提供一定的手段通知客户端另外可连接的客户端地址,因而需要手动更改客户端配置重新连接 2、主从模式下,如果主节点由于故障下线了,那么从节点因为没有主节点而同步中断,因而需要人工进行故障转移工作 3、无法实现动态扩容 sentinel模式 Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。 例如: 优点 1、Master 状态监测 2

Redis cluster集群模式的原理

陌路散爱 提交于 2019-12-02 02:48:00
redis cluster   redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求   自动将数据进行分片,每个master上放一部分数据   提供内置的高可用支持,部分master不可用时,还是可以继续工作的   支撑N个redis master node,每个master node都可以挂载多个slave node   高可用,因为每个master都有salve节点,那么如果mater挂掉,redis cluster这套机制,就会自动将某个slave切换成master redis cluster vs. replication + sentinal   如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个G,单机足够了   replication,一个mater,多个slave,要几个slave跟你的要求的读吞吐量有关系,然后自己搭建一个sentinal集群,去保证redis主从架构的高可用性,就可以了   redis cluster,主要是针对海量数据+高并发+高可用的场景,海量数据,如果你的数据量很大,那么建议就用redis cluster 数据分布算法 hash算法   比如你有 N 个 redis实例,那么如何将一个key映射到redis上呢,你很可能会采用类似下面的通用方法计算 key的

Redis3.2.4 Cluster集群搭建

99封情书 提交于 2019-12-01 23:14:53
原文:https://www.cnblogs.com/jinkechen/p/8601767.html //redis集群 require 'predis/autoload.php';//引入predis相关包 $post_loan_queue = array( 'servers' => array("127.0.0.1:7001", "127.0.0.1:7003", "127.0.0.1:7005"), 'password' => 'password', ); $client = new Predis\Client($post_loan_queue['servers'], array('cluster' => 'redis','parameters' => ['password' =>'hccloud_redis'])); $res = $client->set("name1", "11"); $client->set("name2", "22"); $client->set("name3", "33"); $name1 = $client->get('name1'); $name2 = $client->get('name2'); $name3 = $client->get('name3'); var_dump($name1, $name2, $name3);die;