Redis系列九 Redis集群

摘要:
2.Redis集群至少应有三个节点。为了确保群集的高可用性,每个节点都需要有一台备份计算机。安装rubyyumeinstallruby yumeinstallrubygems 2。安装用于运行ruby脚本的包[root@localhost~]#geminstallredis-3.0.0.gem成功安装redis-3.0.01geminstalledredis-3.0.0安装redis-2.0.0的RDoc文档…[root@localhost ~]#[ root@localhost~]#cdredis-3.0.0/src[root@localhostsrc]#Ll*。rb-rwxrwxr-x.1root48141Apr12015redis-trib.rb2.2安装步骤需要六台redis服务器。需要六个Redis实例。在配置文件中,还需要删除集群启用前的注释,并注释掉bind127.0.0.1,允许所有机器链接Redis,并关闭防火墙。

1、 redis-cluster架构图

  Redis系列九 Redis集群第1张

  redis-cluster投票:容错

  Redis系列九 Redis集群第2张

  架构细节

  ①所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

  ②节点的fail是通过集群中超过半数的节点检测失效时才生效.

  ③客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

  ④redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

    Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,

    这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

    Redis系列九 Redis集群第3张

2、Redis集群的搭建

  Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。Redis集群至少需要6台服务器。

  2.1 集群搭建环境

    1、使用ruby脚本搭建集群。需要ruby的运行环境。

      安装ruby

       yum install ruby

       yum install rubygems

    2、安装ruby脚本运行使用的包      

[root@localhost ~]# gem install redis-3.0.0.gem 
Successfully installed redis-3.0.0
1 gem installed
Installing ri documentation for redis-3.0.0...
Installing RDoc documentation for redis-3.0.0...
[root@localhost ~]# 

[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr  1  2015 redis-trib.rb  

  2.2 搭建步骤

    需要6台redis服务器。搭建伪分布式。

    需要6个redis实例。

    需要运行在不同的端口7001-7006

    第一步:创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉,另外注释掉bind 127.0.0.1,允许所有机器链接redis,并且关掉防火墙。

    第二步:启动每个redis实例。

    第三步:使用ruby脚本搭建集群。   

./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006

 3、脚本

  创建关闭集群的脚本 

[root@localhost redis-cluster]# vim shutdow-all.sh
redis01/redis-cli -p 7001 shutdown
redis01/redis-cli -p 7002 shutdown
redis01/redis-cli -p 7003 shutdown
redis01/redis-cli -p 7004 shutdown
redis01/redis-cli -p 7005 shutdown
redis01/redis-cli -p 7006 shutdown
[root@localhost redis-cluster]# chmod u+x shutdow-all.sh 

   启动集群redis的脚本

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

   创建集群操作的提示信息,该操作只用执行一次,重启后不用再执行

[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006
>>> Creating cluster
Connecting to node 192.168.25.153:7001: OK
Connecting to node 192.168.25.153:7002: OK
Connecting to node 192.168.25.153:7003: OK
Connecting to node 192.168.25.153:7004: OK
Connecting to node 192.168.25.153:7005: OK
Connecting to node 192.168.25.153:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.25.153:7001
192.168.25.153:7002
192.168.25.153:7003
Adding replica 192.168.25.153:7004 to 192.168.25.153:7001
Adding replica 192.168.25.153:7005 to 192.168.25.153:7002
Adding replica 192.168.25.153:7006 to 192.168.25.153:7003
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.25.153:7001)
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   slots: (0 slots) master
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   slots: (0 slots) master
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   slots: (0 slots) master
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost redis-cluster]# 

4、集群的使用方法

Redis-cli连接集群。
[root@localhost redis-cluster]# redis01/redis-cli -p 7002 -c

-c:代表连接的是redis集群

5、实例集群搭建环境说明

  ①在/usr/local创建redis-cluster目录。

  ②向/usr/local/redis-cluster下拷贝6份redis安装后的目录

  Redis系列九 Redis集群第4张

  ③在源码包/opt/redis-4.0.1/src下拷贝redis-trib.rb至/usr/local/redis-cluster目录下

  ⑤在/usr/local/redis-cluster下创建启动所有redis实例的脚本start-all.sh和stop-all.sh脚本

免责声明:文章转载自《Redis系列九 Redis集群》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇主流列式数据库评测:InfiniDBNewtonsoft.Json 的基本用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

7--docker-compose详解

目录 一、Docker Compose简介 二、docker compose 安装 与 卸载 1.下载 2.授权 3.检测版本 4.卸载 三、docker compose使用 1.相关概念 2.场景 3.docker-compose模板 4.通过docker-compose运⾏⼀组容器 5. docker-compose 模板⽂件...

C# 通过ServiceStack 操作Redis——Hash类型的使用及示例

接着上一篇,下面转到hash类型的代码使用 Hash:结构 key-key-value,通过索引快速定位到指定元素的,可直接修改某个字段 /// <summary> /// Hash:类似dictionary,通过索引快速定位到指定元素的,耗时均等,跟string的区别在于不用反序列化,直接修改某个字段 /// str...

Redis中的批量操作Pipeline

大多数情况下,我们都会通过请求-相应机制去操作redis。只用这种模式的一般的步骤是,先获得jedis实例,然后通过jedis的get/put方法与redis交互。由于redis是单线程的,下一次请求必须等待上一次请求执行完成后才能继续执行。然而使用Pipeline模式,客户端可以一次性的发送多个命令,无需等待服务端返回。这样就大大的减少了网络往返时间,提...

Redis分布式锁,看完不懂你打我

简易的redis分布式锁 加锁: set key my_random_value NX PX 30000 这个命令比setnx好,因为可以同时设置过期时间。不设置过期时间,应用挂了,解不了锁,就一直锁住了。 解锁: if redis.call("get",KEYS[1])==ARGV[1] then return redis.call("del",K...

Redis下载及安装(windows版)

下载地址1、Github下载地址:https://github.com/MicrosoftArchive/redis/releases2、百度网盘下载地址 https://pan.baidu.com/s/1z1_OdNVbtgyEjiktqgB83g 密码:kdfq 安装过程1.首先先把下载的压缩包解压到一个文件夹中 2.打开cmd指令窗口3.输入你刚才...

springBoot--Redis配置与使用

SpringBoot自动配置redis,主要是两个自动配置类 缓存管理器配置类:org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration redis封装了工具RedisTemplate自动配置:org.springframework.boot.autoconfigure.da...