前言:

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的中

 

 

然后再取出来

您或许感兴趣

[2018-06-24]nginx下laravel抽离public文件夹,与项目文件夹同级,并重建索引
[2018-06-05]RSA传递AES密钥进行通信(Java 实现)
[2018-08-20]egg 生产环境下日志文件输出两份问题
[2018-08-27]五分钟使用EasyWechat

发表评论

电子邮件地址不会被公开。