Redis集群简单理解
Redis集群的简单理解
1. 集群概念
集群就是多个服务器做相同的事情,每个服务器都是完整的一个应用,多个服务器之间是复制的关系。
例如:
每个职位一样的人都干一样的事
2. 分布式
分布式就是多个服务器做不同的事情,每个服务器只是负责整个项目的一部分功能,所有服务器合起来才是一个完成的应用。
例如:
一样的职位分工干一个流程的工作
3. Redis集群的三种模式
- 主从复制(读写分离 是后面的基石
就一个主Redis,多个从Redis, 从Redis的数据是主Redis复制过来的 , 写操作(保存,删除,修改,查询)请求主Redis
而从Redis只能读 - Redis哨兵
在主从的基础上增加了哨兵,监控主的健康状态,自动的进行从到主的提升 - Redis-cluster集群
什么是集群
多主多从,多主实现了分布式数据存储,多主之间相互关联
数据存储方案
分布式数据存储 , 槽位运算 ,算法CRC16(key) % 16384
4. 搭建Redis-cluster集群
1.1.Redis 3.2
需要 6 台 redis 服务器。搭建伪集群。
需要 6 个 redis 实例。
需要运行在不同的端口 6379-6384
1.2.Ruby语言运行环境
我们需要使用ruby脚本来实现集群搭建
-
Ruby 打包系统RubyGems
RubyGems简称gems,是一个用于对 Ruby组件进行打包的 Ruby 打包系统
-
Redis的Ruby驱动redis-xxxx.gem
-
创建Redis集群的工具redis-trib.rb
2.Redis安装
2.1.安装6台Redis
在Window搭建6个伪集群
每个Redis创建启动脚本start.bat,内容如下
title redis-3679
redis-server.exe redis.windows.conf
2.2.Redis配置
修改redis.windows.conf,端口号分别对应:6379、6380、6381、6382、6383、6384。
开启cluster-enabled :cluster-enabled yes
指定集群配置文件: cluster-config-file nodes-6379.conf
,cluster-config-file nodes-6379.conf 是为该节点的配置信息,这里使用 nodes-端口.conf命名方法。服务启动后会在目录生成该文件。
指定超时:cluster-node-timeout 15000
开启持久:appendonly yes
2.3.安装Ruby
rubyinstaller-2.6.3-1-x64.exe 傻瓜式安装即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ks4s6gRB-1580901452714)(images/1573699878425.png)]
2.4.安装Ruby驱动
1.解压Ruby驱动(rubygems-2.7.7) , 进入根目录,cmd执行
ruby setup.rb
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWcRcSIv-1580901452715)(images/1573699927339.png)]
2.切入到Redis目录执行(6379的Redis目录)使用cmd执行 : gem install redis
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9AxMbcd-1580901452716)(images/1573699963621.png)]
2.5.执行集群构建脚本
1.启动6个Redis
2.拷贝redis-trib.rb到Redis目录(6379的Redis目录)
3.在6379根目录执行构建脚本:
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
4.在出现 Can I set the above configuration? (type ‘yes’ to accept): 请确定并输入 yes 。成功后的结果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hEhm4N0j-1580901452717)(images/1573701010499.png)]
2.6.测试集群命令
启动客户端:redis-cli –c –h 127.0.0.1 –p 6379 , 可以跟任何节点的端口
查看整个集群:cluster info
查看当前 Redis:info replication
查看槽位:cluster nodes
2.7.集群代码测试
@Test
public void testCluster() throws IOException, InterruptedException {
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("127.0.0.1", 6379));
nodes.add(new HostAndPort("127.0.0.1", 6380));
nodes.add(new HostAndPort("127.0.0.1", 6381));
nodes.add(new HostAndPort("127.0.0.1", 6382));
nodes.add(new HostAndPort("127.0.0.1", 6383));
nodes.add(new HostAndPort("127.0.0.1", 6384));
JedisCluster cluster = new JedisCluster(nodes);
try {
String res = cluster.get("name");
System.out.println(res);
//cluster.quit();
} catch (Exception e) {
e.printStackTrace();
//cluster.quit();
}
}
5.总结
重点:
- Redis三种集群模式,分别有什么优点,和缺点
- Redis-Cluster最终集群方案 , 有多少个槽为,数据存储方式,故障转移