redis集群搭建

集群细节

  1. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和宽带。
  2. 节点的fail是通过集群中超过半数的节点检测失效时才能生效。
  3. 客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  4. Redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护node<->slot<->value

redis集群搭建

搭建集群之前的准备工作

1.解压上传的redis压缩包到安装目录。

2.安装gcc环境。

由于redis是由C语言编写的,它的运行需要C环境,因此我们需要先安装gcc。安装命令如下:

yum install gcc-c++

3.进入到 /usr/local/redis-6.2.6/(我本地的redis安装目录) 目录下,进行编译与安装。

3.1.对解压后的文件进行编译
在这里插入图片描述
3.2.进入redis安装目录下的src文件夹,安装redis
在这里插入图片描述

4.修改redis安装目录中的配置文件redis.conf

4.1.bind 127.0.0.1注释掉,里的bind指的是只有指定的网段才能远程访问这个redis,注释掉后,就没有这个限制了。
4.2.protected-mode 改为no,默认是设置成yes的, 防止了远程访问
4.3.将daemonize属性改为yes,表示后台启动。

5.测试redis启动和客户端连接(安装redis后,redis-server和redis-cli已经存在于/usr/local/bin中,所以在任何地方都可以运行)

5.1 启动redis在这里插入图片描述5.2 redis客户端连接redis
redis集群搭建_第1张图片

说明redis已成功安装,并且使用OK。

停掉上面的redis服务,下面开始做redis集群。

制作6个redis实例,端口号分别是6379,6380,6381,6389,6390,6391

1. 六个配置文件的内容大致相同

在这里插入图片描述
文本内容如下,redis6380.conf的内容一样,把redis6379.conf的6379都替换成6380就行了,其他的配置文件也一样。
注:/myredis/redis.conf是redis安装目录下的redis.conf配置文件

include /myredis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

2.启动6个服务

redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf
redis-server /myredis/redis6381.conf 
redis-server /myredis/redis6389.conf
redis-server /myredis/redis6390.conf
redis-server /myredis/redis6391.conf

启动后
redis集群搭建_第2张图片

3.进入redis的安装目录下的src中,执行下以命令(合体)

redis-cli --cluster create --cluster-replicas 1 121.37.161.244:6379 121.37.161.244:6380 121.37.161.244:6381 121.37.161.244:6389 121.37.161.244:6390 121.37.161.244:6391

此处不要用127.0.0.1,请用真实IP地址
–replicas 1采用最简单的方式配置集群,一台主机,一台从机,正好三组。
redis集群搭建_第3张图片

4. 查看集群

4.1 -c采用集群策略连接,设置数据会自动切换到相应的写主机

redis-cli -c -p 6379

在这里插入图片描述

4.2通过cluster nodes命令查看集群信息

redis集群搭建_第4张图片

5. redis cluster如何分配这六个节点

一个集群至少有三个节点
选项—cluster-replicas 1表示希望为集群中的每个主节点创建一个从节点。
分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。

6.redis的插槽

redis集群搭建_第5张图片
一个redis集群包含16384个插槽(hashslot),数据库中的每个键都属于这16384个插槽的其中一个。
集群使用公式CRC16(key)%16384来计算键key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和。
集群中的每个节点负责处理一部分插槽。
集群的从节点卡槽为0,当备份的主节点宕机时,从节点成为新的master时,会复制主节点的hash槽(卡槽)。

CRC16算法特点

  1. 对集群模式下的所有key进行CRC16计算,计算的结果始终在0-16383之间
  2. 对客户端的key进行CRC16计算时,同一个key经过CRC16计算,结果始终一致。
  3. 对客户端的不同key进行CRC16计算,计算的结果会出现不同key的结果一致。

根据k1计算到插槽是12706,12706插槽在6381上,就切换到6381上。
在这里插入图片描述redis集群搭建_第6张图片
redis集群搭建_第7张图片

故障恢复

问题1,主服务挂掉后的过程
redis集群搭建_第8张图片
问题2:
如果所有某一段插槽的主从节点都宕掉了,redis服务是否还能继续?
如果所有某一段插槽的主从节点都挂掉,而cluster-require-full-coverage为yes,那么,整个集群都挂掉了。
如果所有某一段插槽的主从节点都挂掉,而cluster-require-full-coverage为no,那么,该插槽数据全都不能使用,也无法存储。其他插槽部分依然可以提供服务。
redis.conf中的参数cluster-require-full-coverage

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