CentOS7 Redis集群

 Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。
因为投票机制,集群中节点的fail是通过集群中超过半数的节点检测失效时才生效,.例如只有两个节点,挂掉一个,剩下一个投票是不会超过50%,所以最少要三个节点
redis sentinel
集群为什么要3个以上?
3
个以上是通过增加 sentinel 
节点的个数提高对于故障判断的准确性,因为领导者选举需要至少一半加1个节点,奇数个节点可以在满足该条件的基础上节省一个节点,简单的说: 
如果有3个节点的 sentinel 当一个 redis 出现问题的时候, sentinel 
会马上进投票选举,只有选票超过半数才主观下线哦!,最后客观下线所以要3sentinel节点.

 

      (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状态.

 

 那么redis是怎么做到集群的呢?首先,在redis的每一个节点上,都有这么两个东西,一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384求余数,这样每个 key 都会对应一个编号在 0-16383之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

参考地址: https://www.cnblogs.com/liyasong/p/redis_jiqun.html?utm_source=itdadao&utm_medium=referral

 

安装步骤:同上篇单台安装

1. Redis集群要求三主三从,所以先在六台linux安装redis,六台安装redis省略

2.yum -y install ruby ruby-devel rubygems rpm-build   安装ruby的依赖

3.redis集群需要修改的配置文件

port  7000                                        //端口看你意愿,默认6379不需修改       

bind 本机ip                                       //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群,一定要修改为本机ip

daemonize    yes                               //redis后台运行

pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7001,7002,同台启动多个redis需要修改

cluster-enabled  yes                           //开启集群  把注释#去掉

cluster-config-file  nodes_7000.conf   //集群的配置  配置文件首次启动自动生成7000,7001,7002, 同台启动多个redis需要修改

cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置

appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志 

 

      4.ruby ./bin/redis-trib.rb create --replicas 1 172.21.2.34:6379 172.21.2.35:6379 172.21.2.37:6379 172.21.2.33:6379 172.21.2.32:6379 172.21.2.31:6379
在redis中src目录下执行,1代表每个主节点有一个从节点 后面跟着六个ip,前三个为主ip,后三个为从节点
会报错cannot load such file -- tokenizer.rb (LoadError)
原因是没有安装gemredis
然后去安装gemredis  gem  install  redis 会报错,连不上源,这时需要手动下载软件https://rubygems.org/gems/redis/versions/4.0.0    下载地址
 
下载完之后执行,gem  -l  install redis文件路径
如果报错:cannot load such file -- json/pure (LoadError)
然后去下载安装json_pure.gem       
Gem –l install json_pure文件路径
然后再安装gemredis
通过gem list 命令可以查看安装的gem软件
,最后再执行创建节点的命令
如果出现Sorry, can't connect to node
则集群bind 属性没有修改为本机的ip
5.集群测试
./redis-cli -c -h 172.21.2.34 -p 6379
连接一个节点的redis
172.21.2.34:6379> set name apple
-> Redirected to slot [5798] located at 172.21.2.35:6379
OK
172.21.2.35:6379> get name
"apple"
172.21.2.35:6379> exit
存值,然后连接另一个节点,取值。

你可能感兴趣的:(CentOS7 Redis集群)