Redis-Cluster集群搭建
本教程是利用redis5.0版本进行搭建的集群方式,因为redis发布了5.0之后推出了很多新的特性,其中一点就是放弃Ruby的集群方式,改用的C语言编写的redis-cli,使redis集群构建方式复杂度大大降低
Redis官网搭建集群教程链接:https://redis.io/topics/cluster-tutorial
redis-cluster架构图(三主三从6个节点的配置)
redis-cluster架构总结:
1)、无中心化就是所谓的去中心化(客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可)
2)、在线自动扩容缩容
3)、自动failover(节点的fail是通过集群中超过半数的节点检测失效时才生效.通过投票机制)
4)、单层框架相应时间短
5)、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
6)、redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点
注意:由于Redis的容错投票机制是集群中过半数的节点认为某个节点检测失效时才生效,所以搭建最小集群模式至少需要三个节点,但是为了集群的高可用,就需要为每一个节点增加一个备份机,所以就需要六台服务器。
搭建redis集群
1、单机的redis搭建就不说了,公众号中有一篇从零开始搭建redis的文章,教你从零开始安装虚拟机到redis安装完成
公众号:
2、redis集群配置
1)、在redis的文件夹下面创建一个redis-cluster文件夹
2)、将redis.conf文件拷贝到当前文件夹下
3)、修改刚刚拷贝的redis.conf配置文件
protected-mode no 禁止保护模式
port端口号为6379
将ip改成 bind 0.0.0.0 任何ip都能访问到bind的IP(也可以注释掉,这样任何桌面客户端都可以连接了)(把防火墙关闭了)
指定文件存放路径 ( .rdb .aof nodes-xxxx.conf 这样的文件都会在此路径下)
启动集群模式
cluster-config-file 集群节点配置文件
daemonize yes 后台启动
cluster-node-timeout 15000 指定集群节点超时时间
appendonly yes 指定持久化方式
注意:我是在我本机创建了6个虚拟机,每一台虚拟机上都配置了一个redis,所以配置集群的时候所有的redis的端口都可以是6379,每一台虚拟机都需要和以上步骤的配置文件过程保持一致
写好一份copy 6份之后,每台都搞一份就可以了
分别启动每一台redis,启动成功
创建集群,此种方式是redis5.0版本的,之前3.0版本的不是这样的,网上有很多例子了,官网也有说明我就不介绍了
注意:报错了? [ERR] Node 172.16.178.2:6379 NOAUTH Authentication required.
解析:看错误是没有权限,有可能是没有设置连接密码,配置一下试试
配置连接master的密码
配置连接我需要的密码
此时创建集群成功,注意输入命令最后面加上密码 -a redis ,图中可以看出3个主机Master,3个从机Slave ,分配的槽点区间为[0 - 5460、5461 - 10922、10923 - 16383]
连接其中一个节点查看集群信息,cluster_state:ok 集群状态:OK,一共16384个槽点(slots),cluster_slots_ok:16384 所有节点都是好的,6个节点等等
集群节点信息, 三个主机节点,三个从机节点
查看redis进程
干掉一个集群中的一个主节点,查看集群信息,cluster:fail,集群状态fail,一共16384个槽点(slots),cluster_slots_ok:10923
集群节点信息,172.16.178.2节点的master 宕机了,fail, [0 - 5460] 个插槽失去了连接
将刚刚干掉的redis启动起来
再一次查看集群信息,cluster_state:ok 集群状态:OK,一共16384个槽点(slots),cluster_slots_ok:16384 所有节点都是好的,6个节点等等
再一次查看集群节点信息,此时172.16.178.6不再是slave了变成了master,而且172.16.178.2也不是master了变成了slave,且之前失去连接的 [0 - 5460] 槽恢复了连接
帮忙关注一下 微信公众号一起学习 :chengxuyuan95(不一样的程序员)