
Redis-Cluster集群的理解和搭建
前言:
Redis是不支持Window环境集群的哈。
如果您比较心急,可以直接跳去看第二点。
一:Redis集群的理解
1 Redis Cluster是啥?
因为Redis是驻内存型数据库,当具有上千万,上亿的数据缓存的时候,服务器往往内存就炸了,这就需要分布式部署了。
Redis 3.0后支持redis-cluster,建议把redis把版本升至最高,然后cluster是采用无中心结构,结构内的节点相互跳转,且保存着整个集群的状态,每个节点都可以访问其他所有节点。
架构图
具有以下特点:
① 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
② 节点的fail是通过节点中超过半数的节点检测失效时才生效。并将slave升级为M(master);若集群任意master挂掉,且当前master没有slave,集群进入fail状态;如果集群超过半数以上的master挂掉,无论是否有slave,集群都进入fail状态
③客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
④Redis-cluster把16384 [0-16383,即4000H个地址分配] 个槽分配给我们指定的master节点,比如我们指定3个master节点,那么就是16384/3,5461个槽给一个master,
master1: [0-5460] (5461 slots)
master2: [5461-10922] (5462 slots)
master3:[10923-16383] (5461 slots)
多出来的个别槽加到其中一个master中去。像上面的master2一样
⑤ 根据④,这时候master都有自己的槽了,然后client需要在redis中存储一个键值对的时候,redis会对键名进行CRC16(key)mod 16384 运算,得出的数在哪个节点的槽的范围内,redis就将键值对存放在那个节点。
2 Redis-cluster 主仆模式(master-slave)
图来一波
上图中,新建了三个master(篮圈的),三个slave(灰圈的),共6个节点,然后分配是分给3个master的slot范围在正方框中。
这种模式,保证了redis集群的数据安全性和可用性,一个master节点对应一个或者多个slave节点,master节点提供数据存取,slave节点则是从master节点拉取数据备份,当这个master节点挂掉后,就会有这个slave节点选取一个来充当master节点,从而保证集群不会挂掉。
①当一个master挂掉的时候
它的slave节点(slave -> M 变成了master)就会顶替master节点成为master节点,集群继续正常工作
②当旧master重新上线时
旧master节点(M->slave)就变成了slave,等待它的master节点挂掉才有机会上位
3 一次存储键值对请求流程
跟着我流程图来
巩固一下好吧?
①Client连接了redis的Node3节点,向它发送了set userName “client”命令
②redis使用CRC16(“userName”) mode 16384得出 4710,然后在Node1 的范围内[0-5460],然后Node3访问Node1,将数据存在Node1
③读取的时候也大概这样的流程
二:Redis-cluster 的搭建
前提:redis规定至少有奇数个节点才可以开始集群,所以至少是三个节点,每个节点至少有一个备份节点,所以下面使用6节点。必要条件,ruby也规定6个节点才能开启集群服务,
主节点、备份节点由redis-cluster集群确定,我们负责设置6个节点就可以了)。
具有以下两个条件(IP换成自己机器的IP地址即可)
两台IP不同的机器的节点如下
第一台机器
192.168.127.132:7000
192.168.127.132:7001
192.168.127.132:7002
第二台机器
192.168.127.134:7000
192.168.127.134:7001
192.168.127.134:7002
或者同一机器,不同端口即可
一台机器
192.168.127.132:7000
192.168.127.132:7001
192.168.127.132:7002
192.168.127.132:7003
192.168.127.132:7004
192.168.127.132:7005
1:下载redis
官网下 http://www.redis.cn/download.html 稳定tar.gz版本
2:编译安装
#tar –xzf redis-x.x.x #cd redis-x.x.x #make && make install
3. 将 src/redis-trib.rb 复制到 /usr/local/bin 目录下,
#cp src/redis-trib.rb /usr/local/bin/
注:可以直接在命令行中使用redis-trib.rb
4. 创建 Redis 节点
首先在 第一台机器上~/redis-x.x.x的目录下创建redis_cluster 目录;
目录结构
–redis-x.x.x
——-src
——-redis_cluster
——-其他redis文件
#mkdir redis_cluster
5.在这个文件下,创名为7000,7001,7002的目录,
#cd redis_cluster #mkdir 7000 70001 70002
6.然后将redis-x.x.x/redis.conf文件都copy一份到这三个目录
#cp ../redis.conf 7000 #cp ../redis.conf 7001 #cp ../redis.conf 7002
7. 然后上面三份redis.conf配置文件都要改哦
#vim 7000/redis.conf ##使用(按esc使用/或者?)进行搜索下面关键字,下面写着各自改的是三份各自改,一样是三份都是这样改 port 7000 //端口7000,7001,7002 ,各自改 bind 本机ip //这里必须要改的,一样 daemonize yes //redis后台运行,一样 pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002,各自改 cluster-enabled yes //开启集群 把注释#去掉,一样 cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002,各自改 cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置,一样 appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志,一样 保存退出
8.第二台机器重复以上7个步骤
当然,如果是一台机器,那么就不能像上面的端口重复,要设置成7000,7001,7002,7003,7004,7005
9.启动各个节点
各进入两台机器的redis-x.x.x/src目录,启动server,加载redis_cluster下面的三个文件夹的redis.conf配置
一: sudo ./redis-server redis_cluster/7000/redis.conf sudo ./redis-server redis_cluster/7001/redis.conf sudo ./redis-server redis_cluster/7002/redis.conf 二: sudo ./redis-server redis_cluster/7003/redis.conf sudo ./redis-server redis_cluster/7004/redis.conf sudo ./redis-server redis_cluster/7005/redis.conf
10.检查是否开启
ps -ef|grep redis
##一台机器<br>ps -ef | grep redis
root 61020 1 0 02:14 ? 00:00:01 redis-server 192.168.127.132:7000 [cluster]
root 61024 1 0 02:14 ? 00:00:01 redis-server 192.168.127.132:7001 [cluster]
root 61029 1 0 02:14 ? 00:00:01 redis-server 192.168.127.132:7002 [cluster]
##二台机器<br>ps -ef | grep redis
root 61020 1 0 02:14 ? 00:00:01 redis-server 192.168.127.134:7000 [cluster]
root 61024 1 0 02:14 ? 00:00:01 redis-server 192.168.127.134:7001 [cluster]
root 61029 1 0 02:14 ? 00:00:01 redis-server 192.168.127.134:7002 [cluster]
没有开启的话,看看各自的配置的端口是否有冲突就可以了
11.开启群集
首先要有ruby环境
注意,注意,Ruby安装前看看要安装的版本是不是>1.9,这个很重要,<=1.9的话gem是无法安装redis的,看一下自己的yum或者apt的镜像源是不是经常更新,不是经常更新的不要用它去下载ruby,推荐清华大学的镜像源,然后更换了源后,就yum update,或者apt-get update
去下面链接找自己发行版本对应的操作
一:https://www.ruby-lang.org/zh_cn/documentation/installation/#apt 还是官网的自己安装方式靠谱,其他的很多都不行的,然后卡住的话,就yum update,或者apt-get update就可以了
二:gem还要添加安装redis
#gem install redis
三:开启集群!
redis-trib.rb create --replicas 1 192.168.127.134:7000 192.168.127.134:7001 192.168.127.134:7002 192.168.127.132:7000 192.168.127.132:7001 192.168.127.132:7002
出现是否可以使用该配置内容进行集群
yes即可
出现以上画面就OK了
12.动手测试一下
在随便一个机器,进入redis-x.x.x/src文件下,
输入
#redis-cli -h 192.168.127.132 -c -p 7002
加参数 -C 是连接到集群,-h 参数不可以省略,看自己想登哪个IP地址。p指定一下端口即可,随便一个节点都可进
set username “good day”,然后根据规则,数据存储到192.168.127.134:7001的中
然后再取出来