redis工作模式:
单节点;
集群的方式:
主从模式(2.8之前)
解决的数据备份,读写分离,无法实现自动化故障转移;
无法对master扩容;
哨兵模式(2.8之后)
利用哨兵检测master的状态;
自动的故障转移;
无法对master扩容;
集群模式(3.0之后)
redis cluster
分片:
客户端
代理设备
服务器端
master只有一个slave
master故障-->slave
(ping-pong)
master有多个slave
选举,选出新的主;
slave广播(故障切换的认证请求),拉选票,让master投票;
master(故障转移的认证应答),投票给slave;
如果a-slave票数多,a成了master;
如果票数一样多,再选;
期望,半数以上;
对于集群服务器的数量建议为奇数台;



主从架构的优缺点

哨兵模式的优缺点

集群模式的优缺点










redis集群至少有三个master,而单个master至少对应一个slave;

将软件包拉到各个服务器中;开启同步会话;

解压:

cd到解压目录;开始编译;

编译后安装;指定安装目录;

命令优化;

安装redis;

然后搭建集群环境;
修改配置文件;

修改监听地址;

修改redis保持持久化的工作模式;

开启集群模式及其集群模式的配置文件;和超时时间;

将以下语句yes改成no;
插槽覆盖功能;

改到这里就修改完毕了,保存退出,重启一下redis;


然后取消同步会话功能;创建集群;
因为redis的特殊之处就在于去中心化的特性;

如果检查无误,就输入yes继续;

成功的提示页面;

此时就可以登录任意一个节点查看cluster的状态信息;

对于redis集群而言,任意一个节点的IP都可以作为登录的入口;
如何登录集群呢?
此时会发现,创建键值对,哈希运算后生成槽放置到集群的节点上;
这就是分布式存储;且查看提示符,会发现,会切换到其他主机上;
而查看的也是主机192.168.10.103的信息;

如何动态的扩缩容?
这里采用脚本的方式快速部署;
随意找一个节点进行添加;


但是此节点,写入的话不会分配给该节点;因为该节点没有槽;
第二种添加的语句;
要指定集群的任意一个节点的IP及端口;

但是这种添加的方法也没有槽位;
默认添加进来的新的节点都会以master的身份,添加进去;
如果想让添加的节点成为现有节点的slave;如何实现?
先加入到集群中,然后以新节点的IP登录到集群中,指定要作为哪个节点的从;
这时要指定master的ID;

此时,108就成为了107的slave;

重新分配槽位;

然后再登录进去,查看节点信息;

如何删除节点;即缩容;
先指定集群中的任意一个IP地址,再指定删除哪一个节点的ID;
会从集群中忘记该节点;FORGET

还会把该节点关闭掉;

删除一个从节点的时候,可以直接删掉,因为该节点没有分配槽位,但是删除一个主节点的话,会提示该节点不会空,即有槽位;
首先要把该节点数据库清空,然后重置一下该节点,再去移除该节点;
再把该节点删除掉;

但是删除了master节点,以往分配给该节点的槽位还存在,所以要重新分配一下槽位,给其他节点;
可以看出,会提醒无法重置槽位;

删除master节点会影响到集群的架构;

此时要同步集群的会话,清空数据库,然后重置;

重新创建集群;

但是针对该问题,有另外的解决方案,就是移动槽位,随即也会把数据移动走,再删除该节点就没影响了;
