Redis-cluster集群详细部署配置--有手就行

一、Redis Cluster去中心化集群

1.什么是Redis-Cluster

Redis Cluster是Redis官方提供的分布式解决方案。当遇到内存、并发、流量等瓶颈时,就可以采用Cluster架构达到负载均衡目的。

为何要搭建Redis集群。Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,Redis更适合处理高并发,一台设备的存储能力是很有限的,但是多台设备协同合作,就可以让内存增大很多倍,这就需要用到集群。

Redis集群搭建的方式有多种,例如使用客户端分片、Twemproxy、Codis等,但从redis 3.0之后版本支持redis-cluster集群,它是Redis官方提出的解决方案:
Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其Redis-cluster架构图如下:

Redis-cluster集群详细部署配置--有手就行_第1张图片

1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2.客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
3.节点的fail是通过集群中超过半数的节点检测失效时才生效。

2.Redis-cluster数据分布

Redis-cluster集群中有16384(0-16383)个哈希槽,每个redis实例负责一部分slot/槽位,集群中的所有信息通过节点数据交换而更新。一个hash slot中会有很多key和value。

3.数据分布存储原理

Redis 集群使用数据分片(sharding)来实现:Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value(name1: 张三) 时,redis 先对 key 使用 crc16 算法算出一个结果678698,然后把结果对 16384 求余数(集群使用公式 CRC16(key) % 16384),这样每个key 都会对应一个编号在 0-16383 之间的哈希槽,那么redis就会把这个key 分配到对应范围的节点上了。同样,当连接三个节点任何一个节点想获取这个key时,也会这样的算法,然后内部跳转到存放这个key节点上获取数据。

例如三个节点:哈希槽分布的值如下:

cluster1:  0-5460
cluster2:  5461-10922
cluster3:  10923-16383

这种将哈希槽分布到不同节点的做法使得用户可以很容易地向集群中添加或者删除节点。 比如说:

  • 如果用户将新节点 D 添加到集群中, 那么集群只需要将节点 A 、B 、 C 中的某些槽移动到节点 D 就可以了。
  • 如果用户要从集群中移除节点 A , 那么集群只需要将节点 A 中的所有哈希槽移动到节点 B 和节点 C , 然后再移除空白(不包含任何哈希槽)的节点 A 就可以了。

因为将一个哈希槽从一个节点移动到另一个节点不会造成节点阻塞, 所以无论是添加新节点还是移除已存在节点, 又或者改变某个节点包含的哈希槽数量, 都不会造成集群下线。

4.Redis-cluster主从模式

redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉.

1.主从切换机制
选举过程是集群中所有master参与,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作.  #故障节点对应的从节点自动升级为主节点

2.什么时候整个集群就不能用了?
如果集群任意一个主节点挂掉,且当前主节点没有从节点,则集群将无法继续,因为我们不再有办法为这个节点承担范围内的哈希槽提供服务。但是,如果这个主节点和所对应的从节点同时失败,则Redis Cluster无法继续运行。

二、集群部署

我们的实现环境是:使用三台机器,每台机器上开启两个redis,三台主master,三台从服务器起,也可以直接用六台机器

安装redis的过程我们跳过,三台机器都安装,详情请看http://t.csdn.cn/UoSMJ

我们部署的六个redis   分别端口号是:7000 7001 7002 7003 7004 7005

redis-1  192.168.126.140    7000    7001

redis-2  192.168.126.133    7002    7003

redis-3  192.168.126.139    7004    7005

1.部署节点,一台机器两个

redis-1

[root@redis-1 redis]# pwd
/data/redis
[root@redis-1 redis]# mkdir cluster
[root@redis-1 redis]# mkdir cluster/ 7000 7001
[root@redis-1 redis]# ls cluster/
7000  7001

#把redis。conf拷贝到我们部署的节点文件
[root@redis-1 redis]# cp redis.conf cluster/7000/
[root@redis-1 redis]# cp redis.conf cluster/7001/

[root@redis-1 redis]# mkdie data

然后redis-2   redis-3  都是这样的操作,只不过redis-2 创建的是7002  7003  redis-3创建的是7004 7005

2.修改配置文件

我们先修改redis-1的7000端口的配置文件,然后我们拷贝到其他端口的机器的目录下载进行修改,这样比较省事

[root@redis-1 redis]# vim cluster/7000/redis.conf

配置文件内容很多,我们只修改一部分这里我单独列出来

我们可以用vim编辑器的查找方法快速找到并修改

尾行模式   :/要搜索的单词                  按n切换

bind 192.168.126.140  #每个实例的配置文件修改为对应节点的ip地址 本机ip
port 7000   #监听端口,运行多个实例时,需要指定规划的每个实例不同的端口号
daemonize yes #redis后台运行
pidfile /var/run/redis_7000.pid #pid文件,运行多个实例时,需要指定不同的pid文件
logfile /var/log/redis_7000.log #日志文件位置,运行多实例时,需要将文件修改的不同。
dir /data/redis/data #存放数据的目录
appendonly yes #开启AOF持久化,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
appendfilename "appendonly.aof"  #AOF文件名称
appendfsync everysec #表示对写操作进行累积,每秒同步一次

以下为打开注释并修改
cluster-enabled yes #启用集群
cluster-config-file nodes-7000.conf #集群配置文件,由redis自动更新,不需要手动配置,运行多实例时请注修改为对应端口
cluster-node-timeout 5000 #单位毫秒。集群节点超时时间,即集群中主从节点断开连接时间阈值,超过该值则认为主节点不可以,从节点将有可能转为master
cluster-replica-validity-factor 10 #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。(计算方法为:cluster-node-timeout * cluster-replica-validity-factor,此处为:5000 * 10 毫秒)
cluster-migration-barrier 1 #一个主机将保持连接的最小数量的从机,以便另一个从机迁移到不再被任何从机覆盖的主机
cluster-require-full-coverage yes #集群中的所有slot(16384个)全部覆盖,才能提供服务

这样我们7000端口的机器就配置好了,我们拷贝给其他机器

cp redis.conf cluster/7001/
scp /data/redis/redis.conf 192.168.126.133:/data/redis/cluster/7002/
scp /data/redis/redis.conf 192.168.126.133:/data/redis/cluster/7003/
scp /data/redis/redis.conf 192.168.126.139:/data/redis/cluster/7004/
scp /data/redis/redis.conf 192.168.126.139:/data/redis/cluster/7005/

然后我们在对其配置文件进行同样的修改,要注意修改ip  和配置文件的7000数字,改成和自己所在目录一样的数字即可   7000和7001    7002和7003 7004和7005的ip是一样的,要修改四个7000的数字

3.启动所有的redis

[root@redis-1 redis]# nohup ./src/redis-server ./cluster/7000/redis.conf &
[root@redis-1 redis]# nohup ./src/redis-server ./cluster/7001/redis.conf &


[root@redis-2 redis]#  nohup ./src/redis-server ./cluster/7002/redis.conf &
[root@redis-2 redis]#  nohup ./src/redis-server ./cluster/7003/redis.conf &

[root@redis-3 redis]# nohup ./src/redis-server ./cluster/7004/redis.conf &
[root@redis-3 redis]# nohup ./src/redis-server ./cluster/7005/redis.conf &

查看状态

Redis-cluster集群详细部署配置--有手就行_第2张图片

Redis-cluster集群详细部署配置--有手就行_第3张图片

Redis-cluster集群详细部署配置--有手就行_第4张图片

4.创建集群

在三台机器的任意一台都行

[root@redis-1 redis]# ./src/redis-cli --cluster create --cluster-replicas 1 192.168.126.140:7000 192.168.126.140:7001 192.168.126.133:7002 192.168.126.133:7003 192.168.126.139:7004 192.168.126.139:7005

可以看到分配主从的规则

Redis-cluster集群详细部署配置--有手就行_第5张图片

Redis-cluster集群详细部署配置--有手就行_第6张图片

完成

我们登录测试一下

Redis-cluster集群详细部署配置--有手就行_第7张图片

然后查看集群实例

切换到redis-2上查看添加的内容

 

部署配置完成,下篇文章是给集群添加节点,新添加一个master和slave

你可能感兴趣的:(redis,java,数据库)